У меня большая проблема в 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 это?
Заранее спасибо!