Ejegg has uploaded a new change for review. (
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.
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(-)
git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/SmashPig
refs/changes/41/351741/1
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: newchange
Gerrit-Change-Id: I64c45bfcc23c770212c2c660e4bd6d0b033d727a
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/SmashPig
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits