使用Python请求连接PayPal
我正在尝试使用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库,使用起来可能会更简单。