微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

条带订阅 checkout.session.completed 资源缺少 invalid_request_error 类型的错误

如何解决条带订阅 checkout.session.completed 资源缺少 invalid_request_error 类型的错误

我试图了解为什么 checkout.session.completed 的 webhook 在使用 Stripe CLI 本地测试时崩溃。我正在使用 djstripe。我的 customer.subscription.created 网络钩子成功了。使用 CLI 时,stripe trigger checkout.session.completed 命令出现以下错误

Request Failed,status=404,body={
  "error": {
    "code": "resource_missing","doc_url": "https://stripe.com/docs/error-codes/resource-missing","message": "No such payment_page: 'ppage_1Il33eAyVjQjzOsRERzYQSbK'","param": "payment_page","type": "invalid_request_error"
  }

是success url路由的问题吗? views.py

def create_checkout_session(request):
    """Create a checkout session for Stripe."""
    data = json.loads(request.body)
    priceId = data.get("priceId")
    if not Price.objects.filter(id=priceId).exists():
        messages.add_message(request,messages.ERROR,"That plan price is not available. Please contact support for help.",)
        return HttpResponseRedirect(reverse("users:index"))
    request.account = OrgMembership.objects.filter(my_identity=request.user).first()
    sessionId = stripegateway.create_checkout_session(priceId,request)
    return JsonResponse({"sessionId": sessionId})

stripegateway.py

class StripeGateway:
    """Gateway interacts with the APIs required by Stripe. Credit: Matt Layman"""
    def create_checkout_session(self,priceId,request):
        """Create a checkout session based on the subscription price."""
        site = Site.objects.get_current()
        subscription_success = reverse("users:success")
        stripe_cancel = reverse("users:stripe_cancel")
        request.account = OrgMembership.objects.get(my_identity=request.user.id)
        request.org = request.account.my_org
        # session_parameters = {
        #     "customer_email": request.org.billing_email,#     "success_url": f"http://{site}{subscription_success}",#     "cancel_url": f"https://{site}{stripe_cancel}",#     "payment_method_types": ["card"],#     "mode": "subscription",#     "line_items": [{"price": priceId,"quantity": 1}],#     "client_reference_id": str(request.account.id),# }
        # checkout_session = stripe.checkout.Session.create(**session_parameters)
        # return checkout_session["id"]
        checkout_session = stripe.checkout.Session.create(
            customer_email = request.org.billing_email,client_reference_id = str(request.account.id),payment_method_types=['card'],line_items=[{
                'price': priceId,'quantity': 1,}],mode='subscription',success_url=request.build_absolute_uri(reverse('users:success')) + '?session_id={CHECKOUT_SESSION_ID}',cancel_url=request.build_absolute_uri(reverse('users:index')),)
        return checkout_session["id"]

注释掉的部分是使用的原始代码,然后尝试替代以尝试解决问题。非常感谢任何指导。

解决方法

我遇到了同样的问题。 stripe trigger checkout.session.completed 将返回以下内容:

Trigger failed: Request failed,status=404,body={
  "error": {
    "code": "resource_missing","doc_url": "https://stripe.com/docs/error-codes/resource-missing","message": "No such payment_page: 'ppage_1IryQdFE8p8XoGx4OJLXOv4p'","param": "payment_page","type": "invalid_request_error"
  }
}

我通过将我的条带 CLI 版本从 v1.5.4 更新到 v1.5.14 修复了错误。

,

确保将 webhook 事件转发到正确且有效的端点。

使用 forward-to 命令行参数将 stripe-cli 指向您的开发服务器:

stripe listen \
--skip-verify \
--forward-to https://localhost:8000/payments/webhook/ \
--log-level debug

使用 HTTPS 端点时,自签名证书或其他无效证书需要 skip-verify。 Django 对 URL 末尾的斜线也很挑剔。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。