我正在尝试建立一个带条纹的网络钩子。 (第一次)
但是,似乎没有找到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 平台上提供的密钥匹配。
有什么想法吗?
在我看来,您在应用程序 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 放入网络浏览器中来轻松测试路由是否正常工作。