我已经构建了一个简单的paypal-ipn监听器:它监听paypal发送给我一个http POST,读取它的数据并将其发送回paypal,如果收到的数据与数据发送匹配,它应该回答VALID。
我正在使用Paypal IPN-Simulator发送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")
行只是因为它有效。
答案 0 :(得分:0)
我通过答案PayPal IPN always return INVALID even when I follow PayPal sample code to the word?
找到了它结果表明:ipn-simulator没有(或者并不总是?)提供VALID响应,但是沙盒帐户会这样做。