jenkins-bot has submitted this change and it was merged.

Change subject: new recurring charge API
......................................................................


new recurring charge API

These are taken from the recurring GlobalCollect fork.

The test stinks.

Change-Id: Id9f280a243c9211336b3f1d7938ca1e13b42dddc
---
M gateway_common/gateway.adapter.php
M globalcollect_gateway/globalcollect.adapter.php
A tests/Adapter/GlobalCollect/RecurringTestCase.php
A tests/includes/Responses/globalcollect/DO_PAYMENT_recurring.testresponse
A tests/includes/Responses/globalcollect/GET_ORDERSTATUS_recurring.testresponse
A tests/includes/Responses/globalcollect/SET_PAYMENT_recurring.testresponse
6 files changed, 263 insertions(+), 2 deletions(-)

Approvals:
  Ejegg: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/gateway_common/gateway.adapter.php 
b/gateway_common/gateway.adapter.php
index 32b9c5a..650316f 100644
--- a/gateway_common/gateway.adapter.php
+++ b/gateway_common/gateway.adapter.php
@@ -2202,7 +2202,7 @@
 
        public function validTransactionWMFStatus( $status = null ) {
                if ( $status == null ) {
-                       $status = $this->getTransactionWMFStatus();
+                       $status = $this->getFinalStatus();
                }
                return in_array( $status, $this->valid_statuses );
        }
diff --git a/globalcollect_gateway/globalcollect.adapter.php 
b/globalcollect_gateway/globalcollect.adapter.php
index 30970a6..68c1985 100644
--- a/globalcollect_gateway/globalcollect.adapter.php
+++ b/globalcollect_gateway/globalcollect.adapter.php
@@ -528,6 +528,7 @@
                                        'PARAMS' => array(
                                                'ORDER' => array(
                                                        'ORDERID',
+                                                       'EFFORTID',
                                                ),
                                        )
                                )
@@ -607,6 +608,37 @@
                        'values' => array(
                                'ACTION' => 'DO_FINISHPAYMENT',
                                'VERSION' => '1.0',
+                       ),
+               );
+
+               $this->transactions['DO_PAYMENT'] = array(
+                       'request' => array(
+                               'REQUEST' => array(
+                                       'ACTION',
+                                       'META' => array(
+                                               'MERCHANTID',
+                                               'IPADDRESS',
+                                               'VERSION',
+                                       ),
+                                       'PARAMS' => array(
+                                               'PAYMENT' => array(
+                                                       'MERCHANTREFERENCE',
+                                                       'ORDERID',
+                                                       'EFFORTID',
+                                                       'PAYMENTPRODUCTID',
+                                                       'AMOUNT',
+                                                       'CURRENCYCODE',
+                                                       'HOSTEDINDICATOR',
+                                                       
'AUTHENTICATIONINDICATOR',
+                                               ),
+                                       )
+                               )
+                       ),
+                       'values' => array(
+                               'ACTION' => 'DO_PAYMENT',
+                               'VERSION' => '1.0',
+                               'HOSTEDINDICATOR' => '0',
+                               'AUTHENTICATIONINDICATOR' => '0',
                        ),
                );
        }
@@ -1065,6 +1097,8 @@
                                $result = $this->transactionDirect_Debit();
                                $this->saveCommunicationStats( 'Direct_Debit', 
$transaction );
                                return $result;
+                       case 'Recurring_Charge' :
+                               return $this->transactionRecurring_Charge();
                        default:
                                return parent::do_transaction( $transaction );
                }
@@ -1312,8 +1346,24 @@
                return $status_result;
        }
 
