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

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


PayPal subscription message normalization

Normalize subscr_ messages in SmashPig instead of the consumer.

Bug: T107372
Change-Id: I03c0124b05988370f66ce2464a7fe77864c0f16d
---
M PaymentProviders/PayPal/SubscriptionMessage.php
M PaymentProviders/PayPal/Tests/Data/subscr_payment.json
M PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json
M PaymentProviders/PayPal/Tests/Data/subscr_signup.json
M PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
5 files changed, 153 insertions(+), 80 deletions(-)

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



diff --git a/PaymentProviders/PayPal/SubscriptionMessage.php 
b/PaymentProviders/PayPal/SubscriptionMessage.php
index c825baf..33dadde 100644
--- a/PaymentProviders/PayPal/SubscriptionMessage.php
+++ b/PaymentProviders/PayPal/SubscriptionMessage.php
@@ -5,7 +5,112 @@
 class SubscriptionMessage extends Message {
 
        public static function normalizeMessage( &$message, $ipnMessage ) {
-               // Preserve existing logic for now
-               $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'];
+
+               // 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']));
+                               $message['street_address'] = $split[0];
+                               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' ) {
+
+                       $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'] );
+                               }
+                               if ( !isset( $message['date'] ) ) {
+                                       $message['date'] = strtotime( 
$ipnMessage['subscr_date'] );
+                               }
+                       }
+
+                       if ( $ipnMessage['txn_type'] == 'subscr_modify' ) {
+                               $message['modified_date'] = 
$ipnMessage['subscr_effective'];
+                       }
+
+                       if ( $ipnMessage['txn_type'] == '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'] );
+                               }
+                       }
+               }
+
+               $message['gateway'] = 'paypal';
+
+               if ( !isset( $message['date'] ) ) {
+                       $message['date'] = time();
+               }
+
        }
 }
diff --git a/PaymentProviders/PayPal/Tests/Data/subscr_payment.json 
b/PaymentProviders/PayPal/Tests/Data/subscr_payment.json
index f4bafc6..595e804 100644
--- a/PaymentProviders/PayPal/Tests/Data/subscr_payment.json
+++ b/PaymentProviders/PayPal/Tests/Data/subscr_payment.json
@@ -1,5 +1,5 @@
 {
-    "mc_gross": "1.03",
+    "mc_gross": "3.00",
     "protection_eligibility": "Eligible",
     "address_status": "confirmed",
     "payer_id": "XXXXXXXXXXXXX",
@@ -8,10 +8,10 @@
     "payment_status": "Completed",
     "charset": "UTF-8",
     "address_zip": "99999",
-    "first_name": "Joe",
+    "first_name": "Gen",
     "mc_fee": "0.27",
     "address_country_code": "US",
-    "address_name": "Joe Camel",
+    "address_name": "Gen Russ",
     "notify_version": "3.8",
     "subscr_id": "S-XXXXXXXXXXXXXXXXX",
     "custom": "7373",
@@ -21,10 +21,10 @@
     "address_city": "Maynardsville",
     "verify_sign": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
     "payer_email": "[email protected]",
-    "txn_id": "77777777777777777",
+    "txn_id": "77777777777777776",
     "payment_type": "instant",
     "payer_business_name": "Joe Camel",
-    "last_name": "Camel",
+    "last_name": "Russ",
     "address_state": "CA",
     "receiver_email": "[email protected]",
     "payment_fee": "0.27",
@@ -36,7 +36,7 @@
     "residence_country": "US",
     "transaction_subject": "7373",
     "payment_gross": "1.03",
-    "ipn_track_id": "7777777777777",
+    "ipn_track_id": "7777777777778",
     "date": "",
     "gateway": "paypal"
 }
