X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FPayment.php;h=8bd762806d57e5e5d958286e2ff5861218343e50;hb=20f57460897100cb2aea105c40c16ab16604033a;hp=77fb81a2c61e32e103ec721cde8393e9a304d371;hpb=7dee6a13d167a1dd2b4bf1075252bcb7e324c7e5;p=civicrm-core.git diff --git a/CRM/Core/Payment.php b/CRM/Core/Payment.php index 77fb81a2c6..8bd762806d 100644 --- a/CRM/Core/Payment.php +++ b/CRM/Core/Payment.php @@ -78,13 +78,16 @@ abstract class CRM_Core_Payment { protected $_paymentProcessor; + /** + * @var CRM_Core_Form + */ protected $_paymentForm = NULL; /** * singleton function used to manage this object * * @param string $mode the mode of operation: live or test - * @param object $paymentProcessor the details of the payment processor being invoked + * @param array $paymentProcessor the details of the payment processor being invoked * @param object $paymentForm reference to the form object if available * @param boolean $force should we force a reload of this payment object * @@ -124,10 +127,28 @@ abstract class CRM_Core_Payment { return self::$_singleton[$cacheKey]; } + /** + * @param $params + * + * @return mixed + */ + public static function logPaymentNotification($params) { + $message = 'payment_notification '; + if (!empty($params['processor_name'])) { + $message .= 'processor_name=' . $params['processor_name']; + } + if (!empty($params['processor_id'])) { + $message .= 'processor_id=' . $params['processor_id']; + } + + $log = new CRM_Utils_SystemLogger(); + $log->alert($message, $_REQUEST); + } + /** * Setter for the payment form that wants to use the processor * - * @param obj $paymentForm + * @param CRM_Core_Form $paymentForm * */ function setForm(&$paymentForm) { @@ -137,7 +158,7 @@ abstract class CRM_Core_Payment { /** * Getter for payment form that is using the processor * - * @return obj A form object + * @return CRM_Core_Form A form object */ function getForm() { return $this->_paymentForm; @@ -165,13 +186,18 @@ abstract class CRM_Core_Payment { /** * This function checks to see if we have the right config values * - * @param string $mode the mode we are operating in (live or test) + * @internal param string $mode the mode we are operating in (live or test) * * @return string the error message if any * @public */ abstract function checkConfig(); + /** + * @param $paymentProcessor + * + * @return bool + */ static function paypalRedirect(&$paymentProcessor) { if (!$paymentProcessor) { return FALSE; @@ -210,11 +236,14 @@ abstract class CRM_Core_Payment { * Load requested payment processor and call that processor's handle<$method> method * * @public + * @param $method + * @param array $params */ - static function handlePaymentMethod($method, $params = array( )) { + 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"); } + self::logPaymentNotification($params); // Query db for processor .. $mode = @$params['mode']; @@ -255,13 +284,12 @@ abstract class CRM_Core_Payment { // Check pp is extension $ext = CRM_Extension_System::singleton()->getMapper(); if ($ext->isExtensionKey($dao->class_name)) { - $extension_instance_found = TRUE; $paymentClass = $ext->keyToClass($dao->class_name, 'payment'); require_once $ext->classToPath($paymentClass); } else { // Legacy or extension as module instance - if(empty($paymentClass)) { + if (empty($paymentClass)) { $paymentClass = 'CRM_Core_' . $dao->class_name; } @@ -288,6 +316,7 @@ abstract class CRM_Core_Payment { // Everything, it seems, is ok - execute pp callback handler $processorInstance->$method(); + $extension_instance_found = TRUE; } if (!$extension_instance_found) CRM_Core_Error::fatal( @@ -313,79 +342,80 @@ abstract class CRM_Core_Payment { return method_exists(CRM_Utils_System::getClassName($this), $method); } + /** + * @param null $entityID + * @param null $entity + * @param string $action + * + * @return string + */ function subscriptionURL($entityID = NULL, $entity = NULL, $action = 'cancel') { - if ($action == 'cancel') { - $url = 'civicrm/contribute/unsubscribe'; - } - elseif ($action == 'billing') { - //in notify mode don't return the update billing url - if ($this->_paymentProcessor['billing_mode'] == self::BILLING_MODE_NOTIFY) { - return NULL; - } - $url = 'civicrm/contribute/updatebilling'; - } - elseif ($action == 'update') { - $url = 'civicrm/contribute/updaterecur'; - } - $session = CRM_Core_Session::singleton(); - $userId = $session->get('userID'); - $checksumValue = ""; - - if ($entityID && $entity == 'membership') { - if (!$userId) { - $contactID = CRM_Core_DAO::getFieldValue("CRM_Member_DAO_Membership", $entityID, "contact_id"); - $checksumValue = CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf'); - $checksumValue = "&cs={$checksumValue}"; - } - return CRM_Utils_System::url($url, "reset=1&mid={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE); - } + // Set URL + switch ($action) { + case 'cancel' : + $url = 'civicrm/contribute/unsubscribe'; + break; + + case 'billing' : + //in notify mode don't return the update billing url + if ($this->_paymentProcessor['billing_mode'] == self::BILLING_MODE_NOTIFY) { + return NULL; + } + $url = 'civicrm/contribute/updatebilling'; + break; - if ($entityID && $entity == 'contribution') { - if (!$userId) { - $contactID = CRM_Core_DAO::getFieldValue("CRM_Contribute_DAO_Contribution", $entityID, "contact_id"); - $checksumValue = CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf'); - $checksumValue = "&cs={$checksumValue}"; - } - return CRM_Utils_System::url($url, "reset=1&coid={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE); + case 'update' : + $url = 'civicrm/contribute/updaterecur'; + break; } - if ($entityID && $entity == 'recur') { - if (!$userId) { - $sql = " + $session = CRM_Core_Session::singleton(); + $userId = $session->get('userID'); + $contactID = 0; + $checksumValue = ''; + $entityArg = ''; + + // Find related Contact + if ($entityID) { + switch ($entity) { + case 'membership' : + $contactID = CRM_Core_DAO::getFieldValue("CRM_Member_DAO_Membership", $entityID, "contact_id"); + $entityArg = 'mid'; + break; + + case 'contribution' : + $contactID = CRM_Core_DAO::getFieldValue("CRM_Contribute_DAO_Contribution", $entityID, "contact_id"); + $entityArg = 'coid'; + break; + + case 'recur' : + $sql = " SELECT con.contact_id FROM civicrm_contribution_recur rec INNER JOIN civicrm_contribution con ON ( con.contribution_recur_id = rec.id ) WHERE rec.id = %1 GROUP BY rec.id"; - $contactID = CRM_Core_DAO::singleValueQuery($sql, array(1 => array($entityID, 'Integer'))); - $checksumValue = CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf'); - $checksumValue = "&cs={$checksumValue}"; + $contactID = CRM_Core_DAO::singleValueQuery($sql, array(1 => array($entityID, 'Integer'))); + $entityArg = 'crid'; + break; + } + } + + // Add entity arguments + if ($entityArg != '') { + // Add checksum argument + if ($contactID != 0 && $userId != $contactID) { + $checksumValue = '&cs=' . CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf'); } - return CRM_Utils_System::url($url, "reset=1&crid={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE); + return CRM_Utils_System::url($url, "reset=1&{$entityArg}={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE); } + // Else login URL if ($this->isSupported('accountLoginURL')) { return $this->accountLoginURL(); } - return $this->_paymentProcessor['url_recur']; - } - /** - * Check for presence of type 1 or type 3 enabled processors (means we can do back-office submit credit/debit card trxns) - * @public - */ - static function allowBackofficeCreditCard($template = NULL, $variableName = 'newCredit') { - $newCredit = FALSE; - $processors = CRM_Core_PseudoConstant::paymentProcessor(FALSE, FALSE, - "billing_mode IN ( 1, 3 )" - ); - if (count($processors) > 0) { - $newCredit = TRUE; - } - if ($template) { - $template->assign($variableName, $newCredit); - } - return $newCredit; + // Else default + return $this->_paymentProcessor['url_recur']; } - }