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": "a...@wikimedia.org", + "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 <cdentin...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits