【问题标题】:Digital goods payment: I keep getting invalid request数字商品付款:我不断收到无效请求
【发布时间】:2013-06-29 15:29:55
【问题描述】:

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

我的代码有什么问题?

【问题讨论】:

  • 请注意:我也尝试过 curl,但我得到了同样的错误。

标签: paypal


【解决方案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'}

【讨论】:

  • 非常感谢 - 您在将 Python dict 传递给 POST 之前对其进行 jsonizing 为我节省了一个需要花费大量时间来解决的问题! +1ed!
猜你喜欢
  • 2019-12-30
  • 2016-04-06
  • 2014-06-11
  • 1970-01-01
  • 2014-04-12
  • 2017-10-12
  • 2016-01-12
  • 2016-05-04
  • 2015-03-27
相关资源
最近更新 更多