Stripe cancel url 不取消支付,所以stripe不发送cancel payintent

Stripe cancel url does not cancel the payment, so stripe does not send a cancel payintent

我正在使用 stripe 和 node js 进行支付,我正在创建一个会话并使用 stripe 结账界面。我正在使用 webhook 来监听事件,当付款创建或成功时,条带发送 payment_intent.succeeded 所以我用它做一些事情。但问题是当我点击取消 url 取消付款时,stripe 不会取消付款或发送 payment_intent.canceled 这是一个问题,因为那时我不知道付款是否取消了并且我不能做我计划做的事。这是我的代码:

// This will share the stripe publickey with the frontend
const webhook = async (req, res) => {
  // Signature verification
  const playload = req.body;
  const sig = req.headers["stripe-signature"];
  const endpointSecret = process.env.STRIPE_WEBHOOK_SECRET;

  let event;

  try {
    // Checking if the response is actually from stripe
    event = stripe.webhooks.constructEvent(playload, sig, endpointSecret);
  } catch (error) {
    console.log(error.message);
    res.status(400).json({ success: false });
    return;
  }

  // Getting the ad id
  const adID = event.data.object.metadata.id;
  const userEmail = event.data.object.metadata.email;

  // Checking if the payment did faile
  if (
    event.type === "payment_intent.canceled" ||
    event.type === "charge.failed" ||
    event.type === "charge.expired"
  ) {
    const paymentIntent = event.data.object;
    console.log(`PaymentIntent ${paymentIntent.status}`);

    // Sending the deleting request
    await axios.delete(`${process.env.SERVER_URL}/api/v1/single-ad`, {
      data: { id: adID, email: userEmail },
    });

    return res.status(200).json({ message: "Ad is successfully deleted" });
  }

永远不会执行 if 语句,因为如果取消付款,stripe 不会发回任何东西。

CheckoutSession 上的 cancel_url 字段不会自动取消与 CheckoutSession 关联的 PaymentIntent。

因此,预计不会发生这种情况:

But the problem is when I click on the cancel url to cancel the payment, stripe does not cancel the payment or send a payment_intent.canceled

cancel_url 用于如果客户按下结帐页面右上角的“后退”按钮,取消付款页面。因此,这将是您指定用于吸引客户的网站的 URL。

即使在导航到 cancel_url 之后,CheckoutSession 仍然可用(直到它手动过期或默认情况下在创建后 24 小时过期)或者您的代码取消了底层的 PaymentIntent。