找回密码
 立即注册
相关推荐换一批
  1. YD/T 514-1998 非话用户终端设备与公用电话网接口技术要求和测试方法
  2. YD/T 1938.1-2009 会话初始协议(SIP)测试方法 第1部分:基本的会话初始协议
  3. YD/T 1962-2009 具有复用去复用功能的 10Gbit/s 和 40Gbit/s 光收发合一模块软件技?
  4. YD/T 1971-2009 基于移动通信网络业务的用户D理特性技术要求
  5. GA/T 852.4-2009 娱乐服务场所治安管理信息规范第4部分:娱乐服务场所变更类型代码
  6. GA/T 852.7-2009 娱乐服务场所治安管理信息规范第7部分:娱乐服务场所状态代码
  7. YD/T 2291-2011 统一 IMS 查询/服务会话控制设备(I-CSCF/S-CSCF)技术要求(第一阶段)
  8. YD/T 2292-2011 统一 IMS 查询/服务会话控制设备(I-CSCF/S-CSCF)测试方法(第一阶段)
  9. YD/T 2293-2011 统一 IMS D理会话控制设备(P-CSCF)测试方法(第一阶段)
  10. YD/T 2297-2011 IPv6 用户会话技术要求
  11. TB 10073-2000 铁路通信用户接入网设计规范
  12. YD/T 2425-2012 统一 IMS 会话边界控制设备技术要求
  13. YD/T 2692-2014 电信和互联网用户个人电子信息保护通用技术要求和管理要求
  14. TB/T 3361-2016 铁路数字移动通信系统(GSM-R)编号计划
  15. YD/T 2186-2010 统一 IMS D理会话控制设备(P-CSCF)技术要求(第一阶段)
  16. YDN 111-1999 智能网记帐卡呼叫业务(300号)技术规定
  17. YD/T 2843-2015 基于 Radius 上报用户溯源信息的技术要求
  18. YD/T 2294-2011 统一 IMS 归属用户服务器(HSS)设备测试方法(第一阶段)
  19. YDB 079-2012 基于公用电信网的宽带客户网络联网技术要求 基于 MoCA 的同轴电缆联网
  20. YDB 043-2010 IPv4 用户会话技术规范
  21. YD/T 3116-2016 光纤到户用户接入点到家居配线箱光纤线路衰减测试方法
  22. GB/T 39318-2020 军民通用资源 标识代码映射要求
用户IPN会话代码 | 软件设计/软件工程 2022-05-06 358 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
问题
我正在使用 Micha 的 PayPal IPN 脚本,并且在大多数情况下它工作正常:https://github.com/Quixotix/PHP-PayPal-IPN

当我在网站上单击 PayNow 时,它会重定向到带有正确信息的贝宝,允许进行付款,但返回时没有任何反应,即它没有按应有的方式升级用户。现在我已经在 IPN 之外测试了我的代码并且它工作得很好,所以在我看来 IPN 脚本正在丢失会话?

这是我的按钮代码:
  1. <form name="_xclick" action="https://www.paypal.com/cgi-bin/webscr" method="post">
  2.     <input type="hidden" name="cmd" value="_xclick">
  3.     <input type="hidden" name="business" value="EMAIL_TO">
  4.     <input type="hidden" name="currency_code" value="GBP">
  5.     <input type="hidden" name="item_name" value="Text Light">
  6.     <input type="hidden" name="amount" value="0.01">
  7.     <input type="hidden" name="return" value="http://domain.co.uk/editors">
  8.     <input type="hidden" name="notify_url" value="http://domain.co.uk/account/upgrade">
  9.     <input type="submit" value="Pay now" class="btn btn-preview" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
  10. </form>
复制代码

所以通知 url(IPN 代码)是 /account/upgrade - 据我了解,它应该在这里执行升级任务?这是我的代码
  1. if ($verified) {

  2.     $errmsg = '';

  3.     // some error checking

  4.     if (!empty($errmsg)) {

  5.         // manually investigate errors from the fraud checking

  6.     } else {

  7.         // upgrade user
  8.         $package = serialize($_SESSION['package']);
  9.         $this->db->update('users',array('id' => $_SESSION['user']['id']),array('payment_plan' => $package));

  10.     }

  11. } else {

  12.     // not verified, investigate problems
  13. }
复制代码

如上,'//升级用户'下的代码在外部工作正常,但从贝宝返回时,显然没有维护会话。它没有犯任何错误,它只是没有做任何事情。

我在哪里做错了?如何确保会话信息将从贝宝传回。

谢谢

回答
您的问题有一个简短的答案:IPN 不是作为用户完成的。

以下是 IPN 的工作原理。您付款,访问者返回您的网站,Paypal 会 ping 您的 IPN URL。粗体的重点 - 请求将来自贝宝,而不是来自用户,因此不会继承用户的会话!

原因很简单,IPN URL 应该是私有的,如果不是,你可以做各种愚蠢的恶作剧(包括创建虚拟交易)。出于这个原因,用户永远不会看到这个地址。 (另一个原因是并非所有浏览器都遵循重定向 - 并且 IPN 旨在提供 100% 的信息)。

如果要执行此操作,则需要向 IPN 请求传递一个参数,指示用户是谁。传递用户 ID 是一个非常糟糕的主意 - 因为参数是可修改的。相反,生成某种包含用户信息的交易 ID,并传递该 ID。在 IPN 调用中,您将获取此变量作为自定义参数,这将允许您从数据库中获取数据并做任何您想做的事情,知道用户是谁。





上一篇:Rxjs将Json文档中数组映射到新数组类型
下一篇:os.path.join 是否有替代 Pathlib?