diff --git a/PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json 
b/PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json
index da0be18..c89712a 100644
--- a/PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json
+++ b/PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json
@@ -1,44 +1,24 @@
 {
-    "mc_gross": "1.03",
-    "protection_eligibility": "Eligible",
-    "address_status": "confirmed",
-    "payer_id": "XXXXXXXXXXXXX",
-    "address_street": "123 Only Kidding",
-    "payment_date": "16:03:13 Sep 21, 2016 PDT",
-    "payment_status": "Completed",
-    "charset": "UTF-8",
-    "address_zip": "99999",
-    "first_name": "Joe",
-    "mc_fee": "0.27",
-    "address_country_code": "US",
-    "address_name": "Joe Camel",
-    "notify_version": "3.8",
+    "date": 1474498993,
     "subscr_id": "S-XXXXXXXXXXXXXXXXX",
-    "custom": "7373",
-    "payer_status": "verified",
-    "business": "[email protected]",
-    "address_country": "United States",
-    "address_city": "Maynardsville",
-    "verify_sign": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-    "payer_email": "[email protected]",
-    "txn_id": "77777777777777777",
-    "payment_type": "instant",
-    "payer_business_name": "Joe Camel",
-    "last_name": "Camel",
-    "address_state": "CA",
-    "receiver_email": "[email protected]",
-    "payment_fee": "0.27",
-    "receiver_id": "7777777777777",
     "txn_type": "subscr_payment",
-    "item_name": "Donation to the Wikimedia Foundation",
-    "mc_currency": "USD",
-    "item_number": "DONATE",
-    "residence_country": "US",
-    "transaction_subject": "7373",
-    "payment_gross": "1.03",
-    "ipn_track_id": "7777777777777",
-    "date": "",
+    "contribution_tracking_id": "7373",
+    "order_id": "7373",
+    "email": "[email protected]",
+    "first_name": "Gen",
+    "middle_name": "",
+    "last_name": "Russ",
+    "street_address": "123 Only Kidding",
+    "city": "Maynardsville",
+    "state_province": "CA",
+    "country": "US",
+    "postal_code": "99999",
+    "gateway_txn_id": "77777777777777776",
+    "currency": "USD",
+    "gross": "3.00",
+    "fee": "0.27",
     "gateway": "paypal",
+    "recurring": "1",
     "source_name": "SmashPig",
     "source_type": "listener",
     "source_version": "unknown"
diff --git a/PaymentProviders/PayPal/Tests/Data/subscr_signup.json 
b/PaymentProviders/PayPal/Tests/Data/subscr_signup.json
index 8a3b197..7b98da2 100644
--- a/PaymentProviders/PayPal/Tests/Data/subscr_signup.json
+++ b/PaymentProviders/PayPal/Tests/Data/subscr_signup.json
@@ -2,7 +2,7 @@
     "amount3": "1.03",
     "address_status": "confirmed",
     "subscr_date": "16:03:11 Sep 21, 2016 PDT",
-    "payer_id": "XXXXXXXXXXXXX",
+    "payer_id": "2048343366",
     "address_street": "123 Only Joking",
     "mc_amount3": "1.03",
     "charset": "UTF-8",
@@ -12,7 +12,7 @@
     "address_country_code": "US",
     "address_name": "Joe Camel",
     "notify_version": "3.8",
-    "subscr_id": "S-XXXXXXXXXXXXXXXXX",
+    "subscr_id": "2048343366",
     "custom": "7373",
     "payer_status": "verified",
     "business": "[email protected]",
diff --git a/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json 
b/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
index c18c5e1..290bf5e 100644
--- a/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
+++ b/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
@@ -1,39 +1,27 @@
 {
-    "amount3": "1.03",
-    "address_status": "confirmed",
-    "subscr_date": "16:03:11 Sep 21, 2016 PDT",
-    "payer_id": "XXXXXXXXXXXXX",
-    "address_street": "123 Only Joking",
-    "mc_amount3": "1.03",
-    "charset": "UTF-8",
-    "address_zip": "99999",
-    "first_name": "Joe",
-    "reattempt": "1",
-    "address_country_code": "US",
-    "address_name": "Joe Camel",
-    "notify_version": "3.8",
-    "subscr_id": "S-XXXXXXXXXXXXXXXXX",
-    "custom": "7373",
-    "payer_status": "verified",
-    "business": "[email protected]",
-    "address_country": "United States",
-    "address_city": "Scranton",
-    "verify_sign": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-    "payer_email": "[email protected]",
-    "payer_business_name": "Joe Camel",
-    "last_name": "Camel",
-    "address_state": "CA",
-    "receiver_email": "[email protected]",
-    "recurring": "1",
+    "subscr_id": 2048343366,
     "txn_type": "subscr_signup",
-    "item_name": "Donation to the Wikimedia Foundation",
-    "mc_currency": "USD",
-    "item_number": "DONATE",
-    "residence_country": "US",
-    "period3": "1 M",
-    "ipn_track_id": "7777777777777",
-    "date": "",
+    "contribution_tracking_id": "7373",
+    "order_id": "7373",
+    "email": "[email protected]",
+    "first_name": "Joe",
+    "middle_name": "",
+    "last_name": "Camel",
+    "street_address": "123 Only Joking",
+    "city": "Scranton",
+    "state_province": "CA",
+    "country": "US",
+    "postal_code": "99999",
+    "frequency_interval": "1",
+    "frequency_unit": "month",
+    "installments": 0,
+    "gross": "1.03",
+    "currency": "USD",
+    "create_date": 1474498991,
+    "start_date": 1474498991,
+    "date": 1474498991,
     "gateway": "paypal",
+    "recurring": true,
     "source_name": "SmashPig",
     "source_type": "listener",
     "source_version": "unknown"

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

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

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

Reply via email to