Django / Stripe - 未找到 Webhook

问题描述 投票:0回答:1

我正在尝试建立一个带条纹的网络钩子。 (第一次)

但是,似乎没有找到webhook的路径。

希望有人能够带来一双新的眼睛并告诉我我做错了什么。

在我的urls.py(项目级别)

urlpatterns = [

    path('my_app/', include('my_app.urls')),
    ...
]

在 urls.py 应用级别:

urlpatterns = [
    ..
    path('stripe_webhook/', views.stripe_webhook, name='stripe_webhook')
]

在我的views.py(my_app级别)中:

@csrf_exempt
def stripe_webhook(request):
    print("enter webhook")
    stripe.api_key = settings.STRIPE_SECRET_KEY_TEST
   
    payload = request.body
    signature_header = request.META.get('HTTP_STRIPE_SIGNATURE')
    webhook_secret = settings.STRIPE_WEBHOOK_SECRET_TEST
    ...

在条纹中,我在本地听众中注册了:

localhost:8000/stripe_webhook/

如果我跑步

stripe trigger customer.created
。我收到以下信息:

A newer version of the Stripe CLI is available, please update to: v1.22.0
Setting up fixture for: customer
Running fixture for: customer
Trigger succeeded! Check dashboard for event details.

但是,同时运行

stripe listen --forward-to localhost:8000/stripe_webhook/
,我还收到以下日志:

> Ready! You are using Stripe API Version [2024-09-30.acacia]. Your webhook signing secret is XXXXX (^C to quit)
2024-12-05 22:27:54   --> customer.created [xxx]
2024-12-05 22:27:54  <--  [404] POST http://localhost:8000/stripe_webhook/ [xx]

我的服务器日志也将返回(无论是在生产中还是本地):

Not Found: /stripe_webhook/

这让我认为我的 webhook 的路径配置不正确,但我看不到任何我可能错过的东西。 Stripe 平台上有什么东西我忘记了吗?

注意:.env 文件中的所有密钥(

STRIPE_PUBLIC_KEY_TEST
STRIPE_SECRET_KEY_TEST
STRIPE_WEBHOOK_SECRET_TEST
)都与 Stripe 平台上提供的密钥匹配。

有什么想法吗?

django stripe-payments webhooks
1个回答
0
投票

在我看来,您在应用程序 URL 前面加上了

my_app/
,所以我希望它出现在最终 URL 中。 我与 Stripe 有着长期(3 年以上)的集成,当我检查我的根
urls.py
文件时,我发现我的主应用程序 URL 已指定为这样

path('', include('payments.urls')),

这避免了需要包含应用程序前缀,因此

localhost:8000/webhooks/
对我有用。

既然您指定了

my_app/
,您应该尝试
localhost:8000/my_app/stripe_webhook
。 您可以使用 CLI 触发 Webhook 事件,以便检查其是否有效。

我喜欢使用的另一种方法是在我的 webhook 函数中添加 API 方法检查,并使用类似

<h1>Hello Webhook!</h1>
的内容响应 GET 请求。 像这样的东西:

@csrf_exempt
def stripe_webhook(request):
   if request.method == "GET":
      # Respond with webpage indicating success
   else:
      # Do webhook-y stuff here

这样,您可以通过将 URL 放入网络浏览器中来轻松测试路由是否正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.