数字商品付款:我一直收到无效请求

时间:2013-07-02 09:58:44

标签: paypal

我正在尝试使用“数字商品支付”工作流程,因为我需要获得一个“付费密钥”,我将使用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'

我的代码出了什么问题?

1 个答案:

答案 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'}