-       protected function transactionDirect_Debit() {
+       /**
+        * Process a non-initial effort_id charge.
+        */
+       protected function transactionRecurring_Charge() {
+               $result = $this->do_transaction('DO_PAYMENT');
+               if ($result['status']) {
+                       $result = $this->do_transaction('GET_ORDERSTATUS');
+                       $data = $this->getTransactionData();
+                       $orderStatus = $this->findCodeAction( 
'GET_ORDERSTATUS', 'STATUSID', $data['STATUSID'] );
+                       if ( $this->getTransactionStatus() && $orderStatus == 
'pending-poke' ) {
+                               
$this->transactions['SET_PAYMENT']['values']['PAYMENTPRODUCTID'] = 
$result['data']['PAYMENTPRODUCTID'];
+                               $result = $this->do_transaction('SET_PAYMENT');
+                       }
+               }
+               return $result;
+       }
 
+    protected function transactionDirect_Debit() {
                $result = $this->do_transaction('DO_BANKVALIDATION');
                if ($result['status'])
                {
@@ -1461,6 +1511,15 @@
                        case 'DO_FINISHPAYMENT':
                                $data = $this->xmlChildrenToArray( $response, 
'ROW' );
                                break;
+                       case 'DO_PAYMENT':
+                               $data = $this->xmlChildrenToArray( $response, 
'STATUS' );
+                               if ( isset( $data['STATUSID'] ) ) {
+                                       $this->finalizeInternalStatus( 
$this->findCodeAction( 'GET_ORDERSTATUS', 'STATUSID', $data['STATUSID'] ) );
+                               } else {
+                                       $this->finalizeInternalStatus( 'failed' 
);
+                               }
+                               $data['ORDER'] = $this->xmlChildrenToArray( 
$response, 'ORDER' );
+                               break;
                }
 
                return $data;
diff --git a/tests/Adapter/GlobalCollect/RecurringTestCase.php 
b/tests/Adapter/GlobalCollect/RecurringTestCase.php
new file mode 100644
index 0000000..938462f
--- /dev/null
+++ b/tests/Adapter/GlobalCollect/RecurringTestCase.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Wikimedia Foundation
+ *
+ * LICENSE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+/**
+ * @see DonationInterfaceTestCase
+ */
+require_once dirname( dirname( dirname( __FILE__ ) ) ) . DIRECTORY_SEPARATOR . 
'DonationInterfaceTestCase.php';
+
+/**
+ * 
+ * @group Fundraising
+ * @group DonationInterface
+ * @group GlobalCollect
+ */
+class DonationInterface_Adapter_GlobalCollect_RecurringTestCase extends 
DonationInterfaceTestCase {
+
+       /**
+        * @param $name string The name of the test case
+        * @param $data array Any parameters read from a dataProvider
+        * @param $dataName string|int The name or index of the data set
+        */
+       function __construct( $name = null, array $data = array(), $dataName = 
'' ) {
+               parent::__construct( $name, $data, $dataName );
+               $this->testAdapterClass = 'TestingGlobalCollectAdapter';
+       }
+
+       function tearDown() {
+               TestingGlobalCollectAdapter::clearGlobalsCache();
+               parent::tearDown();
+       }
+
+       /**
+        * Can make a recurring payment
+        *
+        * @covers GlobalCollectAdapter::transactionRecurring_Charge
+        */
+       public function testRecurringCharge() {
+               $init = array(
+                       'amount' => '2345',
+                       'effort_id' => 2,
+                       'order_id' => '9998890004',
+                       'currency_code' => 'EUR',
+                       'payment_product' => '',
+               );
+               $gateway = $this->getFreshGatewayObject( $init );
+
+               // FIXME: I don't understand whether the literal code should 
correspond to anything in GC
+               $gateway->setDummyGatewayResponseCode( 'recurring' );
+
+               $result = $gateway->do_transaction( 'Recurring_Charge' );
+
+               $this->assertTrue( isset( $result['status'] ) && 
$result['status'] === true );
+               $this->assertRegExp( '/SET_PAYMENT/', $result['result'] );
+       }
+}
diff --git 
a/tests/includes/Responses/globalcollect/DO_PAYMENT_recurring.testresponse 
b/tests/includes/Responses/globalcollect/DO_PAYMENT_recurring.testresponse
new file mode 100644
index 0000000..86d734d
--- /dev/null
+++ b/tests/includes/Responses/globalcollect/DO_PAYMENT_recurring.testresponse
@@ -0,0 +1,62 @@
+<?xml version = "1.0"?>
+<XML>
+       <REQUEST>
+               <ACTION>DO_PAYMENT</ACTION>
+               <META>
+               <MERCHANTID>test</MERCHANTID>
+               <IPADDRESS>127.0.0.1</IPADDRESS>
+               <VERSION>1.0</VERSION>
+               </META>
+               <PARAMS>
+                       <ORDER>
+                               <ORDERID>626113410</ORDERID>
+                               <AMOUNT>155</AMOUNT>
+                               <CURRENCYCODE>USD</CURRENCYCODE>
+                               <LANGUAGECODE>en</LANGUAGECODE>
+                               <COUNTRYCODE>US</COUNTRYCODE>
+                               
<MERCHANTREFERENCE>14222.39313</MERCHANTREFERENCE>
+                               <IPADDRESSCUSTOMER>127.0.0.1</IPADDRESSCUSTOMER>
+                               <EMAIL>[email protected]</EMAIL>
+                       </ORDER>
+                       <PAYMENT>
+                               <AMOUNT>155</AMOUNT>
+                               <CURRENCYCODE>USD</CURRENCYCODE>
+                               <LANGUAGECODE>en</LANGUAGECODE>
+                               <COUNTRYCODE>US</COUNTRYCODE>
+                               <HOSTEDINDICATOR>1</HOSTEDINDICATOR>
+                               
<RETURNURL>http://localhost/index.php/Special:GlobalCollectGatewayResult?order_id=626113410</RETURNURL>
+                               
<AUTHENTICATIONINDICATOR>0</AUTHENTICATIONINDICATOR>
+                               <FIRSTNAME>Firstname</FIRSTNAME>
+                               <SURNAME>Surname</SURNAME>
+                               <STREET>123 Fake Street</STREET>
+                               <CITY>San Francisco</CITY>
+                               <STATE>CA</STATE>
+                               <ZIP>94105</ZIP>
+                               <EMAIL>[email protected]</EMAIL>
+                       </PAYMENT>
+               </PARAMS>
+               <RESPONSE>
+                       <RESULT>OK</RESULT>
+                       <META>
+                       <REQUESTID>1891851</REQUESTID>
+                       <RESPONSEDATETIME>20140327165513</RESPONSEDATETIME>
+                       </META>
+                       <ROW>
+                               <STATUSDATE>20140327165513</STATUSDATE>
+                               <PAYMENTREFERENCE>0</PAYMENTREFERENCE>
+                               
<EXTERNALREFERENCE>14222.39313</EXTERNALREFERENCE>
+                               
<ADDITIONALREFERENCE>14222.39313</ADDITIONALREFERENCE>
+                               <ORDERID>626113410</ORDERID>
+                               <EFFORTID>2</EFFORTID>
+                               <REF>000000000000000000000000000000</REF>
+                               <FORMACTION>url_placeholder</FORMACTION>
+                               <FORMMETHOD>GET</FORMMETHOD>
+                               <ATTEMPTID>1</ATTEMPTID>
+                               <MERCHANTID>test</MERCHANTID>
+                               <STATUSID>20</STATUSID>
+                               
<RETURNMAC>s1h645HHsQRpCEMpOa8IyfAEHtPig+N0cEYmt08LSrw=</RETURNMAC>
+                               
<MAC>maQKu1wA3aLG11UymxkvFHV2LbqLxZH12COp/JEZ/uo=</MAC>
+                       </ROW>
+               </RESPONSE>
+       </REQUEST>
+</XML>
diff --git 
a/tests/includes/Responses/globalcollect/GET_ORDERSTATUS_recurring.testresponse 
b/tests/includes/Responses/globalcollect/GET_ORDERSTATUS_recurring.testresponse
new file mode 100644
index 0000000..f852f5d
--- /dev/null
+++ 
b/tests/includes/Responses/globalcollect/GET_ORDERSTATUS_recurring.testresponse
@@ -0,0 +1,41 @@
+<XML>
+       <REQUEST>
+               <ACTION>GET_ORDERSTATUS</ACTION>
+               <META>
+                       <MERCHANTID>1</MERCHANTID>
+                       <IPADDRESS>123.123.123.123</IPADDRESS>
+                       <VERSION>2.0</VERSION>
+                       <REQUESTIPADDRESS>123.123.123.123</REQUESTIPADDRESS>
+               </META>
+               <PARAMS>
+                       <ORDER>
+                               <ORDERID>9998890004</ORDERID>
+                       </ORDER>
+               </PARAMS>
+               <RESPONSE>
+                       <RESULT>OK</RESULT>
+                       <META>
+                               <REQUESTID>245</REQUESTID>
+                               
<RESPONSEDATETIME>20100419133351</RESPONSEDATETIME>
+                       </META>
+                       <STATUS>
+                               <PAYMENTMETHODID>1</PAYMENTMETHODID>
+                               <STATUSID>600</STATUSID>
+                               <CURRENCYCODE>EUR</CURRENCYCODE>
+                               <FRAUDRESULT>N</FRAUDRESULT>
+                               <EFFORTID>2</EFFORTID>
+                               
<CREDITCARDNUMBER>************7977</CREDITCARDNUMBER>
+                               <AUTHORISATIONCODE>654321</AUTHORISATIONCODE>
+                               
<PAYMENTREFERENCE>900100000010</PAYMENTREFERENCE>
+                               <ATTEMPTID>2</ATTEMPTID>
+                               <MERCHANTID>1</MERCHANTID>
+                               <AMOUNT>2345</AMOUNT>
+                               <STATUSDATE>20100419132926</STATUSDATE>
+                               <PAYMENTPRODUCTID>1</PAYMENTPRODUCTID>
+                               <CVVRESULT>N</CVVRESULT>
+                               <ORDERID>9998890004</ORDERID>
+                               <EXPIRYDATE>1210</EXPIRYDATE>
+                       </STATUS>
+               </RESPONSE>
+       </REQUEST>
+</XML>
diff --git 
a/tests/includes/Responses/globalcollect/SET_PAYMENT_recurring.testresponse 
b/tests/includes/Responses/globalcollect/SET_PAYMENT_recurring.testresponse
new file mode 100644
index 0000000..444994a
--- /dev/null
+++ b/tests/includes/Responses/globalcollect/SET_PAYMENT_recurring.testresponse
@@ -0,0 +1,29 @@
+<?xml version = "1.0"?>
+<XML>
+       <REQUEST>
+               <ACTION>SET_PAYMENT</ACTION>
+               <META>
+                       <MERCHANTID>test</MERCHANTID>
+                       <IPADDRESS>127.0.0.1</IPADDRESS>
+                       <VERSION>1.0</VERSION>
+               </META>
+               <PARAMS>
+                       <PAYMENT>
+                               <PROFILETOKEN>af16af70-2bf5</PROFILETOKEN>
+                               <ORDERID>626113410</ORDERID>
+                               <EFFORTID>2</EFFORTID>
+                               <PAYMENTPRODUCTID>1</PAYMENTPRODUCTID>
+                               <AMOUNT>10101</AMOUNT>
+                               <CURRENCYCODE>EUR</CURRENCYCODE>
+                               <MERCHANTREFERENCE>626113410</MERCHANTREFERENCE>
+                       </PAYMENT>
+               </PARAMS>
+               <RESPONSE>
+                       <RESULT>OK</RESULT>
+                       <META>
+                               <REQUESTID>1891851</REQUESTID>
+                               
<RESPONSEDATETIME>20140327165513</RESPONSEDATETIME>
+                       </META>
+               </RESPONSE>
+       </REQUEST>
+</XML>

-- 
To view, visit https://gerrit.wikimedia.org/r/139476
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Id9f280a243c9211336b3f1d7938ca1e13b42dddc
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/extensions/DonationInterface
Gerrit-Branch: master
Gerrit-Owner: Awight <[email protected]>
Gerrit-Reviewer: Awight <[email protected]>
Gerrit-Reviewer: Ejegg <[email protected]>
Gerrit-Reviewer: Katie Horn <[email protected]>
Gerrit-Reviewer: Mwalker <[email protected]>
Gerrit-Reviewer: Ssmith <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to