php - paypal 快速结帐后缺少 session 数据

标签 php session opencart paypal

我们基于 opencart 的商店正在使用 paypal 快速结账,大约 25% 的 paypal 快速订单遇到问题。

问题似乎是当他们在 paypal 之后返回网站时,他们的 session 数据丢失了,所以他们购物车的所有详细信息都消失了。

当他们返回网站(通常通过 payment/pp_express/expressReturn)并且 session 数据没有 paypal/cart 详细信息时,尝试查看可能导致它的原因我已经记录了大多数 superglobals 的详细信息. 他们的 session 总是:

Array
(
    [category] => desktop
    [language] => en
    [currency] => GBP
    [cart] => Array
        (
        )

)

有时当他们返回时他们的 cookie 是空的,其他时候语言、货币和跟踪都在那里。

在进一步调查之后,由于重定向的方式, session 似乎正在丢失:

header('Location: https://www.paypal.com/cgi‑bin/webscr?cmd=_express-checkout&token=' . $result['TOKEN'].'&useraction=commit');

所以在我添加的每个标题重定向之前

session_write_close();

这个问题实际上似乎有所缓解,但它仍然存在。

服务器使用内存缓存,我最后的想法是它可能内存不足并且他们的 session 丢失了 - 但我想如果是这样的话,我们会在我们的网站上看到频繁的注销问题。

最佳答案

根据我的经验,从支付网关返回后使用 session 显示订单数据是一种不好的做法。

大多数支付网关(包括 PayPal)都允许您传递 OrderID 或其他自定义变量,这些变量将在成功/失败时传回。您通常可以遵循以下过程:

  1. 保存订单到数据库,获取orderID
  2. 重定向到支付网关。将 orderID 传递给支付网关。
  3. 在成功/失败时使用支付网关发回的 orderID 从数据库中读取订单

关于php - paypal 快速结帐后缺少 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906421/

相关文章:

PHP : Sending Boundary Values in Curl Headers

php - 抓取标题、描述和关键字的可靠方法

python - 如何在 Django session 模型中设置自定义字段?

java - 如何在 Java EE 中隔离用户 session ?

php - OPENCART SQL复杂请求语句

php - 循环中具有不同标签的多个复选框

php - dompdf->渲染();不在 api 类中工作

PHP/MYSQL - 如何将从数据库获取的数据(存储在变量中)分配给 session 变量?

php - 如何更新MySQL、opencart中的时间

php - 不使用 "information"功能的 opencart php 自定义页面