private function WebformCivicrmPostProcess::submitIPNPayment in Webform CiviCRM Integration 8.5
Call IPN payment processor to redirect to payment site
1 call to WebformCivicrmPostProcess::submitIPNPayment()
- WebformCivicrmPostProcess::postSave in src/
WebformCivicrmPostProcess.php - Process webform submission after it is has been saved. Called by the following hooks:
File
- src/
WebformCivicrmPostProcess.php, line 2084 - Front-end form validation and post-processing.
Class
Namespace
Drupal\webform_civicrmCode
private function submitIPNPayment() {
$utils = \Drupal::service('webform_civicrm.utils');
$params = $this->data['contribution'][1]['contribution'][1];
$processor_type = $utils
->wf_civicrm_api('payment_processor', 'getsingle', [
'id' => $params['payment_processor_id'],
]);
$paymentProcessor = \Civi\Payment\System::singleton()
->getById($params['payment_processor_id']);
// Ideally we would pass the correct id for the test processor through but that seems not to be the
// case so load it here.
if (!empty($params['is_test'])) {
$paymentProcessor = \Civi\Payment\System::singleton()
->getByName($processor_type['name'], TRUE);
}
// Add contact details to params (most processors want a first_name and last_name)
$contact = $utils
->wf_civicrm_api('contact', 'getsingle', [
'id' => $this->ent['contact'][1]['id'],
]);
$params += $contact;
$params['contributionID'] = $params['id'] = $this->ent['contribution'][1]['id'];
// Generate a fake qfKey in case payment processor redirects to contribution thank-you page
$params['qfKey'] = $this
->getQfKey();
$params['contactID'] = $params['contact_id'];
$params['currency'] = $params['currencyID'] = wf_crm_aval($this->data, "contribution:1:currency");
$params['total_amount'] = round($this->totalContribution, 2);
// Some processors want this one way, some want it the other
$params['amount'] = $params['total_amount'];
$params['financial_type_id'] = wf_crm_aval($this->data, 'contribution:1:contribution:1:financial_type_id');
$params['source'] = $this->settings['new_contact_source'];
$params['item_name'] = $params['description'] = t('Webform Payment: @title', [
'@title' => $this->node
->label(),
]);
if (method_exists($paymentProcessor, 'setSuccessUrl')) {
$paymentProcessor
->setSuccessUrl($this
->getIpnRedirectUrl('success'));
$paymentProcessor
->setCancelUrl($this
->getIpnRedirectUrl('cancel'));
}
try {
$paymentProcessor
->doPayment($params);
} catch (\Civi\Payment\Exception\PaymentProcessorException $e) {
drupal_set_message(ts('Payment approval failed with message: ') . $e
->getMessage(), 'error');
\CRM_Utils_System::redirect($this
->getIpnRedirectUrl('cancel'));
}
}