From 8b8e1e576513a5bcbe4fc738d64223516472bbde Mon Sep 17 00:00:00 2001 From: eileenmcnaughton Date: Thu, 30 Jul 2015 00:04:23 +0000 Subject: [PATCH] CRM-16923 fix passing on incorrect value for payment processor id frompaypal --- CRM/Core/Payment/PayPalProIPN.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/CRM/Core/Payment/PayPalProIPN.php b/CRM/Core/Payment/PayPalProIPN.php index 9676338f81..cd1c2a6cf5 100644 --- a/CRM/Core/Payment/PayPalProIPN.php +++ b/CRM/Core/Payment/PayPalProIPN.php @@ -441,9 +441,20 @@ INNER JOIN civicrm_membership_payment mp ON m.id = mp.membership_id AND mp.contr } } - $paymentProcessorID = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_PaymentProcessorType', + // This is an unreliable method as there could be more than one instance. + // Recommended approach is to use the civicrm/payment/ipn/xx url where xx is the payment + // processor id & the handleNotification function (which should call the completetransaction api & by-pass this + // entirely). The only thing the IPN class should really do is extract data from the request, validate it + // & call completetransaction or call fail? (which may not exist yet). + $paymentProcessorTypeID = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_PaymentProcessorType', 'PayPal', 'id', 'name' ); + $paymentProcessorID = (int) civicrm_api3('PaymentProcessor', 'getvalue', array( + 'is_test' => 0, + 'options' => array('limit' => 1), + 'payment_processor_type_id' => $paymentProcessorTypeID, + 'return' => 'id', + )); if (!$this->validateData($input, $ids, $objects, TRUE, $paymentProcessorID)) { return FALSE; -- 2.25.1