php - 虚拟 pos 表单发布后 Opencart 会话删除
问题描述
Opencart 版本 2.0.3.1。我创建了一种付款方式来从用户那里获得付款。将数据发送到银行后删除消失。
发送到银行的表格数据如下
$okUrl and $failUrl=https://www.xxx/online/index.php?route=payment/tumbankalar/bank_response
elseif($this->session->data["BankaPosTipi"] == "3d")
{
$okUrl = $this->config->get('tumbankalar_donusURL');
$failUrl = $this->config->get('tumbankalar_donusURL');
$clientId = $this->config->get('tumbankalar_isbankasi_isyerikodu');
$url = "https://sanalpos.isbank.com.tr/fim/est3Dgate";
$amount = $toplam_tutar;
$oid = $order_info['order_id'];
$rnd = microtime();
$storekey = $this->config->get('tumbankalar_isbankasi_storekey');
$hashstr = $clientId . $oid . $amount . $okUrl . $failUrl . $rnd . $storekey;
$hash = base64_encode(pack('H*',sha1($hashstr)));
$bolum=1;
$form = '';
$form .= '<form name="pay_form" id="pay_form" method="post" action="'.$url.'">
<input type="hidden" name="pan" value="'.$kart_numarasi.'"/>
<input type="hidden" name="cv2" value="'.$kart_guvenlik_kodu.'"/>
<input type="hidden" name="Ecom_Payment_Card_ExpDate_Year" value="'.$kart_sonkullanma_tarihi_yil.'"/>
<input type="hidden" name="Ecom_Payment_Card_ExpDate_Month" value="'.$kart_sonkullanma_tarihi_ay.'"/>
<input type="hidden" name="cardType" value="'.$kart_tipi.'"/>
<input type="hidden" name="clientid" value="'.$clientId.'"/>
<input type="hidden" name="amount" value="'.$amount.'"/>
<input type="hidden" name="BOLUM" value="'.$bolum.'"/>
<input type="hidden" name="oid" value="'.$oid.'"/>
<input type="hidden" name="okUrl" value="'.$okUrl.'"/>
<input type="hidden" name="failUrl" value="'.$failUrl.'"/>
<input type="hidden" name="rnd" value="'.$rnd.'"/>
<input type="hidden" name="hash" value="'.$hash.'"/>
<input type="hidden" name="storetype" value="3d"/>
<input type="hidden" name="lang" value="tr"/>
<input type="hidden" name="currency" value="949"/>
</form>';
$form .= '<script type="text/javascript">document.pay_form.submit();</script>';
echo $form;
//print_r($this->session->data);
}
在表格发送到银行之前,我可以访问所有会话。
回调函数如下
function bank_response()
{
print_r($this->session->data);
}
但是在银行网站将有关付款的数据发布到我的网站后,会话正在删除。由于此错误,网站无法正常工作。
从银行发送的数据与网站上的订单数据不匹配。
我正在重新登录该站点,因为会话已被删除。
当我尝试付款时,我可以访问会话。
我花了很多时间来解决这个问题,但我无法弄清楚。
请帮我。
谢谢!
解决方案
在您的模块中找到包含(成功后删除此会话后)的public function index()
这一行或类似内容, 并将其移至您的$data['continue'] = $this->url->link('checkout/success', '', 'SSL');
url->link('checkout/success'
function bank_response()
{
print_r($this->session->data);
}
因此,这将在您收到银行的答复后运行。我不确定,因为这里只有您的部分代码,但这可能会导致您的问题。
推荐阅读
- javascript - 显示上一个和下一个内容的问题
- node.js - 是否可以检查是否有人打开了某个浏览器链接,如果没有执行某个功能?
- mysql - 如何在mysql中根据出生日期计算年龄并应用条件?
- postgresql - 如果 transaction_id 不是 null 加入 transaction_id 否则加入用户 id - 在同一个加入?
- flutter - 在 Flutter 上添加两列文本
- flutter - 如何在颤动中创建圆角矩形框?
- docker - 防止 .env 文件被复制到 Docker 容器
- azure - Azure IoT Edge 与 Lora 设备的集成
- python - 了解 Python 进程的内存增长(VmRSS 与 gc.get_objects)
- java - 使用 Java 读取图像文件的有效方法