paypal快速结账后缺少会话数据

时间:2014-07-23 09:12:49

标签: php session opencart paypal

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

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

试图查看可能导致它的原因,当他们返回网站时(通常通过payment / pp_express / expressReturn)并且会话数据没有paypal / cart详细信息我已经记录了大部分超级全球的详细信息。 他们的会议总是:

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();

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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