【发布时间】:2014-01-15 22:39:04
【问题描述】:
我正在尝试为 paypal IPN 设置一个 python cgi 侦听器,我尝试了不同的东西including this。但最终我看到了从 paypal 发送的通知,但它没有任何详细信息。
这是我正在使用的代码:
#! /usr/bin/env python
import cgi
import cgitb; cgitb.enable() # for troubleshooting
import os, sys
query_string=os.environ['QUERY_STRING']
user_ip=os.environ['REMOTE_ADDR']
form = cgi.FieldStorage()
query=form.getvalue("query")
paymentDetails = sys.stdin.read()
print "Content-type: text/html"
print
print """
<html>
<head>
<title>Test IPN</title>
</head>
<body>
Query String = %s <br>
User IP = %s <br>
</body>
</html>
"""%(query_string,user_ip)
fopen=open('output.txt','a')
fopen.write('Query: %s\n'%str(query))
fopen.write('Environment: %s\n'%str(os.environ))
fopen.write('Payment Details: %s\n'%str(paymentDetails))
fopen.close()
这是我得到的输出:
Query: None
Environment: {'TMP': '/tmp', 'CONTEXT_DOCUMENT_ROOT': '/005/html', 'SERVER_SOFTWARE': 'Apache', 'SCRIPT_NAME': '/p/ipn.py', 'SERVER_SIGNATURE': '<address>Apache Server at aaaaa.net Port 80</address>\n', 'REQUEST_METHOD': 'POST', 'SERVER_PROTOCOL': 'HTTP/1.0', 'QUERY_STRING': '', 'PATH': '/sbin:/usr/sbin:/bin:/usr/bin', 'CONTENT_LENGTH': '975', 'GD_PHP_HANDLER': 'x-httpd-php5', 'SERVER_NAME': 'aaaaa.net', 'REMOTE_ADDR': '173.0.81.1', 'SPI': 'TRUE', 'SERVER_PORT': '80', 'SERVER_ADDR': '00.000.0.0', 'DOCUMENT_ROOT': '/005/html', 'SCRIPT_FILENAME': '/005/html/p/ipn.py', 'SERVER_ADMIN': 'support@ssss.net', 'SCRIPT_URI': 'http://aaaaa.net/p/ipn.py', 'HTTP_HOST': 'aaaaa.net', 'SCRIPT_URL': '/p/ipn.py', 'REQUEST_URI': '/p/ipn.py', 'HTTP_ACCEPT': '*/*', 'SUBDOMAIN_DOCUMENT_ROOT': '/005/html', 'TEMP': '/005/tmp', 'GATEWAY_INTERFACE': 'CGI/1.1', 'PHPRC': '/005/html/', 'REMOTE_PORT': '53764', 'REQUEST_SCHEME': 'http', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'UNIQUE_ID': 'Ur7jX63JxMsAADYmVf8AAACk'}
Payment Details:
在上面的链接中,通知脚本向贝宝发送了一些信息以验证付款,但正如您所见,付款详细信息是一个空字符串。问题可能出在哪里?
【问题讨论】:
-
我面临同样的问题。我在 POST 中得到一个空的 QUERY_STRING。 (它在 GET 中工作)。见my question here
标签: python paypal cgi paypal-ipn