I have a custom payment gateway, with custom controller and failure page. I am trying to show the error message on checkout/custom/failure page, but I find it difficult and am thinking my flow maybe wrong.

How it works: On payment selection in the checkout page, the order is created and you are redirected to the payment provider, if successful, all is good. If the card is declined or the user cancels or for whatever reason if fails, it redirects to my custom controller (with POST values with payment information), cancels the order, and then redirects to checkout/custom/failure. I want the error message from the $_POST array to show as a message in the checkout/custom/failure page.

What I have (related to failure scenario):

  • Block/Standard/Failure.php [1]
  • Controller/Standard/Failure.php [2]
  • Controller/Standard/Response.php [3]
  • view/frontend/templates/failure.php [4]

Code for [3]:

$params = $this->getRequest()->getPostValue();
if (!empty($params['ResponseCode']) && !empty($params['ReasonCode'])) {
    if ($params['ResponseCode'] == '1' && $params['ReasonCode'] == '1') {
        // Set status "paid" changeOrderStatus and redirect to checkout/standard/success
        $result_data['result'] = 'Success! ' . $params['ReasonCode'];
        return $this->resultRedirectFactory->create()->setPath('checkout/onepage/success');
    } else {
        // Set status "cancelled" changeOrderStatus and redirect back to cart
        $result_data['result'] = 'Failed! ' . $params['ReasonCode'];
        return $this->resultRedirectFactory->create()->setPath('custompaymentgateway/standard/failure');

} else {
    // Set status "cancelled" changeOrderStatus
    $result_data['result'] = 'Failed! ' . $params['ReasonCode'];
    return $this->resultRedirectFactory->create()->setPath('custompaymentgateway/standard/failure');

[2] has a simple render Layout call:

public function execute() {
    $this->_view->loadLayout(['default', 'jccpaymentgateway_standard_failure']);

and lastly [4] has calls to block functions:

<?php if ($block->getRealOrderId()) : ?><p>
    <?php /* @escapeNotVerified */ echo __('Order #') . $block->getRealOrderId() ?></p>
<?php endif ?>
<?php if ($error = $block->getErrorMessage()) : ?>
    <p><?php /* @escapeNotVerified */ echo $error ?></p>
<?php endif ?>
<p><?php /* @escapeNotVerified */ echo __('Click <a href="%1">here</a> to continue shopping.', $block->escapeUrl($block->getContinueShoppingUrl())) ?></p>

So with all this my question is, how can [4] print the response data from [3]?? Specifically $params['ReasonCode']

1 Answer 1


In the end it was much simpler than I thought, Ill post it for anyone else who unnecessary struggles with it

In the response Controller I simply added


So when the .phtml requests $block->getErrorMessage() the error is set correctly

  • can you please add full example code.?
    – Mahesh
    Jul 30, 2018 at 10:14
  • @Mahesh unfortunately no i dont have the rights to the code
    – hahaha
    Jul 30, 2018 at 11:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.