问题描述
我正在使用Django 3.0,dj-stripe 2.0和Stripe CLI。 dj-stripe为Stripe Webhooks提供了本机支持,其文档说在我的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/',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/
端点进行侦听时,webhooks可以正常工作。
再次感谢您的时间。
解决方法
总而言之,您需要使用@webhooks.handler
装饰器来装饰处理程序函数。
在dj-stripe文档的webhooks section中有一些示例。