Случайно сессия проверки заканчивается до перенаправления внешнего платежа в Magento 1 - PullRequest
0 голосов
/ 06 апреля 2020

У меня большая проблема в Magento 1 на кассе. Я использую внешний платежный модуль для оплаты картой на своем веб-сайте, и рабочий процесс описан ниже:

Клиент добавляет некоторые товары в корзину и отправляется на оформление заказа. Он выбирает карту оплаты и нажимает кнопку Разместить заказ . И здесь возникает проблема: случайным образом пользователь не перенаправляется на страницу оплаты, а перенаправляется на полностью пустую страницу.

После некоторого копания я понял, в чем проблема, но я не знаю почему и не знаю, как это исправить.

В модели оплаты, в методе getOrderPlaceRedirectUrl() модуль зашифровывает некоторые env_key и данные заказа и сохраняет их в checkout/session следующим образом:

Mage::getSingleton('checkout/session')->setFormData($objPmReqCard->getEncData());
Mage::getSingleton('checkout/session')->setFormKey($objPmReqCard->getEnvKey());

Имейте в виду, что после этих строк я проверил сеанс и данные есть.

И возвращается:

return Mage::getUrl('cc/cc/redirect', array('_secure' => true));

После этого действие контроллера загружает блок перенаправления, который создает форму, и отправляет ее на платежный шлюз следующим образом:

class Mobilpay_Cc_Block_Redirect extends Mage_Core_Block_Abstract
{
protected function _toHtml()
{
    $cc = Mage::getModel('cc/cc');

    $form = new Varien_Data_Form();

    try {
        $storeId = Mage::app()->getStore()->getStoreId();
        $storeLocaleCode = explode('_', Mage::getStoreConfig('general/locale/code', $storeId));
        $code = isset($storeLocaleCode[0]) && $storeLocaleCode[0] !='' ? $storeLocaleCode[0] : 'ro';

        $sandboxUrl    = !$code || $code == 'ro' ? 'http://sandboxsecure.mobilpay.ro' : 'http://sandboxsecure.mobilpay.ro/'. strtolower($code);
        $productionUrl = !$code || $code == 'ro' ? 'https://secure.mobilpay.ro' : 'https://secure.mobilpay.ro/'. strtolower($code);
    } catch (Exception $e) {
        Mage::logException($e);
        Mage::log('$code:: '.$code, null, 'mobilpay_url.log', true);
        $sandboxUrl    = 'http://sandboxsecure.mobilpay.ro';
        $productionUrl = 'https://secure.mobilpay.ro';
    }

    $paymentUrl = ($cc->getConfigData('debug') == 1) ? $sandboxUrl : $productionUrl;

    $form->setAction($paymentUrl)
    ->setId('cc')
    ->setName('cc')
    ->setMethod('POST')
    ->setUseContainer(true);

    $form->addField('data', 'hidden', array('name'=>'data', 'value'=>Mage::getSingleton('checkout/session')->getFormData()));
    $form->addField('env_key', 'hidden', array('name'=>'env_key', 'value'=>Mage::getSingleton('checkout/session')->getFormKey()));
    $html = '<html><body>';
    $html.= $this->__('You will be redirected to MobilPay in a few seconds.');
    $html.= $form->toHtml();
    $html.= '<script type="text/javascript">document.getElementById("cc").submit();</script>';
    $html.= '</body></html>';

    return $html;
}

Проблема здесь в том, что при вызове методов getFormData() и getFormKey() для checkout/session он ничего не возвращает и из-за этого платежный модуль перенаправляет на пустую страницу.

Итак, до того, как я проверил сеанс и данные были там, и теперь в этом блоке данные больше не существуют в сеансе, и нет никакого сброса в сеансе.

Это произошло случайно в 2 -3 из 20 случаев, и я не знаю почему, кто-нибудь может мне помочь с th это?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...