Cdentinger has uploaded a new change for review.
https://gerrit.wikimedia.org/r/316822
Change subject: adds 'rejects' to smashpig paypal config
......................................................................
adds 'rejects' to smashpig paypal config
conditions which if they are true we drop the message
Change-Id: Ifc15f7ecf090609cd4221511881642e80b365cda
---
M PaymentProviders/PayPal/Job.php
A PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json
M PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
M SmashPig.yaml
4 files changed, 50 insertions(+), 13 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/SmashPig
refs/changes/22/316822/1
diff --git a/PaymentProviders/PayPal/Job.php b/PaymentProviders/PayPal/Job.php
index 18901bd..4a33695 100644
--- a/PaymentProviders/PayPal/Job.php
+++ b/PaymentProviders/PayPal/Job.php
@@ -17,27 +17,41 @@
*/
protected $config;
+ public function is_reject() {
+ // Drop message if it's a reject.
+ foreach ( $this->config->val( 'rejects' ) as $key => $val ) {
+ if ( isset( $this->payload->{$key} )
+ && $this->payload->{$key} === $val ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public function execute() {
$this->config = Configuration::getDefaultConfig();
- // TODO some pending-merge stuff?
+ if ( $this->is_reject() ) {
+ return false;
+ }
- // Verify message with paypal.
+ // TODO some pending-merge stuff?
// XXX Why does everything get made into objects?
$request = (array)$this->payload;
+ // Verify message with paypal.
$valid = $this->config->object( 'api' )->validate( $request );
if ( ! $valid ) {
throw new Exception( self::$verifyFailedMsg );
}
// Determine message type.
-
if ( isset( $request['txn_type'] ) ) {
$txn_type = $request['txn_type'];
} elseif (
isset( $request['payment_status'] ) &&
+ // TODO can these go in config?
--------------v-----------v
in_array( $request['payment_status'], array(
'Reversed', 'Refunded' ) )
) {
// refund, chargeback, or reversal
diff --git a/PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json
b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json
new file mode 100644
index 0000000..e59522e
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/Data/chargeback_settlement.json
@@ -0,0 +1,17 @@
+{
+ "date": "1476796761",
+ "txn_type": "adjustment",
+ "gateway_parent_id": "XXXXXXXXXXXXXXXXX",
+ "gateway_txn_id": "YYYYYYYYYYYYYYYYY",
+ "currency": "USD",
+ "type": "chargeback_settlement",
+ "email": "[email protected]",
+ "gross": "-10.00",
+ "gateway": "paypal",
+ "source_name": "SmashPig",
+ "source_type": "listener",
+ "source_host": "secrethost",
+ "source_run_id": "12423",
+ "source_version": "9999999999999999999999999999999999999999",
+ "source_enqueued_time": "1476796977"
+}
diff --git
a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
index 1f7904a..ae6d991 100644
--- a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
+++ b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
@@ -29,7 +29,8 @@
'web_accept.json' => 'verified',
'subscr_signup.json' => 'recurring',
'subscr_payment.json' => 'recurring',
- 'refund.json' => 'refund'
+ 'refund.json' => 'refund',
+ 'chargeback_settlement.json' => null
);
static $messages = array();
@@ -94,15 +95,17 @@
json_encode( $jobMessage )
);
- $job->execute();
+ if ( $job->execute() ) {
+ $queue = $this->config->object( 'data-store/' .
$msg['type'] );
+ $queue->createTable( $msg['type'] );
+ $message = $queue->pop();
- $queue = $this->config->object( 'data-store/' .
$msg['type'] );
- $queue->createTable( $msg['type'] );
- $message = $queue->pop();
-
- $this->assertNotEmpty( $message );
- if ( isset( $message['contribution_tracking_id'] ) ) {
- $this->assertEquals(
$message['contribution_tracking_id'], $message['order_id'] );
+ $this->assertNotEmpty( $message );
+ if ( isset(
$message['contribution_tracking_id'] ) ) {
+ $this->assertEquals(
$message['contribution_tracking_id'], $message['order_id'] );
+ }
+ } else {
+ $this->assertTrue( $job->is_reject() );
}
}
diff --git a/SmashPig.yaml b/SmashPig.yaml
index 6894329..5f34c44 100644
--- a/SmashPig.yaml
+++ b/SmashPig.yaml
@@ -412,6 +412,10 @@
mc_gross: gross
mc_fee: fee
+ rejects:
+ txn_type: new_case
+ type: chargeback_settlement
+
messages:
verified:
valid_statuses: # TODO is this message type agnostic?
@@ -420,7 +424,6 @@
txn_types:
- adjustment
- cart
- - new_case
- send_money
- web_accept
- merch_pmt
--
To view, visit https://gerrit.wikimedia.org/r/316822
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifc15f7ecf090609cd4221511881642e80b365cda
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/SmashPig
Gerrit-Branch: master
Gerrit-Owner: Cdentinger <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits