为什么paypal-ipn仍然会向我的POST返回INVALID?

时间:2016-06-30 11:12:56

标签: python paypal paypal-ipn urlencode server-side-scripting

我已经构建了一个简单的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")行只是因为它有效。

1 个答案:

答案 0 :(得分:0)

我通过答案PayPal IPN always return INVALID even when I follow PayPal sample code to the word?

找到了它

结果表明:ipn-simulator没有(或者并不总是?)提供VALID响应,但是沙盒帐户会这样做。