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