私はシンプルなpaypal-ipnリスナーを構築しています。paypalを聞いてhttp POSTを受信し、データを読み込んでpaypalに送り返します。なぜpaypal-ipnは私のPOSTにINVALIDを返すのですか?
私は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")
ラインを使用していませんでした。