Skip to content

Commit

Permalink
Initial refactor of PayPal core processor to stop using doDirectPayme…
Browse files Browse the repository at this point in the history
…nt/doTransferCheckout
  • Loading branch information
mattwire committed Apr 10, 2021
1 parent 149e111 commit 814ea19
Showing 1 changed file with 38 additions and 5 deletions.
43 changes: 38 additions & 5 deletions CRM/Core/Payment/PayPalImpl.php
Original file line number Diff line number Diff line change
Expand Up @@ -485,12 +485,46 @@ public function initialize(&$args, $method) {
* @throws \Civi\Payment\Exception\PaymentProcessorException
*/
public function doPayment(&$params, $component = 'contribute') {
$this->_component = $component;
if ($this->isPayPalType($this::PAYPAL_EXPRESS) || ($this->isPayPalType($this::PAYPAL_PRO) && !empty($params['token']))) {
$this->_component = $component;
return $this->doExpressCheckout($params);

}
return parent::doPayment($params, $component);

$statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate');

// If we have a $0 amount, skip call to processor and set payment_status to Completed.
// Conceivably a processor might override this - perhaps for setting up a token - but we don't
// have an example of that at the mome.
if ($params['amount'] == 0) {
$result['payment_status_id'] = array_search('Completed', $statuses);
$result['payment_status'] = 'Completed';
return $result;
}

if ($this->_paymentProcessor['billing_mode'] == 4) {
$this->doPaymentRedirectToPayPal($params, $component);
// redirect calls CiviExit() so execution is stopped
}
else {
$result = $this->doPaymentPayPalButton($params, $component);
if (is_array($result) && !isset($result['payment_status_id'])) {
if (!empty($params['is_recur'])) {
// See comment block.
$result['payment_status_id'] = array_search('Pending', $statuses);
$result['payment_status'] = 'Pending';
}
else {
$result['payment_status_id'] = array_search('Completed', $statuses);
$result['payment_status'] = 'Completed';
}
}
}
if (is_a($result, 'CRM_Core_Error')) {
CRM_Core_Error::deprecatedFunctionWarning('payment processors should throw exceptions rather than return errors');
throw new PaymentProcessorException(CRM_Core_Error::getMessages($result));
}
return $result;
}

/**
Expand All @@ -505,7 +539,7 @@ public function doPayment(&$params, $component = 'contribute') {
* the result in an nice formatted array (or an error object)
* @throws \Civi\Payment\Exception\PaymentProcessorException
*/
public function doDirectPayment(&$params, $component = 'contribute') {
public function doPaymentPayPalButton(&$params, $component = 'contribute') {
$args = [];

$this->initialize($args, 'DoDirectPayment');
Expand Down Expand Up @@ -856,8 +890,7 @@ public function doPreApproval(&$params) {
*
* @throws Exception
*/
public function doTransferCheckout(&$params, $component = 'contribute') {

public function doPaymentRedirectToPayPal(&$params, $component = 'contribute') {
$notifyParameters = ['module' => $component];
$notifyParameterMap = [
'contactID' => 'contactID',
Expand Down

0 comments on commit 814ea19

Please sign in to comment.