CRM-16422 permit processor_id without ? in IPN urls
authorEileen McNaughton <eileen@fuzion.co.nz>
Wed, 29 Apr 2015 23:29:19 +0000 (17:29 -0600)
committerEileen McNaughton <eileen@fuzion.co.nz>
Wed, 29 Apr 2015 23:29:19 +0000 (17:29 -0600)
CRM/Core/Payment.php

index 81774bdfc2eb13f335d418ab8f53458d7ad4560d..dab234fbe5be2ee9e29bff15d58678c3ce7ee475 100644 (file)
@@ -551,6 +551,7 @@ abstract class CRM_Core_Payment {
         'processor_name' => @$_GET['processor_name'],
         'processor_id' => @$_GET['processor_id'],
         'mode' => @$_GET['mode'],
+        'q' => @$_GET['q'],
       )
     );
     CRM_Utils_System::civiExit();
@@ -572,8 +573,16 @@ abstract class CRM_Core_Payment {
    */
   public static function handlePaymentMethod($method, $params = array()) {
     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");
+      $q = explode('/', CRM_Utils_Array::value('q', $params, ''));
+      $lastParam = array_pop($q);
+      if (is_numeric($lastParam)) {
+        $params['processor_id'] = $_GET['processor_id'] = $lastParam;
+      }
+      else {
+        throw new CRM_Core_Exception("Either 'processor_id' or 'processor_name' param is required for payment callback");
+      }
     }
+
     self::logPaymentNotification($params);
 
     $sql = "SELECT ppt.class_name, ppt.name as processor_name, pp.id AS processor_id