为什么 paypal-ipn 对我的 POST 仍然 return 无效?

Why does paypal-ipn still return INVALID to my POST?

我已经构建了一个简单的 paypal-ipn 侦听器:它侦听 paypal 向我发送的 http POST,读取其数据并将其发送回 paypal,如果接收到的数据与数据发送。

我正在使用 Paypal IPN 模拟器发送 IPN。

我基本上是从 here 复制代码,但我总是返回 INVALID。查看来自 stdin 的 rawinput 数据,我觉得我遗漏了一些关于编码的信息,但我对所有这些东西都太陌生了,无法弄清楚。

#!/usr/bin/python3
import sys
import cgi
import os; import json; import collections;import urllib; from urllib import parse

PAYPAL_URL = "https://sandbox.paypal.com/cgi-bin/webscr"

inputraw =sys.stdin.read()

f = open('test','w')

print("content-type: text/html\r\n\r\n")

formData ="cmd=_notify-validate&"+parse.unquote(inputraw)

f.write(formData+"\n")

req = urllib.request.Request(PAYPAL_URL, formData.encode())

req.add_header("Content-type", "application/x-www-form-urlencoded")
response = urllib.request.urlopen(req)
status = str(response.read())

f.write(status); f.write("\n")

if (not status == "b'VERIFIED'"):
        f.write("OH NO")
else:
        f.write("OH YES")

f.write("\n")
f.close()

我也不知道如何发送纯 HTTP 200 响应并使用 print("content-type: text/html\r\n\r\n") 行只是因为它有效。

我是通过答案找到的

事实证明:ipn-simulator 不(或不总是?)给出 VALID 响应,但沙盒帐户会。