哪个是正确的 - PayPal文档或他们的PHP IPN代码示例?

时间:2017-07-13 06:25:48

标签: php paypal paypal-ipn

根据PayPal的Implementing an IPN Listener文档,IPN侦听器的正确事件序列是:

  • 监听器收到通知
  • 侦听器发送空的HTTP 200响应
  • 监听器将<?php $name = $_POST['nama_exam']; $exam = $_POST['soal_exam']; $op = $_POST['option']; $answer = $_POST['answer']; foreach($op as $i=>$op){ if($answer==$i){ $ans=1; }else{ $ans=0; } $sql_pil = mysql_query("INSERT INTO answer (`answer_examcode`,`answer`, `answer_code`,`answer_entrydate`) values ('$id_soal','$op','$ans',NOW())"); } ?> 添加到收到的通知上,然后通过POST将其发送回PayPal
  • PayPal以cmd=_notify-validateVERIFIED
  • 回复
  • 侦听器正确处理通知

但是,GitHub上的示例代码(显然由PayPal提供)按不同的顺序执行:

  • 监听器收到通知
  • 监听器将INVALID添加到收到的通知上,然后通过POST将其发送回PayPal
  • PayPal以cmd=_notify-validateVERIFIED
  • 回复
  • 侦听器正确处理通知
  • 侦听器发送空的HTTP 200响应

示例代码是否正常工作?如果没有,为什么PayPal引用这段代码作为例子呢?如果是这样,为什么PayPal的文档反映了正确的编码顺序? ......或订单无关紧要?

1 个答案:

答案 0 :(得分:1)

显然答案是&#34;它在&#34;中完成的顺序并不重要。 - 只要在超时窗口内收到响应。

我在PayPal网站上发现此信息作为我搜索&#34;沙盒交易未发送IPN时可能的答案之一&#34;在https://www.paypal-techsupport.com/

  

IPN超时时长多长?

     

PayPal的即时付款通知(IPN)系统需要您的网络   服务器在IPN发送到您的IPN时发送HTTP 200响应   脚本。

     

如果您的服务器在一定时间后没有响应,则IPN   系统然后将IPN重新发布到您的脚本。

     

每次重发之间的时间量每次翻倍:10秒,   20秒,40秒,80秒等,最多24个   小时。 IPN系统在以下情况下停止重新发布:

     
      
  • PayPal收到一个基本的HTTP&#34; 200 OK&#34;来自您的网络服务器的响应,或
  •   
  • 自首次发布约四天后。
  •   

请注意,如果您的IPN侦听器花费超过10秒的时间到达其响应HTTP 200结果的位置(如示例代码所示),那么您正在做非常错误: IPN处理程序应该是 非常快速的 进程,如果您想处理大量流量,则应尽快执行,尤其是