为什么我在Django中使用此调用从Paypal获得“内部错误”?

时间:2013-09-02 23:44:48

标签: python curl paypal paypal-sandbox

我有一个获得PayPal身份验证的请求。它用Curl编写,效果很好。尝试在Python中重写它会导致错误响应(500000内部错误)。任何人都可以指导我如何重写或更正我现有的代码。

CURL

curl -s --insecure -H "X-PAYPAL-SECURITY-USERID: <user_id>" -H "X-PAYPAL-SECURITY-PASSWORD: <user_password>" -H "X-PAYPAL-SECURITY-SIGNATURE: <user_signature>" -H "X-PAYPAL-REQUEST-DATA-FORMAT: JSON" -H "X-PAYPAL-RESPONSE-DATA-FORMAT: JSON" -H "X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T" https://svcs.sandbox.paypal.com/Permissions/RequestPermissions -d "{\"scope\":\"EXPRESS_CHECKOUT\", \"callback\":\"<callback_url>",  \"requestEnvelope\": {\"errorLanguage\":\"en_US\"}}"

PYTHON

import settings
import urllib
import urllib2
from django.utils import simplejson

def home(request):
    headers = {
    "X-PAYPAL-SECURITY-USERID": settings.USERNAME,
    "X-PAYPAL-SECURITY-PASSWORD": settings.PASSWORD,
    "X-PAYPAL-SECURITY-SIGNATURE": settings.SIGNATURE,
    "X-PAYPAL-REQUEST-DATA-FORMAT": "JSON",
    "X-PAYPAL-RESPONSE-DATA-FORMAT": "JSON",
    "X-PAYPAL-APPLICATION-ID": "APP-80W284485P519543T"
    }

    data = {"scope":"EXPRESS_CKECKOUT", callback":"http://www.example.com/success.html", "requestEnvelope": {"errorLanguage":"en_US"}}
    req = urllib2.Request("https://svcs.sandbox.paypal.com/Permissions/RequestPermissions/", simplejson.dumps(data), urllib.urlencode(data), headers)    
    res = urllib2.urlopen(req).read()

1 个答案:

答案 0 :(得分:3)

"EXPRESS_CKECKOUT"而非"EXPRESS_CHECKOUT"中的拼写错误以及urllib.urlencode(data)的第三个参数urllib2.Request不是必需的。

data = {"scope":"EXPRESS_CHECKOUT", "callback":"http://www.example.com/success.html", "requestEnvelope": {"errorLanguage":"en_US"}}
req = urllib2.Request("https://svcs.sandbox.paypal.com/Permissions/RequestPermissions/", simplejson.dumps(data), headers)
res = urllib2.urlopen(req).read()