新手在這里。我正在使用燒瓶處理 Stripe 支付方式,它在我的本地機器上運行良好,但是當我在服務器上部署我的代碼并在條帶儀表板中監聽 webhook 事件時,我收到此錯誤“沒有找到符合預期的簽名有效載荷的簽名“。已經嘗試了很多解決方案,但沒有任何效果。任何幫助將不勝感激。
def webhook_received(self, user_id):
payload = request.data
endpoint_secret = 'my_secret_key'
sig_header = request.headers.get('stripe-signature')
try:
event = stripe.Webhook.construct_event(
json.loads(payload), sig_header, endpoint_secret
)
data = event['data']
except Exception as e:
return str(e)
event_type = event['type']
if event_type == 'checkout.session.completed':
self.handle_checkout_session(data, user_id)
elif event_type == 'invoice.paid':
pass
uj5u.com熱心網友回復:
好的,我想我看到了問題,但我會嘗試涵蓋這兩個潛在問題。
(最有可能):Stripe 需要原始的、未修改的請求正文來形成 webhook 簽名。在您
try:使用的塊中json.loads(payload),它將其轉換為 Pythondict物件。嘗試改用原始payload資料。如果問題僅在您將代碼部署到遠程服務器時出現,那么最可能的問題是
endpoint_secret值。我會在您的webhook_received()函式中添加一些日志記錄以在加載后記錄值,并確保該值與您可以在 Stripe 儀表板中查看的 webhook 簽名密鑰匹配。
最后,回傳正確的回應以避免 webhook 傳遞重試很重要。我知道 Flask 隱含地做了一些事情(我的一個小毛病),但我沒有看到這里回傳一個200或500回應。您需要確保做出適當的反應,以免日后頭疼。您可以在此處查看最佳實踐。這里還有一個方便的 webhook 構建器,因此您可以對照 Stripe 的 Flask 代碼檢查您的實作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405687.html
標籤:
