使用Python请求连接PayPal

0 投票
3 回答
1577 浏览
提问于 2025-04-18 18:12

我正在尝试使用requests模块来进行PayPal的OAuth认证,但不知为什么,客户端ID被当作键,而密钥却被当作值。

请告诉我哪里出错了?

r = requests.post('https://api.sandbox.paypal.com/v1/oauth2/token',data={'Ae19ErLh':'EHRcOhCsBUqgNQgp5-','grant_type':'credentials','content-type':'application/x-www-form-urlencoded'})]


>>> r.content
'{"error":"invalid_client","error_description":"Invalid client credentials"}'

3 个回答

0

这个问题虽然老旧,但对于那些需要在Python / Django中访问PayPal API的人来说,还是很有用的:

import requests
from django.conf import settings

...

headers = {"Accept": "application/json",
           "Accept-Language": "en_US"}

data = {"grant_type":"client_credentials"}

req = requests.post('https://api-m.sandbox.paypal.com/v1/oauth2/token',
                   headers = headers,
                   data = data,
                   auth=(settings.PAYPAL_CLIENT_ID, settings.PAYPAL_SECRET))

req_json = req.json()

#use this for the API requests
paypal_token = req_json["access_token"]
0

我觉得PayPal的SDK库会拉取一些不必要的依赖包,比如:

libssl-dev

libffi-dev

安装这些包可能需要管理员权限,但并不是每个开发者都有这个权限。

我认为,为了让代码更便于移植和维护,最好使用Python自带的工具,这样可以避免将来出现麻烦。而且你可能在其他地方也会需要用到同样的requests库。

一般来说,你需要调整的内容是发送:

grant_type - 作为参数。

'Accept': 'application/json', 'Accept-Language': 'en_US', 'content-type': 'application/x-www-form-urlencoded' - 作为请求头。

另外,你还需要进行身份验证。

请求可能看起来像这样:

requests.post(paypal_url, headers = headers, params = params, auth = HTTPBasicAuth(paypal_userid, paypal_secret))

我为自己写的一个函数和详细的例子可以在这里找到。

0

这些应该是标题,而不是数据。

不过,有一个用于Paypal API的Python库,使用起来可能会更简单。

撰写回答