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