0

我正在尝试使用“数字商品支付”工作流程,因为我需要获得一个将与 PayPal 灯箱一起使用的“支付密钥”,但该方法不接受我的请求。

这是我使用的代码(我只是隐藏了真正的 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'

我的代码有什么问题?

4

1 回答 1

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'}
于 2013-07-02T16:15:07.643 回答