X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FPayment%2FPayPalImpl.php;h=838542d15f6f40402bbb3508c74fac7927284e86;hb=ee9c028679b097f6f7e92f367a6cb8da3fd54037;hp=7ba916439c585ff00d5b6c09a6845ff43d68f258;hpb=6a0b768e17b6b5271ee014b4ac30066376de1f52;p=civicrm-core.git diff --git a/CRM/Core/Payment/PayPalImpl.php b/CRM/Core/Payment/PayPalImpl.php index 7ba916439c..838542d15f 100644 --- a/CRM/Core/Payment/PayPalImpl.php +++ b/CRM/Core/Payment/PayPalImpl.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.6 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2014 | + | Copyright CiviCRM LLC (c) 2004-2015 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,12 +23,12 @@ | GNU Affero General Public License or the licensing of CiviCRM, | | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ -*/ + */ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2014 + * @copyright CiviCRM LLC (c) 2004-2015 * $Id$ * */ @@ -42,12 +42,11 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * pattern and cache the instance in this variable * * @var object - * @static */ static private $_singleton = NULL; /** - * Constructor + * Constructor. * * @param string $mode * The mode of operation: live or test. @@ -60,7 +59,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $this->_mode = $mode; $this->_paymentProcessor = $paymentProcessor; $this->_processorName = ts('PayPal Pro'); - $paymentProcessorType = CRM_Core_PseudoConstant::paymentProcessorType(false, null, 'name'); + $paymentProcessorType = CRM_Core_PseudoConstant::paymentProcessorType(FALSE, NULL, 'name'); if ($this->_paymentProcessor['payment_processor_type_id'] == CRM_Utils_Array::key('PayPal_Standard', $paymentProcessorType)) { $this->_processorName = ts('PayPal Standard'); @@ -75,33 +74,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { } } - /** - * Singleton function used to manage this object - * - * @param string $mode - * The mode of operation: live or test. - * - * @param object $paymentProcessor - * @param null $paymentForm - * @param bool $force - * - * @return object - * @static - */ - public static function &singleton($mode, &$paymentProcessor, &$paymentForm = NULL, $force = FALSE) { - if (!empty($paymentProcessor['id'])) { - $cacheKey = $paymentProcessor['id']; - } - else { - //@todo eliminated instances of this in favour of id-specific instances. - $cacheKey = $mode . '_' . $paymentProcessor['name']; - } - if (!isset(self::$_singleton[$cacheKey]) || self::$_singleton[$cacheKey] === NULL) { - self::$_singleton[$cacheKey] = new CRM_Core_Payment_PaypalImpl($mode, $paymentProcessor); - } - return self::$_singleton[$cacheKey]; - } - /** * Are back office payments supported - e.g paypal standard won't permit you to enter a credit card associated with someone else's login * @return bool @@ -112,13 +84,15 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { } return FALSE; } + /** * Express checkout code. Check PayPal documentation for more information * * @param array $params * Assoc array of input parameters for this transaction. * - * @return array the result in an nice formatted array (or an error object) + * @return array + * the result in an nice formatted array (or an error object) */ public function setExpressCheckOut(&$params) { $args = array(); @@ -162,7 +136,8 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * @param string $token * The key associated with this transaction. * - * @return array the result in an nice formatted array (or an error object) + * @return array + * the result in an nice formatted array (or an error object) */ public function getExpressCheckoutDetails($token) { $args = array(); @@ -204,7 +179,8 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * * @internal param string $token the key associated with this transaction * - * @return array the result in an nice formatted array (or an error object) + * @return array + * the result in an nice formatted array (or an error object) */ public function doExpressCheckout(&$params) { $args = array(); @@ -221,6 +197,9 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $args['cancelURL'] = CRM_Utils_Array::value('cancelURL', $params); $args['desc'] = $params['description']; + // add CiviCRM BN code + $args['BUTTONSOURCE'] = 'CiviCRM_SP'; + $result = $this->invokeAPI($args); if (is_a($result, 'CRM_Core_Error')) { @@ -272,14 +251,16 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { //$args['desc'] = 'Recurring Contribution'; $args['totalbillingcycles'] = $params['installments']; $args['version'] = '56.0'; - $args['profilereference'] = - "i={$params['invoiceID']}" . + $args['profilereference'] = "i={$params['invoiceID']}" . "&m=$component" . "&c={$params['contactID']}" . "&r={$params['contributionRecurID']}" . "&b={$params['contributionID']}" . "&p={$params['contributionPageID']}"; + // add CiviCRM BN code + $args['BUTTONSOURCE'] = 'CiviCRM_SP'; + $result = $this->invokeAPI($args); if (is_a($result, 'CRM_Core_Error')) { @@ -287,7 +268,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { } /* Success */ - $params['trxn_id'] = $result['transactionid']; $params['gross_amount'] = $result['amt']; $params['fee_amount'] = $result['feeamt']; @@ -306,12 +286,12 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * @param $method */ public function initialize(&$args, $method) { - $args['user'] = $this->_paymentProcessor['user_name']; - $args['pwd'] = $this->_paymentProcessor['password']; - $args['version'] = 3.0; + $args['user'] = $this->_paymentProcessor['user_name']; + $args['pwd'] = $this->_paymentProcessor['password']; + $args['version'] = 3.0; $args['signature'] = $this->_paymentProcessor['signature']; - $args['subject'] = CRM_Utils_Array::value('subject', $this->_paymentProcessor); - $args['method'] = $method; + $args['subject'] = CRM_Utils_Array::value('subject', $this->_paymentProcessor); + $args['method'] = $method; } /** @@ -322,7 +302,8 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * Assoc array of input parameters for this transaction. * * @param string $component - * @return array the result in an nice formatted array (or an error object) + * @return array + * the result in an nice formatted array (or an error object) */ public function doDirectPayment(&$params, $component = 'contribute') { $args = array(); @@ -349,6 +330,9 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $args['desc'] = substr(CRM_Utils_Array::value('description', $params), 0, 127); $args['custom'] = CRM_Utils_Array::value('accountingCode', $params); + // add CiviCRM BN code + $args['BUTTONSOURCE'] = 'CiviCRM_SP'; + if (CRM_Utils_Array::value('is_recur', $params) == 1) { $start_time = strtotime(date('m/d/Y')); $start_date = date('Y-m-d\T00:00:00\Z', $start_time); @@ -358,7 +342,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $args['billingfrequency'] = $params['frequency_interval']; $args['method'] = "CreateRecurringPaymentsProfile"; $args['profilestartdate'] = $start_date; - $args['desc'] = + $args['desc'] = "" . $params['description'] . ": " . $params['amount'] . " Per " . $params['frequency_interval'] . " " . @@ -366,7 +350,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $args['amt'] = $params['amount']; $args['totalbillingcycles'] = $params['installments']; $args['version'] = 56.0; - $args['PROFILEREFERENCE'] = + $args['PROFILEREFERENCE'] = "" . "i=" . $params['invoiceID'] . "&m=" . $component . "&c=" . $params['contactID'] . "&r=" . $params['contributionRecurID'] . "&b=" . $params['contributionID'] . "&p=" . $params['contributionPageID']; @@ -396,13 +380,14 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { } /** - * This function checks to see if we have the right config values + * This function checks to see if we have the right config values. * - * @return string the error message if any + * @return string + * the error message if any */ public function checkConfig() { $error = array(); - $paymentProcessorType = CRM_Core_PseudoConstant::paymentProcessorType(false, null, 'name'); + $paymentProcessorType = CRM_Core_PseudoConstant::paymentProcessorType(FALSE, NULL, 'name'); if ( $this->_paymentProcessor['payment_processor_type_id'] == CRM_Utils_Array::key('PayPal_Standard', $paymentProcessorType) || $this->_paymentProcessor['payment_processor_type_id'] == CRM_Utils_Array::key('PayPal', $paymentProcessorType) @@ -448,7 +433,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { * @param string $method * Method to check for. * - * @return boolean + * @return bool */ public function isSupported($method = 'cancelSubscription') { if ($this->_paymentProcessor['payment_processor_type'] != 'PayPal') { @@ -471,8 +456,8 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $this->initialize($args, 'ManageRecurringPaymentsProfileStatus'); $args['PROFILEID'] = CRM_Utils_Array::value('subscriptionId', $params); - $args['ACTION'] = 'Cancel'; - $args['NOTE'] = CRM_Utils_Array::value('reason', $params); + $args['ACTION'] = 'Cancel'; + $args['NOTE'] = CRM_Utils_Array::value('reason', $params); $result = $this->invokeAPI($args); if (is_a($result, 'CRM_Core_Error')) { @@ -504,13 +489,13 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $args['EXPDATE'] = sprintf('%02d', $params['month']) . $params['year']; $args['CVV2'] = $params['cvv2']; - $args['FIRSTNAME'] = $params['first_name']; - $args['LASTNAME'] = $params['last_name']; - $args['STREET'] = $params['street_address']; - $args['CITY'] = $params['city']; - $args['STATE'] = $params['state_province']; + $args['FIRSTNAME'] = $params['first_name']; + $args['LASTNAME'] = $params['last_name']; + $args['STREET'] = $params['street_address']; + $args['CITY'] = $params['city']; + $args['STATE'] = $params['state_province']; $args['COUNTRYCODE'] = $params['postal_code']; - $args['ZIP'] = $params['country']; + $args['ZIP'] = $params['country']; $result = $this->invokeAPI($args); if (is_a($result, 'CRM_Core_Error')) { @@ -584,8 +569,8 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { } } - $url = ($component == 'event') ? 'civicrm/event/register' : 'civicrm/contribute/transact'; - $cancel = ($component == 'event') ? '_qf_Register_display' : '_qf_Main_display'; + $url = ($component == 'event') ? 'civicrm/event/register' : 'civicrm/contribute/transact'; + $cancel = ($component == 'event') ? '_qf_Register_display' : '_qf_Main_display'; $returnURL = CRM_Utils_System::url($url, "_qf_ThankYou_display=1&qfKey={$params['qfKey']}", TRUE, NULL, FALSE @@ -623,9 +608,8 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { 'invoice' => $params['invoiceID'], 'lc' => substr($config->lcMessages, -2), 'charset' => function_exists('mb_internal_encoding') ? mb_internal_encoding() : 'UTF-8', - 'custom' => CRM_Utils_Array::value('accountingCode', - $params - ), + 'custom' => CRM_Utils_Array::value('accountingCode', $params), + 'bn' => 'CiviCRM_SP', ); // add name and address if available, CRM-3130 @@ -677,9 +661,9 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $paypalParams += array( 'cmd' => '_xclick-subscriptions', - 'a3' => $params['amount'], - 'p3' => $params['frequency_interval'], - 't3' => ucfirst(substr($params['frequency_unit'], 0, 1)), + 'a3' => $params['amount'], + 'p3' => $params['frequency_interval'], + 't3' => ucfirst(substr($params['frequency_unit'], 0, 1)), 'src' => 1, 'sra' => 1, 'srt' => CRM_Utils_Array::value('installments', $params), @@ -713,9 +697,9 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { $uri .= "&{$key}={$value}"; } - $uri = substr($uri, 1); - $url = $this->_paymentProcessor['url_site']; - $sub = empty($params['is_recur']) ? 'cgi-bin/webscr' : 'subscriptions'; + $uri = substr($uri, 1); + $url = $this->_paymentProcessor['url_site']; + $sub = empty($params['is_recur']) ? 'cgi-bin/webscr' : 'subscriptions'; $paypalURL = "{$url}{$sub}?$uri"; CRM_Utils_System::redirect($paypalURL); @@ -796,7 +780,8 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { return $result; } - /** This function will take NVPString and convert it to an Associative Array and it will decode the response. + /** + * This function will take NVPString and convert it to an Associative Array and it will decode the response. * It is usefull to search for a particular key and displaying arrays. * @nvpstr is NVPString. * @nvpArray is Associative Array. @@ -823,4 +808,5 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { return $result; } + }