Ejegg has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/366976 )
Change subject: WIP Tag refunds with correct paypal gateway ...................................................................... WIP Tag refunds with correct paypal gateway Wow, these are crappy ways to tell the difference! Really should have put the gateway code in one of those tracking fields. Bug: T171351 Change-Id: I49da156eb72933d44bb299d92072c551c02798ad --- M PaymentProviders/PayPal/RefundMessage.php M PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json A PaymentProviders/PayPal/Tests/Data/chargeback_settlement_ec.json A PaymentProviders/PayPal/Tests/Data/chargeback_settlement_ec_transformed.json A PaymentProviders/PayPal/Tests/Data/chargeback_settlement_transformed.json M PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php 6 files changed, 73 insertions(+), 22 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/SmashPig refs/changes/76/366976/1 diff --git a/PaymentProviders/PayPal/RefundMessage.php b/PaymentProviders/PayPal/RefundMessage.php index 98227a6..6ce11e2 100644 --- a/PaymentProviders/PayPal/RefundMessage.php +++ b/PaymentProviders/PayPal/RefundMessage.php @@ -14,12 +14,21 @@ $message['type'] = 'refund'; } - // Express checkout puts a description in transaction_subject, Legacy puts a contribution - // tracking ID there. Chargebacks don't set the field at all. - if ( isset( $ipnMessage['transaction_subject'] ) && !is_numeric( $ipnMessage['transaction_subject'] ) ) { - $message['gateway'] = 'paypal_ec'; + if ( $message['type'] === 'refund' ) { + // For refunds, express checkout puts a description in transaction_subject, + // but legacy puts a contribution tracking ID there. + if ( isset( $ipnMessage['transaction_subject'] ) && !is_numeric( $ipnMessage['transaction_subject'] ) ) { + $message['gateway'] = 'paypal_ec'; + } else { + $message['gateway'] = 'paypal'; + } } else { - $message['gateway'] = 'paypal'; + // For chargebacks, express checkout sets the 'invoice' field + if ( isset( $ipnMessage['invoice'] ) ) { + $message['gateway'] = 'paypal_ec'; + } else { + $message['gateway'] = 'paypal'; + } } } diff --git a/PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json index d96bde3..bfdbb40 100644 --- a/PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json +++ b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json @@ -1,22 +1,18 @@ { - "payment_date": "11:55:22 Sep 28, 2016 PDT", + "payment_date": "05:32:08 Jun 30, 2017 PDT", + "txn_id": "91N12345TB8654321", "payment_status": "Completed", - "txn_type": "adjustment", - "parent_txn_id": "XXXXXXXXXXXXXXXXX", - "txn_id": "YYYYYYYYYYYYYYYYY", "mc_currency": "USD", - "reason_code": "chargeback_settlement", - "email": "a...@wikimedia.org", - "mc_gross": "-10.00", - "gateway": "paypal", - "notify_version": "3.8", - "payment_gross": "-10.00", + "parent_txn_id": "2JP12345X654321V", + "notify_version": 3.8, + "custom": 47470083, + "txn_type": "adjustment", + "charset": "UTF-8", + "mc_gross": -1.00, + "payment_gross": -1.00, + "payer_email": "recipi...@wikimedia.org", + "verify_sign": "AZfnGop49sf6bIkvk-UIIwAT3vE6AqUlokuReG4Znr85ICxgRDn1rO8s", + "payer_id": "AA987ASDFGHUW8", "payer_status": "verified", - "payment_fee": "-20.00", - "source_name": "SmashPig", - "source_type": "listener", - "source_host": "secrethost", - "source_run_id": "12423", - "source_version": "9999999999999999999999999999999999999999", - "source_enqueued_time": "1476796977" + "ipn_track_id": "28eec9b3c7857" } diff --git a/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_ec.json b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_ec.json new file mode 100644 index 0000000..daef6ad --- /dev/null +++ b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_ec.json @@ -0,0 +1,19 @@ +{ + "txn_type" : "adjustment", + "payment_date" : "06:25:22 Jul 10, 2017 PDT", + "payment_gross" : -5.00, + "mc_currency" : "USD", + "verify_sign" : "A21kmBLyRcQpDSjYvmswlm3ckjahAZ-SbzbHuzDA0wERKwHSrBlTr9cY", + "payer_status" : "verified", + "payer_email" : "recipi...@wikimedia.org", + "txn_id" : "91N12345TB8654321", + "parent_txn_id" : "2JP12345X654321V", + "payer_id" : "AA987ASDFGHUW8", + "invoice" : 47896777.0, + "payment_status" : "Completed", + "mc_gross" : -5.00, + "custom" : 47896777, + "charset" : "UTF-8", + "notify_version" : 3.8, + "ipn_track_id" : "f008d5768b47c" +} diff --git a/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_ec_transformed.json b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_ec_transformed.json new file mode 100644 index 0000000..d3061ba --- /dev/null +++ b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_ec_transformed.json @@ -0,0 +1,13 @@ +{ + "date": 1499693122, + "gateway_parent_id": "2JP12345X654321V", + "gateway_txn_id": "91N12345TB8654321", + "currency": "USD", + "type": "chargeback", + "contribution_tracking_id": 47896777, + "gross": -5, + "order_id": 47896777, + "gateway_refund_id": "91N12345TB8654321", + "gross_currency": "USD", + "gateway": "paypal_ec" +} diff --git a/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_transformed.json b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_transformed.json new file mode 100644 index 0000000..c44130e --- /dev/null +++ b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement_transformed.json @@ -0,0 +1,13 @@ +{ + "date": 1498825928, + "gateway_parent_id": "2JP12345X654321V", + "gateway_txn_id": "91N12345TB8654321", + "currency": "USD", + "type": "chargeback", + "contribution_tracking_id": 47470083, + "gross": -1, + "order_id": 47470083, + "gateway_refund_id": "91N12345TB8654321", + "gross_currency": "USD", + "gateway": "paypal" +} diff --git a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php index 2b08ef4..4a0df91 100644 --- a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php +++ b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php @@ -36,6 +36,7 @@ 'refund_ec.json' => 'refund', 'refund_recurring_ec.json' => 'refund', 'chargeback_settlement.json' => 'refund', + 'chargeback_settlement_ec.json' => 'refund', // this should not actually get written to // TODO 'new_case.json' => 'no-op', ); -- To view, visit https://gerrit.wikimedia.org/r/366976 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I49da156eb72933d44bb299d92072c551c02798ad Gerrit-PatchSet: 1 Gerrit-Project: wikimedia/fundraising/SmashPig Gerrit-Branch: master Gerrit-Owner: Ejegg <ej...@ejegg.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits