我目前正在使用Paypal REST API为具有多个计划的用户处理结算协议。
当用户注册计划时,需要PayPal付款。完成该步骤后,PayPal会将它们重定向到我提供的返回URL。
问题是,有时用户的会话在从PayPal返回时不会保留!
我有session_start()
作为我所有文件的第一行,因此正在创建会话 。在将用户带到PayPal之前,我已经验证了$_SESSION
数组 正在填充 - 只是在PayPal之后将它们带回来。
有没有更好的方法来保存这样的数据,以便我可以在从PayPal返回时更新用户帐户?或者也许有一种方法可以通过PayPalrequest传递电子邮件,以便在返回时发送回我的网站的对象中返回它?
答案 0 :(得分:0)
如果您在注册页面和PayPal重定向的页面上通过session_start()
正确启动了会话,那么您的会话应该正常启动。
假设您不是无意中closing the session或regenerating the ID,听起来似乎没有实际的“会话管理”问题,但可能与PayPal的网址有关。重定向回。
PHP会话的一个常见问题是,使用默认的PHP配置,它们不会在子域之间传输。
例如,如果我在example.com
访问您的域名域,则我的会话将仅在example.com
上有效。如果我转到www.example.com
,我会收到新会话。
您可以通过example.com
或www.example.com
访问您的网站并检查PHPSESSID
Cookie设置的域来验证这一点。如果不是 .example.com
(请注意前导.
),那么这就是问题=]
要帮助解决此问题,您可以修改服务器的配置,将.example.com
设置为Cookie的域。取自this answer:
session.cookie_domain = ".example.com"
答案 1 :(得分:0)
我给最近一个问题的答案也应该适用于此:
我用于同一问题的解决方案是设置 关于结算协议的
override_merchant_preferences
,与return_url
在查询中包含用户ID,例如www.domain.com/api/handler.php?uid=42&action=return
。
当然,您可以通过$_GET
那样传递您想要的任何标识符。