paypal express结账后缺少会话数据


Missing session data after paypal express checkout

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

问题似乎是,当他们在贝宝之后返回网站时,他们的会话数据丢失了,所以他们购物车的所有细节都不见了。

当他们返回网站(通常通过payment/pp_express/expressReturn(,并且会话数据没有贝宝/购物车的详细信息时,我已经记录了大多数超级全局的详细信息。他们的会议总是:

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

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

经过进一步调查,由于重定向的方式,会话似乎丢失了:

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

所以在每次头重定向之前,我都添加了

session_write_close();

事实上,这个问题似乎有所缓解,但它仍在发生。

服务器使用memcache,我最后的想法是,也许内存不足,他们的会话丢失了——但我想,如果是这样的话,我们会在整个网站上看到频繁的注销问题。

根据我的经验,在从支付网关返回后使用会话显示订单数据是一种糟糕的做法。

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

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