payment: note that Stripe has instituted an additional 1% fee for non-US cards
[hcoop/portal.git] / payment.mlt
dissimilarity index 99%
index 067bf49..2394d46 100644 (file)
-<h3><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=payment@hcoop.net&item_name=Member+payment+for+<% Init.getUserName () %>">Add to your balance with PayPal</a></h3>
-
-<h3>Add to your balance with <a href="http://checkout.google.com/">Google Checkout</a>:
-    <table>
-<form action="https://checkout.google.com/cws/v2/Merchant/641723647067155/checkout" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm">
-        <tr>
-            <td>
-                <select name="buyButtonCart">
-                    <option value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxjaGVja291dC1zaG9wcGluZy1jYXJ0IHhtbG5zPSJodHRwOi8vY2hlY2tvdXQuZ29vZ2xlLmNvbS9zY2hlbWEvMiI+DQogIDxzaG9wcGluZy1jYXJ0Pg0KICAgIDxpdGVtcz4NCiAgICAgIDxpdGVtPg0KICAgICAgICA8aXRlbS1uYW1lPkFkZCAkMTAgdG8geW91ciBiYWxhbmNlPC9pdGVtLW5hbWU+DQogICAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4NCiAgICAgICAgPHVuaXQtcHJpY2UgY3VycmVuY3k9IlVTRCI+MTAuMDwvdW5pdC1wcmljZT4NCiAgICAgICAgPGl0ZW0tZGVzY3JpcHRpb24gLz4NCiAgICAgIDwvaXRlbT4NCiAgICA8L2l0ZW1zPg0KICA8L3Nob3BwaW5nLWNhcnQ+DQogIDxjaGVja291dC1mbG93LXN1cHBvcnQ+DQogICAgPG1lcmNoYW50LWNoZWNrb3V0LWZsb3ctc3VwcG9ydCAvPg0KICA8L2NoZWNrb3V0LWZsb3ctc3VwcG9ydD4NCjwvY2hlY2tvdXQtc2hvcHBpbmctY2FydD4NCg0K//separator//JamZPEfPuWdsrp0xWerG2bJmWYg=">&#x24;10.00 - Add &#x24;10 to your balance</option>
-                    <option value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxjaGVja291dC1zaG9wcGluZy1jYXJ0IHhtbG5zPSJodHRwOi8vY2hlY2tvdXQuZ29vZ2xlLmNvbS9zY2hlbWEvMiI+DQogIDxzaG9wcGluZy1jYXJ0Pg0KICAgIDxpdGVtcz4NCiAgICAgIDxpdGVtPg0KICAgICAgICA8aXRlbS1uYW1lPkFkZCAkMjAgdG8geW91ciBiYWxhbmNlPC9pdGVtLW5hbWU+DQogICAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4NCiAgICAgICAgPHVuaXQtcHJpY2UgY3VycmVuY3k9IlVTRCI+MjAuMDwvdW5pdC1wcmljZT4NCiAgICAgICAgPGl0ZW0tZGVzY3JpcHRpb24gLz4NCiAgICAgIDwvaXRlbT4NCiAgICA8L2l0ZW1zPg0KICA8L3Nob3BwaW5nLWNhcnQ+DQogIDxjaGVja291dC1mbG93LXN1cHBvcnQ+DQogICAgPG1lcmNoYW50LWNoZWNrb3V0LWZsb3ctc3VwcG9ydCAvPg0KICA8L2NoZWNrb3V0LWZsb3ctc3VwcG9ydD4NCjwvY2hlY2tvdXQtc2hvcHBpbmctY2FydD4NCg0K//separator//2CDnW1MkNhBy4j1k7V6s2TVEVpI=">&#x24;20.00 - Add &#x24;20 to your balance</option>
-                    <option value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxjaGVja291dC1zaG9wcGluZy1jYXJ0IHhtbG5zPSJodHRwOi8vY2hlY2tvdXQuZ29vZ2xlLmNvbS9zY2hlbWEvMiI+DQogIDxzaG9wcGluZy1jYXJ0Pg0KICAgIDxpdGVtcz4NCiAgICAgIDxpdGVtPg0KICAgICAgICA8aXRlbS1uYW1lPkFkZCAkNTAgdG8geW91ciBiYWxhbmNlPC9pdGVtLW5hbWU+DQogICAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4NCiAgICAgICAgPHVuaXQtcHJpY2UgY3VycmVuY3k9IlVTRCI+NTAuMDwvdW5pdC1wcmljZT4NCiAgICAgICAgPGl0ZW0tZGVzY3JpcHRpb24gLz4NCiAgICAgIDwvaXRlbT4NCiAgICA8L2l0ZW1zPg0KICA8L3Nob3BwaW5nLWNhcnQ+DQogIDxjaGVja291dC1mbG93LXN1cHBvcnQ+DQogICAgPG1lcmNoYW50LWNoZWNrb3V0LWZsb3ctc3VwcG9ydCAvPg0KICA8L2NoZWNrb3V0LWZsb3ctc3VwcG9ydD4NCjwvY2hlY2tvdXQtc2hvcHBpbmctY2FydD4NCg0K//separator//88aQDU37EdF4b2MsvLPL2FiAbRU=">&#x24;50.00 - Add &#x24;50 to your balance</option>
-                    <option value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxjaGVja291dC1zaG9wcGluZy1jYXJ0IHhtbG5zPSJodHRwOi8vY2hlY2tvdXQuZ29vZ2xlLmNvbS9zY2hlbWEvMiI+DQogIDxzaG9wcGluZy1jYXJ0Pg0KICAgIDxpdGVtcz4NCiAgICAgIDxpdGVtPg0KICAgICAgICA8aXRlbS1uYW1lPkFkZCAkMTAwIHRvIHlvdXIgYmFsYW5jZTwvaXRlbS1uYW1lPg0KICAgICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+DQogICAgICAgIDx1bml0LXByaWNlIGN1cnJlbmN5PSJVU0QiPjEwMC4wPC91bml0LXByaWNlPg0KICAgICAgICA8aXRlbS1kZXNjcmlwdGlvbiAvPg0KICAgICAgPC9pdGVtPg0KICAgIDwvaXRlbXM+DQogIDwvc2hvcHBpbmctY2FydD4NCiAgPGNoZWNrb3V0LWZsb3ctc3VwcG9ydD4NCiAgICA8bWVyY2hhbnQtY2hlY2tvdXQtZmxvdy1zdXBwb3J0IC8+DQogIDwvY2hlY2tvdXQtZmxvdy1zdXBwb3J0Pg0KPC9jaGVja291dC1zaG9wcGluZy1jYXJ0Pg0KDQo=//separator//EayZGMDTNKdL75UUBET3ivL5tPU=">&#x24;100.00 - Add &#x24;100 to your balance</option>
-                    <option value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxjaGVja291dC1zaG9wcGluZy1jYXJ0IHhtbG5zPSJodHRwOi8vY2hlY2tvdXQuZ29vZ2xlLmNvbS9zY2hlbWEvMiI+DQogIDxzaG9wcGluZy1jYXJ0Pg0KICAgIDxpdGVtcz4NCiAgICAgIDxpdGVtPg0KICAgICAgICA8aXRlbS1uYW1lPkFkZCAkMjAwIHRvIHlvdXIgYmFsYW5jZTwvaXRlbS1uYW1lPg0KICAgICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+DQogICAgICAgIDx1bml0LXByaWNlIGN1cnJlbmN5PSJVU0QiPjIwMC4wPC91bml0LXByaWNlPg0KICAgICAgICA8aXRlbS1kZXNjcmlwdGlvbiAvPg0KICAgICAgPC9pdGVtPg0KICAgIDwvaXRlbXM+DQogIDwvc2hvcHBpbmctY2FydD4NCiAgPGNoZWNrb3V0LWZsb3ctc3VwcG9ydD4NCiAgICA8bWVyY2hhbnQtY2hlY2tvdXQtZmxvdy1zdXBwb3J0IC8+DQogIDwvY2hlY2tvdXQtZmxvdy1zdXBwb3J0Pg0KPC9jaGVja291dC1zaG9wcGluZy1jYXJ0Pg0KDQo=//separator//wjow2c9hWKClWEf9bZgI00to3Oc=">&#x24;200.00 - Add &#x24;200 to your balance</option>
-                    <option value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxjaGVja291dC1zaG9wcGluZy1jYXJ0IHhtbG5zPSJodHRwOi8vY2hlY2tvdXQuZ29vZ2xlLmNvbS9zY2hlbWEvMiI+DQogIDxzaG9wcGluZy1jYXJ0Pg0KICAgIDxpdGVtcz4NCiAgICAgIDxpdGVtPg0KICAgICAgICA8aXRlbS1uYW1lPkFkZCAkNTAwIHRvIHlvdXIgYmFsYW5jZTwvaXRlbS1uYW1lPg0KICAgICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+DQogICAgICAgIDx1bml0LXByaWNlIGN1cnJlbmN5PSJVU0QiPjUwMC4wPC91bml0LXByaWNlPg0KICAgICAgICA8aXRlbS1kZXNjcmlwdGlvbiAvPg0KICAgICAgPC9pdGVtPg0KICAgIDwvaXRlbXM+DQogIDwvc2hvcHBpbmctY2FydD4NCiAgPGNoZWNrb3V0LWZsb3ctc3VwcG9ydD4NCiAgICA8bWVyY2hhbnQtY2hlY2tvdXQtZmxvdy1zdXBwb3J0IC8+DQogIDwvY2hlY2tvdXQtZmxvdy1zdXBwb3J0Pg0KPC9jaGVja291dC1zaG9wcGluZy1jYXJ0Pg0KDQo=//separator//zAFfJqOZBPuO46sFs25F/VQyAdM=">&#x24;500.00 - Add &#x24;500 to your balance</option>
-                </select>
-            </td>
-            <td>
-                <input alt="" src="https://checkout.google.com/buttons/buy.gif?merchant_id=641723647067155&amp;w=117&amp;h=48&amp;style=white&amp;variant=text&amp;loc=en_US" type="image"/>
-            </td>
-        </tr>
-    </form></table></h3>
+<% val you = Init.getUser () %>
+
+<% if $"cmd" = "stripeSuccess" then %>
+<div class="notice">
+
+<h3>Stripe Payment Succeeded</h3>
+
+<p>Your payment via Stripe must still be applied to your balance
+manually at present, and will be applied by the treasurer within a few
+days.</p>
+
+</div>
+<% end %>
+
+<h3>Add To Your Balance</h3>
+
+<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
+<script src="https://checkout.stripe.com/checkout.js"></script>
+
+<p>Remember that we credit member balances for payments <b>after subtracting service fees</b>. This means that, to increase your balance by a particular amount, you must make a <b>larger</b> payment
+than just that amount. Stripe and Paypal have equal fees (for US
+residents); You can calculate the amount <em>x</em> to send from the amount <em>y</em> you want us to receive with this formula: <tt><em>x</em> = (<em>y</em> +
+  0.30) / (1 - 0.029)</tt>. Stripe charges an additional 1% fee for non-U.S. cards, even when paying in USD.</p>
+
+<div class="payment-tile">
+<h4>Add to your balance with <a href="https://paypal.com">PayPal</a></h4>
+
+<p>Payal fees are 2.9% + $0.30 for payments from the US. The fees for
+other countries may be different, consult <a href="https://www.paypal.com/us/cgi-bin/webscr?cmd=_display-fees-outside">the PayPal fees page</a> if
+  needed.</p>
+
+<form method="GET" action="https://www.paypal.com/cgi-bin/webscr">
+  <input type="hidden" name="cmd" value="_xclick" />
+  <input type="hidden" name="business" value="payment@hcoop.net" />
+  <input type="hidden" name="item_name" value="Member payment for <% Init.getUserName () %>" />
+
+  <select id="paypalDuesEasy">
+    <option value="" selected="selected">Custom:</option>
+    <% foreach (amt) in [10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100] do %>
+    <option value="<% amt %>.00">$<% amt %>.00</option>
+    <% end %>
+  </select>
+
+  <script>
+    $("#paypalDuesEasy").change (function () {
+     $("#paypalDues").val ($(this).val ());
+   });
+  </script>
+
+  <label>$<input id="paypalDues" type="text" name="amount" pattern="^\\d+(\\.\\d\\d)?$" required="required" size="7" /></label>
+  <input type="submit" value="Add To Balance" />
+</form>
+
+<% switch #paypal you of
+   NONE => %><p>You haven't set a PayPal e-mail address.  If you are going to send a payment by PayPal, please <a href="pref">set a PayPal e-mail address on the Preferences page</a> first to ensure that you are credited promptly and accurately.</p><%
+end %>
+</div>
+<div class="payment-tile">
+<h4>Add to your balance with <a href="https://stripe.com/">Stripe</a></h4>
+
+<p>Stripe fees are 2.9% + $0.30 for each transaction regardless of country.</p>
+
+<form id="stripeForm" action="/stripe/stripe-payment.cgi" method="POST">
+  <select id="stripeDuesEasy">
+    <option value="" selected="selected">Custom:</option>
+    <% foreach (amt) in [10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100] do %>
+    <option value="<% amt %>.00">$<% amt %>.00</option>
+    <% end %>
+  </select>
+
+  <script>
+    $("#stripeDuesEasy").change (function () {
+     $("#stripeDues").val ($(this).val ());
+   });
+  </script>
+  <label>$<input type="text" name="stripeDuesUSD" id="stripeDues" pattern="^\\d+(\\.\\d\\d)?$" required="required" size="7" /></label>
+  <input type="hidden" name="webuser_id" value="<% #id you %>" />
+  <input type="hidden" name="webuser_name" value="<% #name you %>" />
+  <input type="hidden" name="cmd" value="member_payment" />
+  <input type="hidden" name="stripeDues" id="stripeDuesCents" value="" />
+  
+  <button id="stripePay">Add To Balance</button>
+  <script>
+   $("#stripePay").click (function(e) {
+     if ($("#stripeDues")[0].validity.valid) { 
+       var token = function(res){
+        var $input = $('<input type=hidden name=stripeToken />').val(res.id);
+        $("#stripeDuesCents").val($("#stripeDues").val() * 100);
+        $('#stripeForm').append($input).submit();
+       };
+       
+       // Open Checkout with further options
+       StripeCheckout.open({
+        key: 'pk_live_pvWpH450opRXCi0KvN1h5mN1',
+        image: '/globe.gif',
+        name: 'Hcoop',
+        description: 'Dues ($'.concat ($("#stripeDues").val ()).concat (')'),
+        amount:  $("#stripeDues").val() * 100,
+        currency: 'usd',
+        address: true,
+        panelLabel: 'Pay {{amount}}',
+        token: token
+       });
+     }
+     return false;
+   });
+  </script>
+</form>
+</div>