我正在尝试使用“数字商品支付”工作流程,因为我需要获得一个“付费密钥”,我将使用PayPal Lightbox,但该方法不接受我的请求。
这是我使用的代码(我只是隐藏了真正的API密钥):
import requests
h = {'X-PAYPAL-SECURITY-USERID': '******************',
'X-PAYPAL-SECURITY-PASSWORD': '****************',
'X-PAYPAL-SECURITY-SIGNATURE': '*************************************',
'X-PAYPAL-REQUEST-DATA-FORMAT': 'NV',
'X-PAYPAL-RESPONSE-DATA-FORMAT': 'NV',
'X-PAYPAL-APPLICATION-ID': 'APP-80W284485P519543T'}
d = """{'requestEnvelope.errorLanguage': 'en_US',
'actionType': 'PAY',
'receiverList.receiver(0).amount': '1.00',
'currencyCode': 'USD',
'feesPayer': 'EACHRECEIVER',
'memo': 'Simple payment example.',
'cancelUrl': 'http://your_cancel_url',
'returnUrl': 'http://your_return_url',
'ipnNotificationUrl': 'http://your_ipn_notification_url',
'receiverList.receiver(0).paymentType': 'DIGITALGOODS'}"""
r = requests.post('https://svcs.sandbox.paypal.com/AdaptivePayments/Pay', headers = h, data = d)
当我执行代码时,我收到此错误:
In [16]: r.text
Out[16]: u'responseEnvelope.timestamp=2013-07-02T02%3A52%3A53.685-07%3A00&responseEnvelope.ack=Failure&responseEnvelope.correlationId=ea6514b6f51a7&responseEnvelope.build=6520082&error(0).errorId=580001&error(0).domain=PLATFORM&error(0).subdomain=Application&error(0).severity=Error&error(0).category=Application&error(0).message=Invalid+request%3A+%7B0%7D'
我的代码出了什么问题?
答案 0 :(得分:1)
PayPal文档中的代码示例错误和/或不完整。我不得不自己猜测JSON帖子的结构。
正确的标题是:
h = {'X-PAYPAL-SECURITY-USERID': '***************',
'X-PAYPAL-SECURITY-PASSWORD': '***********',
'X-PAYPAL-SECURITY-SIGNATURE': '************************8',
'X-PAYPAL-REQUEST-DATA-FORMAT': 'JSON',
'X-PAYPAL-RESPONSE-DATA-FORMAT': 'JSON',
'X-PAYPAL-APPLICATION-ID': 'APP-80W284485P519543T'}
和正确的Python字典(在将其传递给POST之前进行jsonize)是这样的:
d = {'requestEnvelope' : {'errorLanguage' : 'en_US'},
'actionType': 'PAY',
'receiverList' : {
'receiver' : [
{'email' : '***************',
'amount' : 1.00,
'paymentType': 'DIGITALGOODS'}
],
},
'currencyCode': 'USD',
'feesPayer': 'EACHRECEIVER',
'memo': 'Simple payment example.',
'cancelUrl': 'http://your_cancel_url',
'returnUrl': 'http://your_return_url',
'ipnNotificationUrl': 'http://your_ipn_notification_url'}