我正在嘗試向 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 protected]" -d client_reference_id="tokenized" -d phone_number_collection["enabled"]=true
這將在您的條帶帳戶中創建一個新的結帳會話,并且回應是一個帶有結帳會話資訊的 json。
我在 curl 請求中使用的授權是可發布密鑰的“-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="[email protected]" -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 帳戶的可發布密鑰的問題,如果您嘗試使用可發布代碼的代碼,它會要求您提供密鑰,我無法在此處提供。帶來不便敬請諒解
uj5u.com熱心網友回復:
使用該urllib模塊,您需要根據 Stripe檔案Authorization在您的請求中設定標頭以添加 API 密鑰。
request = urllib.request.Request('https://api.stripe.com/v1/checkout/sessions',
data=res,
headers={
'Authorization: Bearer sk_xxx'
}
}
uj5u.com熱心網友回復:
我在此鏈接中找到了 Python API: https ://stripe.com/docs/api/checkout/sessions/create?lang=python
默認情況下它顯示為 curl 但是當您添加 lang=python 時,您將獲得 python API 代碼
uj5u.com熱心網友回復:
試試這個代碼:
from requests import post
response = post(url='https://api.stripe.com/v1/checkout/sessions', headers={
'Authorization': 'bearer pk_test_51LoUz3BgfM0E8ZiCV8UO79gw8zw7fhSgHUEAVj4wS7igs5D4kKiNsxXGeKQEUhorImNUiCxCNNtidwNkhFPUHP4i0060lsvsbw',
}, data={
'success_url': 'http://127.0.0.1:5500/pages/success.html',
'cancel_url': 'http://127.0.0.1:5500/pages/nosuccess.html',
'line_items[0][price]': 'price_1LvNRkBgfM0E8ZiCTSiaNvNL',
'line_items[0][quantity]': 1,
'mode': 'subscription',
'client_reference_id': '123',
'customer_email': '[email protected]',
'phone_number_collection[enabled]': True
})
print(response)
print(response.json())
還要檢查您的價格是否經常出現
如果您更喜歡使用“urllib”,則可以使用以下代碼:
import urllib.request
import urllib.parse
import json
# Debido a cambios en la libreria ahora se deben pasar algunos cabeceros html
res = urllib.parse.urlencode({
'success_url': 'http://127.0.0.1:5500/pages/success.html',
'cancel_url': 'http://127.0.0.1:5500/pages/nosuccess.html',
'line_items[0][price]': 'price_1LvNRkBgfM0E8ZiCTSiaNvNL',
'line_items[0][quantity]': 1,
'mode': 'subscription',
'client_reference_id': '123',
'customer_email': '[email protected]',
'phone_number_collection[enabled]': True
})
print(str(type(res)))
request = urllib.request.Request(
'https://api.stripe.com/v1/checkout/sessions',
data=res.encode('ascii'),
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',
'Authorization': 'bearer pk_test_51LoUz3BgfM0E8ZiCV8UO79gw8zw7fhSgHUEAVj4wS7igs5D4kKiNsxXGeKQEUhorImNUiCxCNNtidwNkhFPUHP4i0060lsvsbw',
'Content-Type': 'application/x-www-form-urlencoded'
}
)
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/527158.html
上一篇:如何將PHP中的cURLPOST請求轉換為GoogleApps腳本
下一篇:cURL請求-未經授權
