From 42b90e8f0859e02a4df2c9d85721903aeaed630d Mon Sep 17 00:00:00 2001 From: Chris Burgess Date: Thu, 20 Jun 2013 23:59:25 +1200 Subject: [PATCH] CRM-12720. Optionally accept processor_id in place of processor_name in IPN requests, enabling multiple processors of the same type. --- CRM/Core/Payment.php | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/CRM/Core/Payment.php b/CRM/Core/Payment.php index 64ef5c59f1..0910d79d8a 100644 --- a/CRM/Core/Payment.php +++ b/CRM/Core/Payment.php @@ -197,6 +197,7 @@ abstract class CRM_Core_Payment { 'PaymentNotification', array( 'processor_name' => @$_GET['processor_name'], + 'processor_id' => @$_GET['processor_id'], 'mode' => @$_GET['mode'], ) ); @@ -209,32 +210,37 @@ abstract class CRM_Core_Payment { * @public */ static function handlePaymentMethod($method, $params = array( )) { - - if (!isset($params['processor_name'])) { - CRM_Core_Error::fatal("Missing 'processor_name' param for payment callback"); + if (!isset($params['processor_id']) && !isset($params['processor_name'])) { + CRM_Core_Error::fatal("Either 'processor_id' or 'processor_name' param is required for payment callback"); } // Query db for processor .. $mode = @$params['mode']; - $dao = CRM_Core_DAO::executeQuery(" - SELECT ppt.class_name, ppt.name as processor_name, pp.id AS processor_id - FROM civicrm_payment_processor_type ppt - INNER JOIN civicrm_payment_processor pp - ON pp.payment_processor_type_id = ppt.id - AND pp.is_active - AND pp.is_test = %1 - WHERE ppt.name = %2 - ", - array( - 1 => array($mode == 'test' ? 1 : 0, 'Integer'), - 2 => array($params['processor_name'], 'String'), - ) - ); + $sql = "SELECT ppt.class_name, ppt.name as processor_name, pp.id AS processor_id + FROM civicrm_payment_processor_type ppt + INNER JOIN civicrm_payment_processor pp + ON pp.payment_processor_type_id = ppt.id + AND pp.is_active + AND pp.is_test = %1"; + $args[1] = array($mode == 'test' ? 1 : 0, 'Integer'); + + if (isset($params['processor_id'])) { + $sql .= " WHERE pp.id = %2"; + $args[2] = array($params['processor_id'], 'Integer'); + $notfound = "No active instances of payment processor ID#'{$params['processor_id']}' were found."; + } + else { + $sql .= " WHERE ppt.name = %2"; + $args[2] = array($params['processor_name'], 'String'); + $notfound = "No active instances of the '{$params['processor_name']}' payment processor were found."; + } + + $dao = CRM_Core_DAO::executeQuery($sql, $args); // Check whether we found anything at all .. if (!$dao->N) { - CRM_Core_Error::fatal("No active instances of the '{$params['processor_name']}' payment processor were found."); + CRM_Core_Error::fatal($notfound); } $method = 'handle' . $method; @@ -380,4 +386,3 @@ INNER JOIN civicrm_contribution con ON ( con.contribution_recur_id = rec.id ) } } - -- 2.25.1