$this->_component = $component;
if ($this->isPayPalType($this::PAYPAL_EXPRESS) || ($this->isPayPalType($this::PAYPAL_PRO) && !empty($params['token']))) {
return $this->doExpressCheckout($params);
-
}
-
- $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate');
+ $result = $this->setStatusPaymentPending([]);
// 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';
+ $result = $this->setStatusPaymentCompleted($result);
return $result;
}
$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';
+ $result = $this->setStatusPaymentPending($result);
}
else {
- $result['payment_status_id'] = array_search('Completed', $statuses);
- $result['payment_status'] = 'Completed';
+ $result = $this->setStatusPaymentCompleted($result);
}
}
}
public function doPaymentPayPalButton(&$params, $component = 'contribute') {
$args = [];
+ $result = $this->setStatusPaymentPending([]);
+
$this->initialize($args, 'DoDirectPayment');
$args['paymentAction'] = 'Sale';
// Allow further manipulation of the arguments via custom hooks ..
CRM_Utils_Hook::alterPaymentProcessorParams($this, $params, $args);
- $result = $this->invokeAPI($args);
+ $apiResult = $this->invokeAPI($args);
$params['recurr_profile_id'] = NULL;
if (CRM_Utils_Array::value('is_recur', $params) == 1) {
- $params['recurr_profile_id'] = $result['profileid'];
+ $params['recurr_profile_id'] = $apiResult['profileid'];
}
/* Success */
+ $result = $this->setStatusPaymentCompleted($result);
+ $doQueryParams = [
+ 'gross_amount' => $apiResult['amt'] ?? NULL,
+ 'trxn_id' => $apiResult['transactionid'] ?? NULL,
+ 'is_recur' => $params['is_recur'] ?? FALSE,
+ ];
+ $params = array_merge($params, $this->doQuery($doQueryParams));
- $params['trxn_id'] = $result['transactionid'] ?? NULL;
- $params['gross_amount'] = $result['amt'] ?? NULL;
- $params = array_merge($params, $this->doQuery($params));
- return $params;
+ $result['fee_amount'] = $params['fee_amount'] ?? 0;
+ $result['trxn_id'] = $apiResult['transactionid'] ?? NULL;
+ return $result;
}
/**
* Get url for users to manage this recurring contribution for this processor.
*
* @param int $entityID
- * @param null $entity
+ * @param string|null $entity
* @param string $action
*
* @return string|null