【发布时间】:2021-02-04 20:45:52
【问题描述】:
我正在使用 Django 3.0、dj-stripe 2.0 和 Stripe CLI。 dj-stripe 为 Stripe webhook 提供原生支持,他们的文档说在我的 django 项目的主要 urls.py 文件中包含以下内容以公开 webhook 端点:
url(r"^stripe/", include("djstripe.urls", namespace="djstripe")),
我已经这样做了,但我现在如何利用端点?
作为一个单独的实验,我创建了一个payments 应用程序,设置了 URL conf,并在通过 Stripe CLI 触发非 dj-stripe webhook 端点时成功调用了视图。但它不使用任何dj-stripe 功能:
# project urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('stripe/', include("djstripe.urls", namespace="djstripe")),
path('payments/', include("payments.urls", namespace="payments")),
]
# payments/urls.py
from django.urls import path
from . import views
app_name="payments"
urlpatterns = [
path("", views.my_handler, name="my-handler"),
]
# payments/views.py
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def my_handler(request, **kwargs):
print(request.body)
return HttpResponse(status=200)
运行 stripe listen --forward-to localhost:8000/payments/ 并在单独的窗口中,stripe trigger product.created 返回 200 响应。
但是stripe listen --forward-to localhost:8000/stripe/webhook/ 和stripe trigger product.created 返回一个500。
提前感谢您的帮助。
[更新]
我没有修改默认的DJSTRIPE_WEBHOOK_URL 或DJSTRIPE_WEBHOOK_VALIDATION 设置。在settings.py 我有:
STRIPE_LIVE_PUBLIC_KEY = os.environ.get("STRIPE_LIVE_PUBLIC_KEY")
STRIPE_LIVE_SECRET_KEY = os.environ.get("STRIPE_LIVE_SECRET_KEY")
STRIPE_TEST_PUBLIC_KEY = os.environ.get("STRIPE_TEST_PUBLIC_KEY")
STRIPE_TEST_SECRET_KEY = os.environ.get("STRIPE_TEST_SECRET_KEY")
STRIPE_LIVE_MODE = os.environ.get("STRIPE_LIVE_MODE")
DJSTRIPE_WEBHOOK_SECRET = "*************************************"
测试密钥从env/bin/activate拉取:
export STRIPE_LIVE_PUBLIC_KEY="pk_live_****...."
export STRIPE_LIVE_SECRET_KEY="sk_live_****...."
export STRIPE_TEST_PUBLIC_KEY="pk_test_****...."
export STRIPE_TEST_SECRET_KEY="sk_test_****...."
export STRIPE_LIVE_MODE="False"
当我运行 stripe listen --forward-to localhost:8000/stripe/webhook/ 并触发 stripe trigger customer.created 时,我收到以下 500 错误:
stripe.error.InvalidRequestError: Request req_NTtzsTFS8uVdfL: No such customer; a similar object exists in test mode, but a live mode key was used to make this request.
但我不明白我的密钥是如何混淆的,因为当我触发相同的事件并通过 /payments/ 端点进行侦听时,webhook 工作正常。
再次感谢您的宝贵时间。
【问题讨论】:
标签: python django webhooks stripe-payments