jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/351741 )

Change subject: Clean up PayPal subscription message normalization
......................................................................


Clean up PayPal subscription message normalization

Most of that logic was already covered by var_map. Also, var_map deals
with optional keys like mc_fee, which the existing logic just crashed on.

Change-Id: I64c45bfcc23c770212c2c660e4bd6d0b033d727a
---
M PaymentProviders/PayPal/RecurringMessage.php
M PaymentProviders/PayPal/SubscriptionMessage.php
M PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json
M 
PaymentProviders/PayPal/Tests/Data/recurring_payment_profile_created_transformed.json
M PaymentProviders/PayPal/Tests/Data/refund_ec_transformed.json
M PaymentProviders/PayPal/Tests/Data/refund_recurring_ec_transformed.json
M PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
M SmashPig.yaml
8 files changed, 50 insertions(+), 79 deletions(-)

Approvals:
  XenoRyet: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/PaymentProviders/PayPal/RecurringMessage.php 
b/PaymentProviders/PayPal/RecurringMessage.php
index b80458b..33ebbb8 100644
--- a/PaymentProviders/PayPal/RecurringMessage.php
+++ b/PaymentProviders/PayPal/RecurringMessage.php
@@ -5,12 +5,10 @@
 class RecurringMessage extends Message {
 
        public static function normalizeMessage( &$message, $ipnMessage ) {
-               $message['recurring'] = "1";
+               $message['recurring'] = '1';
 
                // Contact info
                if ( $ipnMessage['txn_type'] === 
'recurring_payment_profile_created' || $ipnMessage['txn_type'] === 
'recurring_payment' ) {
-
-
                        $message['middle_name'] = '';
 
                        if ( isset( $ipnMessage['address_street'] ) ) {
diff --git a/PaymentProviders/PayPal/SubscriptionMessage.php 
b/PaymentProviders/PayPal/SubscriptionMessage.php
index 33dadde..4dc93cc 100644
--- a/PaymentProviders/PayPal/SubscriptionMessage.php
+++ b/PaymentProviders/PayPal/SubscriptionMessage.php
@@ -6,22 +6,11 @@
 
        public static function normalizeMessage( &$message, $ipnMessage ) {
 
-               $message['recurring'] = "1";
-
-               if ( isset( $ipnMessage['payment_date'] ) ) {
-                       $message['date'] = strtotime( 
$ipnMessage['payment_date'] );
-               }
-
-               // the subscription id
-               $message['subscr_id'] = $ipnMessage['subscr_id'];
-               $message['txn_type'] = $ipnMessage['txn_type'];
-               $message['email'] = $ipnMessage['payer_email'];
+               $message['recurring'] = '1';
 
                // Contact info
                if ( $ipnMessage['txn_type'] === 'subscr_signup' || 
$ipnMessage['txn_type'] === 'subscr_payment' || $ipnMessage['txn_type'] === 
'subscr_modify' ) {
-                       $message['first_name'] = $ipnMessage['first_name'];
                        $message['middle_name'] = '';
-                       $message['last_name'] = $ipnMessage['last_name'];
 
                        if ( isset( $ipnMessage['address_street'] ) ) {
                                $split = explode("\n", str_replace("\r", '', 
$ipnMessage['address_street']));
@@ -29,81 +18,57 @@
                                if ( count( $split ) > 1 ) {
                                        $message['supplemental_address_1'] = 
$split[1];
                                }
-                               $message['city'] = $ipnMessage['address_city'];
-                               $message['state_province'] = 
$ipnMessage['address_state'];
-                               $message['country'] = 
$ipnMessage['address_country_code'];
-                               $message['postal_code'] = 
$ipnMessage['address_zip'];
-
-                       } elseif ( isset( $ipnMessage['residence_country'] ) ) {
-                               $message['country'] = 
$ipnMessage['residence_country'];
                        }
                }
 
-               // payment-specific message handling
-               if ( $ipnMessage['txn_type'] == 'subscr_payment' ) {
+               // subtype-specific message handling
+               switch( $ipnMessage['txn_type'] ) {
+                       case 'subscr_signup':
+                               // break the period out for civicrm
+                               if( isset( $ipnMessage['period3'] ) ) {
+                                       // map paypal period unit to civicrm 
period units
+                                       $period_map = array(
+                                               'm' => 'month',
+                                               'd' => 'day',
+                                               'w' => 'week',
+                                               'y' => 'year',
+                                       );
 
-                       $message['gateway_txn_id'] = $ipnMessage['txn_id'];
-                       $message['currency'] = $ipnMessage['mc_currency'];
-                       $message['gross'] = $ipnMessage['mc_gross'];
-                       $message['fee'] = $ipnMessage['mc_fee'];
-               } else {
-
-                       // break the period out for civicrm
-                       if( isset( $ipnMessage['period3'] ) ) {
-                               // map paypal period unit to civicrm period 
units
-                               $period_map = array(
-                                       'm' => 'month',
-                                       'd' => 'day',
-                                       'w' => 'week',
-                                       'y' => 'year',
-                               );
-
-                               $period = explode( " ", $ipnMessage['period3'] 
);
-                               $message['frequency_interval'] = $period[0];
-                               $message['frequency_unit'] = 
$period_map[strtolower( $period[1] )];
-                       }
-
-                       if ( isset( $ipnMessage['recur_times'] ) ) {
-                               $message['installments'] = 
$ipnMessage['recur_times'];
-                       } else {
-                               // forever
-                               $message['installments'] = 0;
-                       }
-
-                       if ( isset( $ipnMessage['amount3'] ) ) {
-                               $message['gross'] = $ipnMessage['amount3'];
-                       } elseif ( isset( $ipnMessage['mc_amount3'] ) ) {
-                               $message['gross'] = $ipnMessage['mc_amount3'];
-                       }
-
-                       if ( isset( $ipnMessage['mc_currency'] ) ) {
-                               $message['currency'] = 
$ipnMessage['mc_currency'];
-                       }
-
-                       if ( isset( $ipnMessage['subscr_date'] ) ) {
-                               if ( $ipnMessage['txn_type'] == 'subscr_signup' 
) {
-                                       $message['create_date'] = strtotime( 
$ipnMessage['subscr_date'] );
-                                       $message['start_date'] = strtotime( 
$ipnMessage['subscr_date'] );
-                               } elseif( $ipnMessage['txn_type'] == 
'subscr_cancel' ) {
-                                       $message['cancel_date'] = strtotime( 
$ipnMessage['subscr_date'] );
+                                       $period = explode( " ", 
$ipnMessage['period3'] );
+                                       $message['frequency_interval'] = 
$period[0];
+                                       $message['frequency_unit'] = 
$period_map[strtolower( $period[1] )];
                                }
-                               if ( !isset( $message['date'] ) ) {
-                                       $message['date'] = strtotime( 
$ipnMessage['subscr_date'] );
-                               }
-                       }
 
-                       if ( $ipnMessage['txn_type'] == 'subscr_modify' ) {
+                               if ( !isset( $message['installments'] ) ) {
+                                       // forever
+                                       $message['installments'] = 0;
+                               }
+
+                               if ( isset( $ipnMessage['subscr_date'] ) ) {
+                                       if ( $ipnMessage['txn_type'] == 
'subscr_signup' ) {
+                                               $message['create_date'] = 
strtotime( $ipnMessage['subscr_date'] );
+                                               $message['start_date'] = 
strtotime( $ipnMessage['subscr_date'] );
+                                       } elseif( $ipnMessage['txn_type'] == 
'subscr_cancel' ) {
+                                               $message['cancel_date'] = 
strtotime( $ipnMessage['subscr_date'] );
+                                       }
+                                       if ( !isset( $message['date'] ) ) {
+                                               $message['date'] = strtotime( 
$ipnMessage['subscr_date'] );
+                                       }
+                               }
+                               break;
+
+                       case 'subscr_modify':
                                $message['modified_date'] = 
$ipnMessage['subscr_effective'];
-                       }
+                               break;
 
-                       if ( $ipnMessage['txn_type'] == 'subscr_failed' ) {
-
+                       case 'subscr_failed':
                                if ( isset( $ipnMessage['retry_at'] )) {
                                        $message['failure_retry_date'] = 
strtotime( $ipnMessage['retry_at'] );
                                } elseif( isset( 
$ipnMessage['failure_retry_date'] )) {
                                        $message['failure_retry_date'] = 
strtotime( $ipnMessage['failure_retry_date'] );
                                }
-                       }
+                               break;
+                       default:
                }
 
                $message['gateway'] = 'paypal';
diff --git 
a/PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json 
b/PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json
index 77b8eef..6edc5a0 100644
--- a/PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json
+++ b/PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json
@@ -7,6 +7,7 @@
        "email": "[email protected]",
        "first_name": "Fowl",
        "last_name": "Pond",
+       "country": "US",
        "gross": "150",
        "fee": "43",
        "order_id": "123456",
diff --git 
a/PaymentProviders/PayPal/Tests/Data/recurring_payment_profile_created_transformed.json
 
b/PaymentProviders/PayPal/Tests/Data/recurring_payment_profile_created_transformed.json
index 890f7dd..c71a352 100644
--- 
a/PaymentProviders/PayPal/Tests/Data/recurring_payment_profile_created_transformed.json
+++ 
b/PaymentProviders/PayPal/Tests/Data/recurring_payment_profile_created_transformed.json
@@ -10,6 +10,7 @@
   "frequency_interval": "1",
   "frequency_unit": "month",
   "installments": 0,
+  "country": "US",
   "create_date": 1492533928,
   "start_date": 1492533928,
   "date": 1492533928,
diff --git a/PaymentProviders/PayPal/Tests/Data/refund_ec_transformed.json 
b/PaymentProviders/PayPal/Tests/Data/refund_ec_transformed.json
index 06cfd66..f99142c 100644
--- a/PaymentProviders/PayPal/Tests/Data/refund_ec_transformed.json
+++ b/PaymentProviders/PayPal/Tests/Data/refund_ec_transformed.json
@@ -13,6 +13,7 @@
   "order_id": "46239229",
   "gateway_refund_id": "3HD08833MR473623T",
   "gross_currency": "JPY",
+  "country": "US",
   "gateway": "paypal_ec",
   "source_name": "SmashPig",
   "source_type": "listener",
diff --git 
a/PaymentProviders/PayPal/Tests/Data/refund_recurring_ec_transformed.json 
b/PaymentProviders/PayPal/Tests/Data/refund_recurring_ec_transformed.json
index 3735881..04cd82d 100644
--- a/PaymentProviders/PayPal/Tests/Data/refund_recurring_ec_transformed.json
+++ b/PaymentProviders/PayPal/Tests/Data/refund_recurring_ec_transformed.json
@@ -13,6 +13,7 @@
   "order_id": "45931681",
   "gateway_refund_id": "4CX17568KP793000L",
   "gross_currency": "JPY",
+  "country": "US",
   "gateway": "paypal_ec",
   "subscr_id": "I-DD1FNAAAUU22",
   "source_name": "SmashPig",
diff --git a/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json 
b/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
index 290bf5e..731e926 100644
--- a/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
+++ b/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
@@ -21,7 +21,7 @@
     "start_date": 1474498991,
     "date": 1474498991,
     "gateway": "paypal",
-    "recurring": true,
+    "recurring": "1",
     "source_name": "SmashPig",
     "source_type": "listener",
     "source_version": "unknown"
diff --git a/SmashPig.yaml b/SmashPig.yaml
index 019294a..54c9d17 100644
--- a/SmashPig.yaml
+++ b/SmashPig.yaml
@@ -354,6 +354,8 @@
         parent_txn_id: gateway_parent_id
         txn_id: gateway_txn_id
         recurring_payment_id: subscr_id
+        recur_times: installments
+        subscr_id: subscr_id
         # FIXME This is only true for refund messages.  Where to represent?
         #txn_id: gateway_refund_id
         mc_currency: currency
@@ -371,11 +373,13 @@
         address_state: state_province
         address_country_code: country
         address_zip: postal_code
-        redidence_country: country
+        residence_country: country
         # FIXME this too
         address_name: supplemental_address_1
         gateway: gateway
         mc_gross: gross
+        mc_amount3: gross
+        amount3: gross
         mc_fee: fee
 
     rejects:

-- 
To view, visit https://gerrit.wikimedia.org/r/351741
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I64c45bfcc23c770212c2c660e4bd6d0b033d727a
Gerrit-PatchSet: 2
Gerrit-Project: wikimedia/fundraising/SmashPig
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
Gerrit-Reviewer: XenoRyet <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to