I have created an offsite (redirect form) payment gateway Drupal 8 module for Opayo.co.uk. following drupal commerce documentation.
My off-site gateway works fine on a fresh drupal 8 commerce install. That means response from Opayo lands on /checkout/order-id/payment/return
or /checkout/order-id/payment/cancel
and based on opayo’s response Order can be saved or user is redirected to /review
page. Response is proccess inside my code’s onReturn()
and onCancel
functions without implementing any route and controller
But when it is installed on an existing campsite booking website (after disabeling all other gateways) the response does not arrive at my gateway’s onReturn or onCancel functions.
When user clicks for "Pay and Complete" button to go to off-site payment, the values in $form['#cancel_url']
and $form['#return_url']
is same /checkout/optimus-encoded-order-id/payment
.
Concatinating this url with /cancel
or /return
does not bring gateway response to my module.
When user arrives back with response in query string onCancel or onReturn in my gateway module are not get called, but on fresh Drupal commerce install it works fine.
How can I catch the response from Payment providor opayo before any other custom module and process it thorugh my gateway module.
class RedirectCheckoutForm extends BasePaymentOffsiteForm { public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form = parent::buildConfigurationForm($form, $form_state); /** @var Drupalcommerce_paymentEntityPaymentInterface $payment */ $payment = $this->entity; //gettting links $crypt_raw_fields['FailureURL']= $form['#cancel_url']."/"."cancel"; $crypt_raw_fields['SuccessURL']= $form['#return_url']."/"."return";
Any help is highly appreciated.