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

Reply via email to