在 paypal Express 结账期间清除会话
Posted
技术标签:
【中文标题】在 paypal Express 结账期间清除会话【英文标题】:Session being cleared during paypal Express checkout 【发布时间】:2013-04-05 16:59:56 【问题描述】:我目前正在开发一个使用 Paypals 快速结帐系统的 E-Comm 网站。快速结帐系统工作正常,我发送付款金额,用户登录以确认运输详细信息,然后返回我确认并完成付款的页面。我遇到的主要问题是我在会话中保存了用户名(电子邮件)。一旦用户单击使用贝宝结帐并确认他/她的贝宝帐户,我的会话就被清除了。因此,我无法记录谁购买了哪些商品(除非我使用用户的贝宝电子邮件地址,该地址可能与用户在我的网站上使用的不同)。
所以我的问题是,有什么方法可以在整个确认操作中保留会话状态?还是有其他方法可以保留用户信息?这是一个记录在案的问题吗(我在任何地方都没有看到)?
如果需要更多详细信息,请告诉我。
感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:即使您的 php 会话没有终止(可能有不同的原因导致它关闭),在用户离开 PayPal 和返回之间依赖会话未修改仍然不是一个好主意。考虑一个拥有多个标签的用户,在完成快速结帐之前,他们开始在另一个标签中浏览您的网站。
相反,将所有对结帐完成很重要的内容存储在数据库中,并通过CUSTOM 或INVNUM 参数通过快速结帐流程传递一个唯一标识符。这些将通过结帐过程进行处理。一旦回调返回到您的站点,您就可以非常轻松地识别数据库中它所指的“未完成”订单并将其标记为“已付款”。
【讨论】:
我尝试设置 CUSTOM 属性和 INVNUM 属性,但是当我进入确认页面时,它说索引不存在。为了访问它,我需要做什么特别的事情吗? 您是否尝试过使用 var_dump() 转储 PayPal 响应,以验证它不在响应中的类似名称?如果在对 SetExpressCheckout 的调用中正确传递,它应该在那里。看起来从 EC v63 开始,CUSTOM 和 INVNUM 已被弃用,取而代之的是 PAYMENTREQUEST_n_CUSTOM 和 PAYMENTREQUEST_n_INVNUM。 cms.paypal.com/uk/cgi-bin/… 我使用 print_r 显示返回给我的数组中的所有值,那里没有 INVNUM 或 CUSTOM 的实例。【参考方案2】:不,一旦用户离开您的域,会话将终止。
相反,您可以在用户离开您的站点之前将电子邮件地址存储在表格中,并将插入记录的 ID 传递给贝宝。由于此 ID 是一个自定义字段,一旦用户完成付款,它将在回调 url 中返回。您可以从 URL 获取 ID 并从数据库中检索相应的电子邮件。
【讨论】:
在您的站点上创建一个.session,转到不在您域中的另一个站点在那里停留几分钟,然后通过在地址栏中输入其地址并按回车键返回到带有会话的页面... .以上是关于在 paypal Express 结账期间清除会话的主要内容,如果未能解决你的问题,请参考以下文章
在 Shopify 中使用 ActiveMerchant 的 Paypal Express 结账