Prepare for SEPA payments.
authorWerner Koch <wk@gnupg.org>
Mon, 9 Mar 2015 19:35:26 +0000 (20:35 +0100)
committerWerner Koch <wk@gnupg.org>
Mon, 9 Mar 2015 19:39:52 +0000 (20:39 +0100)
cgi/procdonate.cgi
web/donate/checkout-se.org [new file with mode: 0644]
web/donate/index.org

index 3b2ecf4..bb95ca0 100755 (executable)
@@ -41,6 +41,7 @@ my $currency = "";
 my $name = "";
 my $mail = "";
 my $message = "";
 my $name = "";
 my $mail = "";
 my $message = "";
+my $separef = "";
 my $errorstr = "";
 
 # We use a dictionary to track error.  Those errors will then be
 my $errorstr = "";
 
 # We use a dictionary to track error.  Those errors will then be
@@ -50,6 +51,7 @@ my %errdict = ();
 # Prototypes
 sub fail ($);
 sub get_paypal_approval ();
 # Prototypes
 sub fail ($);
 sub get_paypal_approval ();
+sub complete_sepa ();
 
 
 # Write a template file.  A template is a proper HTML file with
 
 
 # Write a template file.  A template is a proper HTML file with
@@ -64,7 +66,7 @@ sub get_paypal_approval ();
 sub write_template ($) {
     my $fname = shift;
 
 sub write_template ($) {
     my $fname = shift;
 
-    my $errorpanel = '';
+    my $errorpanel = $errorstr;
     my $err_amount = '';
     my $err_name = '';
     my $err_mail = '';
     my $err_amount = '';
     my $err_name = '';
     my $err_mail = '';
@@ -85,6 +87,7 @@ sub write_template ($) {
     $name =~ s/\x22/\x27/g;
     $mail =~ s/\x22/\x27/g;
     $message =~ s/\x22/\x27/g;
     $name =~ s/\x22/\x27/g;
     $mail =~ s/\x22/\x27/g;
     $message =~ s/\x22/\x27/g;
+    $separef =~ s/\x22/\x27/g;
 
     # Clean possible user provided data
     $sessid =~ s/</\x26lt;/g;
 
     # Clean possible user provided data
     $sessid =~ s/</\x26lt;/g;
@@ -94,6 +97,7 @@ sub write_template ($) {
     $name =~ s/</\x26lt;/g;
     $mail =~ s/</\x26lt;/g;
     $message =~ s/</\x26lt;/g;
     $name =~ s/</\x26lt;/g;
     $mail =~ s/</\x26lt;/g;
     $message =~ s/</\x26lt;/g;
+    $separef =~ s/</\x26lt;/g;
 
     # No need to clean $euroamount.
 
 
     # No need to clean $euroamount.
 
@@ -115,6 +119,8 @@ sub write_template ($) {
         $check_paytype = "CC";
     } elsif ( $paytype eq "pp" ) {
         $check_paytype = "PP";
         $check_paytype = "CC";
     } elsif ( $paytype eq "pp" ) {
         $check_paytype = "PP";
+    } elsif ( $paytype eq "se" ) {
+        $check_paytype = "SE";
     }
 
     # Set var for the paypal button
     }
 
     # Set var for the paypal button
@@ -164,6 +170,7 @@ sub write_template ($) {
             || s/(<selected=\x22selected\x22)?><!--SEL_GBP-->/$sel_gbp>/
             || s/(<selected=\x22selected\x22)?><!--SEL_JPY-->/$sel_jpy>/
             || s/<!--PUBLISH_NAME-->/$publishname/
             || s/(<selected=\x22selected\x22)?><!--SEL_GBP-->/$sel_gbp>/
             || s/(<selected=\x22selected\x22)?><!--SEL_JPY-->/$sel_jpy>/
             || s/<!--PUBLISH_NAME-->/$publishname/
+            || s/<!--SEPA_REF-->/$separef/
             || s/<!--ERRORSTR-->/$errorstr/
             || s/<!--ERR_AMOUNT-->/$err_amount/
             || s/<!--ERR_NAME-->/$err_name/
             || s/<!--ERRORSTR-->/$errorstr/
             || s/<!--ERR_AMOUNT-->/$err_amount/
             || s/<!--ERR_NAME-->/$err_name/
@@ -301,9 +308,13 @@ sub write_checkout_page ()
     if ( $paytype eq "cc" ) {
         write_template("donate/checkout-cc.html");
     }
     if ( $paytype eq "cc" ) {
         write_template("donate/checkout-cc.html");
     }
-    else {
+    elsif ( $paytype eq "pp" ) {
         write_template("donate/checkout-pp.html");
     }
         write_template("donate/checkout-pp.html");
     }
+    else {
+        # For SEPA this is the final page
+        write_template("donate/checkout-se.html");
+    }
 }
 
 
 }
 
 
@@ -321,6 +332,7 @@ sub write_thanks_page ()
 sub check_donation ()
 {
     my %data;
 sub check_donation ()
 {
     my %data;
+    my %sepa;
     my $anyerr = 0;
 
     # Note: When re-displaying the page we always use amount other
     my $anyerr = 0;
 
     # Note: When re-displaying the page we always use amount other
@@ -364,9 +376,16 @@ sub check_donation ()
 
     # Check the payment type
     $paytype = $q->param("paytype");
 
     # Check the payment type
     $paytype = $q->param("paytype");
-    if ( $paytype ne "cc" and $paytype ne "pp" ) {
+    if ( $paytype ne "cc" and $paytype ne "pp" and $paytype ne "se" ) {
         $errdict{"paytype"} = 'No payment type selected.' .
         $errdict{"paytype"} = 'No payment type selected.' .
-                              ' Use "Credit Card" or "PayPal".';
+                              ' Use "Credit Card", "PayPal", or "SEPA".';
+        $anyerr = 1;
+    }
+
+    # SEPA credit transfers are only possible in Euro.
+    # (yes, this may overwrite an earlier error message).
+    if ( $paytype eq "se" and $currency ne "EUR" ) {
+        $errdict{"amount"} = 'SEPA transfers are only possible in EUR.';
         $anyerr = 1;
     }
 
         $anyerr = 1;
     }
 
@@ -392,10 +411,13 @@ sub check_donation ()
     payproc ('SESSION create', \%data ) or fail $data{"ERR_Description"};
     $sessid = $data{"_SESSID"};
 
     payproc ('SESSION create', \%data ) or fail $data{"ERR_Description"};
     $sessid = $data{"_SESSID"};
 
-    # Send the checkout page and redirect to paypal
+    # Send the checkout page or redirect to paypal
     if ( $paytype eq "pp" ) {
         get_paypal_approval ();
     }
     if ( $paytype eq "pp" ) {
         get_paypal_approval ();
     }
+    elsif ( $paytype eq "se" ) {
+        complete_sepa ();
+    }
     else {
         write_checkout_page();
     }
     else {
         write_checkout_page();
     }
@@ -565,7 +587,7 @@ sub confirm_paypal_checkout ()
     $mail = $data{"Mail"};
     $message = $data{"Message"};
 
     $mail = $data{"Mail"};
     $message = $data{"Message"};
 
-    # Store the session after setting the above cars because that call
+    # Store the session after setting the above vars because that call
     # clears DATA.
     payproc ('SESSION put ' . $sessid, \%data)
         or fail $data{"ERR_Description"};
     # clears DATA.
     payproc ('SESSION put ' . $sessid, \%data)
         or fail $data{"ERR_Description"};
@@ -618,6 +640,47 @@ EOF
 }
 
 
 }
 
 
+# Complete the SEPA payment: Check values and show final page.
+sub complete_sepa ()
+{
+    my %data;
+    my %request;
+
+    payproc ('SESSION get ' . $sessid, \%data)
+        or fail $data{"ERR_Description"};
+
+    $request{"Currency"} = $data{"Currency"};
+    $request{"Amount"} = $data{"Amount"};
+    $request{"Desc"} = "GnuPG SEPA donation";
+    $request{"Meta[name]"} = $data{"Name"} unless $data{"Name"} eq 'Anonymous';
+    if ($data{"Mail"} ne '') {
+        $request{"Meta[mail]"} = $data{"Mail"};
+    }
+    if ($data{"Message"} ne '') {
+        $request{"Meta[message]"} = $data{"Message"};
+    }
+    if (not payproc ('SEPAPREORDER', \%request )) {
+        $errorstr = "Error: " . $request{"ERR_Description"};
+        # Back to the main page.
+        write_main_page ();
+        return;
+    }
+    $separef = $request{"SEPA-Ref"};
+    $amount = $request{"Amount"};
+
+    # Set remaining vars for the checkout page.
+    $currency = $data{"Currency"};
+    $paytype = $data{"Paytype"};
+    $stripeamount = $data{"Stripeamount"};
+    $euroamount = $data{"Euroamount"};
+    $name = $data{"Name"};
+    $mail = $data{"Mail"};
+    $message = $data{"Message"};
+
+    write_checkout_page ();
+}
+
+
 
 #
 # Main
 
 #
 # Main
diff --git a/web/donate/checkout-se.org b/web/donate/checkout-se.org
new file mode 100644 (file)
index 0000000..9ebd91d
--- /dev/null
@@ -0,0 +1,69 @@
+#+TITLE: GnuPG - Donate - Checkout using SEPA
+#+STARTUP: showall
+#+SETUPFILE: "../share/setup.inc"
+
+* Donate - Checkout using SEPA
+
+  Single Euro Payments Area credit transfers can be used to transfer
+  Euro within the 34 states of the European Union and 6 associated
+  states.
+
+#+BEGIN_HTML
+  <table border="0" cellpadding="0" cellspacing="4" id="checkoutSummary">
+   <tr>
+     <td align="right">Name:&nbsp;</td>
+     <td><!--NAME--></td>
+   </tr>
+   <tr>
+     <td align="right">Mail:&nbsp;</td>
+     <td><!--MAIL--></td>
+   </tr>
+   <tr>
+     <td align="right" valign="top">Message:&nbsp;</td>
+     <td><!--MESSAGE_FMT--></td>
+   </tr>
+  </table>
+#+END_HTML
+
+  Please send your donation to this bank account:
+
+#+BEGIN_HTML
+  <table border="0" cellpadding="0" cellspacing="4" id="checkoutSummary">
+   <tr>
+     <td align="right">Owner:&nbsp;</td>
+     <td>g10 Code GmbH</td>
+   </tr>
+   <tr>
+     <td align="right">IBAN:&nbsp;</td>
+     <td>DE76 3015 0200 0002 1086 03</td>
+   </tr>
+   <tr>
+     <td align="right">BIC:&nbsp;</td>
+     <td>WELADED1KSD</td>
+   </tr>
+   <tr>
+     <td align="right">Reference:&nbsp;</td>
+     <td><!--SEPA_REF--></td>
+   </tr>
+   <tr>
+     <td align="right">Amount:&nbsp;</td>
+     <td><!--AMOUNT-->
+         EUR</td>
+   </tr>
+  </table>
+#+END_HTML
+
+  Take care to give the reference number so that we can match your
+  data with your actual donation and list you as donor if desired.
+  The given reference number expires in 30 days, thus please act in
+  time.  You may send a different amount but please send at least 5
+  Euro to cover our bookkeeping costs.  Using the reference number for
+  recurring donations is also possible.
+
+  *Thank you in advance for your donation.*
+
+#+BEGIN_HTML
+  <ul>
+    <li><a href="/index.html">Continue</a></li>
+  </ul>
+#+END_HTML
index 5888d95..c63358b 100644 (file)
                      value="pp" /><!--CHECK_PP-->PayPal</label>
      </td>
    </tr>
                      value="pp" /><!--CHECK_PP-->PayPal</label>
      </td>
    </tr>
+   <tr>
+     <td></td>
+     <td>
+       <label><input type="radio" name="paytype"
+                     value="se" /><!--CHECK_SE-->SEPA</label>
+     </td>
+   </tr>
    <tr><td>&nbsp;</td></tr>
    <tr>
       <td></td>
    <tr><td>&nbsp;</td></tr>
    <tr>
       <td></td>