我尝试向Stripe API(一个支付API)发出请求,以获得API给出的json响应。我尝试了在Python课程中找到的以下代码,但由于API需要进行身份验证才能获得响应,我不知道如何在请求中添加这些数据。
在一个curl请求中将它制作成这样:
curl https://api.stripe.com/v1/checkout/sessions -u pk_test_51LoUz3BgfM0E8ZiCV8UO79gw8zw7fhSgHUEAVj4wS7igs5D4kKiNsxXGeKQEUhorImNUiCxCNNtidwNkhFPUHP4i0060lsvsbw: -d success_url="http://127.0.0.1:5500/pages/success.html" -d cancel_url="http://127.0.0.1:5500/pages/nosuccess.html" -d "line_items[0][price]"=price_1LvNRkBgfM0E8ZiCTSiaNvNL -d "line_items[0][quantity]"=1 -d mode=subscription -d client_reference_id="123" -d customer_email="email@email.com" -d client_reference_id="tokenized" -d phone_number_collection["enabled"]=true
这将在您的条带帐户中创建一个新的 checkout 会话,响应是一个包含 checkout 会话信息的json。
我在curl请求中使用的授权是publishable_key的“-u”值,后跟":“,这意味着不需要密码
但是当我尝试用Python编写时,我得到了以下错误:
Traceback (most recent call last):
File "/home/pau/Desktop/bsnbl/Backend/borrar.py", line 17, in <module>
respuesta = urllib.request.urlopen(request)
File "/usr/lib/python3.8/urllib/request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.8/urllib/request.py", line 531, in open
response = meth(req, response)
File "/usr/lib/python3.8/urllib/request.py", line 640, in http_response
response = self.parent.error(
File "/usr/lib/python3.8/urllib/request.py", line 569, in error
return self._call_chain(*args)
File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain
result = func(*args)
File "/usr/lib/python3.8/urllib/request.py", line 649, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 401: Unauthorized
Python代码:
import urllib.request
import json
# Debido a cambios en la libreria ahora se deben pasar algunos cabeceros html
paymentInfo = '-u pk_test_51LoUz3BgfM0E8ZiCV8UO79gw8zw7fhSgHUEAVj4wS7igs5D4kKiNsxXGeKQEUhorImNUiCxCNNtidwNkhFPUHP4i0060lsvsbw: -d success_url="http://127.0.0.1:5500/pages/success.html" -d cancel_url="http://127.0.0.1:5500/pages/nosuccess.html" -d "line_items[0][price]"=price_1LvNRkBgfM0E8ZiCTSiaNvNL -d "line_items[0][quantity]"=1 -d mode=subscription -d client_reference_id="123" -d customer_email="abrix07@gmail.com" -d client_reference_id="tokenized" -d phone_number_collection["enabled"]=true'
res = bytes(paymentInfo,'utf-8')
print(str(type(res)))
request = urllib.request.Request(
'https://api.stripe.com/v1/checkout/sessions',
data=res,
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}
)
respuesta = urllib.request.urlopen(request)
print('1. ',respuesta)
cuerpo_respuesta = respuesta.read()
print(cuerpo_respuesta)
#Procesamos la respuesta json
json_respuesta = json.loads(cuerpo_respuesta.decode("utf-8"))
print(json_respuesta)
为了安全起见,我正在使用Stripe帐户的可发布密钥,如果您尝试使用可发布的代码,它将要求您提供密钥,我不能在这里给予密钥。不便之处,敬请原谅
3条答案
按热度按时间5ktev3wc1#
请尝试以下代码:
还要检查,你的价格是经常性的
如果您喜欢使用“urllib”,可以使用以下代码:
wz8daaqr2#
使用
urllib
模块时,您需要在请求中设置Authorization
头,以根据Stripedocumentation添加API密钥。zdwk9cvp3#
我在这个链接中找到了Python API:https://stripe.com/docs/api/checkout/sessions/create?lang=python
默认情况下,它显示为curl,但当您添加lang=python时,就会得到python API代码