2016-11-29 153 views
1

我已经在VBScript/Classic ASP中实现了IPN监听器。 从我这边来看,它似乎很完美。 当它被调用时,它会将消息发送回Paypal附加cmd=_notify-validate。然后,它检查objHttp.status = 200objHttp.responseText = "VERIFIED"的响应,然后将该命令添加到我的数据库。PayPal IPN处理

然而贝宝给我发电子邮件;

主题:贝宝即时付款通知警告发送到以下网址

即时付款通知是失败:

+0

贝宝是否期望您的网页有特定的回复,可能您没有回复作为确认回复已处理? – Lankymart

+0

@Lankymart经过进一步调查,似乎有一些Paypal文档说需要完成的差异 (在收到PayPal的IPN消息后,您的监听器向PayPal返回一个空的HTTP 200响应,否则,PayPal会重新发送IPN消息)。 和贝宝给出的代码示例,其中不执行此步骤。 此步骤是否需要? 如果是这样,任何人都可以给我一个代码示例在VBScript /经典ASP显示如何做到这一点? –

+0

这是你使用的代码示例吗? - [paypal/ipn-code-samples](https://github.com/paypal/ipn-code-samples/blob/master/asp/paypal_ipn.asp) – Lankymart

回答

0

根据IPN Testing

每一位聆听者必须包括处理“错误通知”IPN消息的代码。

无论哪种方式,你应该按照步骤IPN troubleshooting tips一步一步。

这里有几个我选择的应该帮助。

  • 检查IPN历史记录中列出的URL以确保PayPal将每个IPN发布给您的听众。
  • 检查您的Web服务器的访问和错误日​​志。
  • 检查您的编程语言的错误日志。
  • 验证您的IPN侦听器是否对所有消息作出响应,即使那些您不打算处理的消息。

OPs comments

代码示例贝宝给,在其中不执行此步骤。这一步是否需要?

这听起来像你缺少步骤2从工作流程文档

2.来自PayPal接收IPN消息后,监听器返回一个空的HTTP 200响应于贝。否则,PayPal将重新发送IPN消息。

通过PHP示例来判断,两者似乎都首先发送验证,这与文档建议的工作流程不符。

在这种情况下,你应该能够做到

Response.Status = "200 OK" 

代码的休息后,确保没有其他人在写回使用Response.Write()因此服务器响应是空白的,你甚至可以用

Call Response.Clear() 

在设置Response.Status之前,确保没有其他东西从Response缓冲区写入。但是,如果Response.Buffer事先设置为True(通常在脚本的开始处),则此操作才有效。

+0

我试着添加'Response.Status =“200 OK”'但它仍然不起作用(就PayPal而言) –

+0

如何使用objHttp.Send发送200的状态,以便我可以发送根据文档提前回复? –

+0

事情是@AntonyMeadley,发送“回复”与发送“请求”不同,当您使用“objHttp.Send”向PayPal发送新的“请求”时,PayPal会发送“回复” 。您在PayPal的IPN历史记录中看到了什么,听众是否在那里返回'200 OK'? – Lankymart