Stripe Webhook 给我一个 308 重定向错误

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

enter image description here

我确实参考了stripe文档堆栈溢出

但是我在生产和开发中仍然遇到同样的问题。正如你所看到的,它用 308 重定向了我。

我当前的 webhook 端点格式如下所示:

https://mydomain.vercel.app/api/webhooks/stripe/

该网站托管在 vercel 上,我正在使用 nextjs。我还没有使用过 webhooks 或 stripe。这对我来说是全新的,并且已经被困在这里这么久了。

我也在使用 clerk webhook。这就是为什么我使用名为 webhooks 的父目录,它有两个子目录

/clerk/route.ts
/stripe/route.ts

这是我的

/api/webhooks/stripe
api 路线:

import Stripe from "stripe";
import { headers } from "next/headers";
import { NextResponse } from "next/server";
import { db } from "@/db";

export async function POST(req: Request) {
  const body = await req.text();
  const signature = headers().get("Stripe-Signature") as string;
  const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);

  let event: Stripe.Event;

  try {
    event = stripe.webhooks.constructEvent(
      body,
      signature,
      process.env.STRIPE_WEBHOOK_SECRET!
    );
  } catch (error: any) {
    console.error(error);
    return new NextResponse(`Webhook Error: ${error.message}`, { status: 400 });
  }

  const session = event.data.object as Stripe.Checkout.Session;

  const subscription = await stripe.subscriptions.retrieve(
    session.subscription as string
  );
  if (event.type === "charge.succeeded") {
    console.log("====================================");
    console.log("Charge succeeded");
    console.log("====================================");
  }
  if (event.type === "checkout.session.completed") {
    const subscription = await stripe.subscriptions.retrieve(
      session.subscription as string
    );

    await db.user.update({
      where: {
        id: session.client_reference_id as string,
      },
      data: {
        credits: {
          increment: 5,
        },
      },
    });
  }

  if (event.type === "payment_intent.payment_failed") {
    console.log("====================================");
    console.log("Payment failed");
    console.log("====================================");
  }

  if (event.type === "payment_intent.succeeded") {
    console.log("====================================");
    console.log("Payment succeeded");
    console.log("====================================");
  }

  if (event.type === "payment_intent.created") {
    console.log("====================================");
    console.log("Payment created");
    console.log("====================================");
  }

  if (event.type === "customer.created") {
    console.log("====================================");
    console.log("Customer created");
    console.log("====================================");
  }

  if (event.type === "invoice.payment_succeeded") {
    const subscription = await stripe.subscriptions.retrieve(
      session.subscription as string
    );
  }

  return new NextResponse(null, { status: 200 });
}

提前致谢:)

stripe-payments next.js13
1个回答
0
投票

当您在 Vercel 中添加域名时,您是否选择将 domain.com 重定向到 www.domain.com?如果是这样,在仪表板的 Webhook 部分中,您是否使用了 domain.com 或 www.domain.com 作为 URL。

总而言之,无论 Vercel 使用什么,Webhook 都需要使用

** 来自@royanger 在店员不和谐中的回答

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