0

我正在尝试重新创建此页面上可用的示例

当然,我正在使用我的有效数据更改 client_id、secret、信用卡等(我没有按原样复制粘贴示例)。

你可以在这里看到我的完整代码(我用* **隐藏了敏感数据)。

我可以毫无问题地获得令牌,但是当我发布付款请求时,我得到了这个:

In [11]: r2.text
Out[11]: u'{"name":"MALFORMED_REQUEST","message":"The request JSON is not well formed.","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST","debug_id":"*************"}'

我真的不明白为什么它说我的 json 格式不正确 :( 任何人都可以帮助我吗?谢谢!

4

2 回答 2

7

这是你的代码:

post_data = json.loads(s)

r2 = requests.post('https://api.sandbox.paypal.com/v1/payments/payment', headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token}, 
    data = post_data)

您有一个 JSON 字符串s,您将其转换为 Python 对象并将其发布到服务器。正如文档所说,如果您将 adict作为您的传递data,它将获得表单编码,而不是 JSON 编码。如果您想要任何其他格式的数据,您应该自己对其进行编码,如示例中所示:

>>> r = requests.post(url, data=json.dumps(payload))

由于您已经有了 JSON 编码的字符串s,您可以发送它。

于 2013-06-27T09:01:12.110 回答
2

您完全误解了应该传递给requests.post()方法的内容。http://docs.python-requests.org/en/latest/user/quickstart.html#more-complicated-post-requests

您正在尝试传递 Python 对象而不是 JSON。@Janne 的答案是一个选项,但将数据构建为 Python 对象然后使用json.dumps(obj)并将结果传递给requests.post().

于 2013-06-27T09:05:03.193 回答