0

一旦 checkout.session.completed 事件完成,我正在尝试控制台记录 Stripe customerID。但我收到此 400 状态代码错误“无法从标头中提取时间戳和签名”。我似乎无法找到将 Stripe 客户 ID 写入控制台日志的解决方案。

任何帮助或指针表示赞赏。这是我的代码:

const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

exports.handler = async ({ body, headers }) => {
  try {
    const stripeEvent = stripe.webhooks.constructEvent(
      body,
      headers['stripe-signature'],
      process.env.STRIPE_WEBHOOK_SECRET
    );

    if (stripeEvent.type === 'checkout.session.completed') {
      const eventObject = stripeEvent.data.object;
      const customerID = eventObject.customer;
      console.log(customerID);
      console.log(headers);
    }
    return {
      statusCode: 200,
      body: JSON.stringify(customerID),
    };
  } catch (err) {
    console.log(`Stripe webhook failed with ${err}`);
    return {
      statusCode: 400,
      body: `Webhook Error: ${err.message}`,
    };
  }
};

当我按照注释中的建议控制台记录标题时,请在终端中获取此信息: 控制台日志(标题)

我现在可以在终端中看到客户 ID (cus_JOqbW95ulF3zx0),但我需要将其记录为 customerID 吗?当终端说 customerID 未定义时。

4

1 回答 1

0

我能够弄清楚。我在 IF 语句之后的返回是 400 状态代码错误的原因。customerID 显示在控制台中,我将正文统计代码中的返回更改为字符串“成功”。

const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

exports.handler = async ({ body, headers }) => {
  try {
    const stripeEvent = stripe.webhooks.constructEvent(
      body,
      headers['stripe-signature'],
      process.env.STRIPE_WEBHOOK_SECRET
    );

    if (stripeEvent.type === 'checkout.session.completed') {
      const eventObject = stripeEvent.data.object;
      const customerID = eventObject.customer;
      console.log(customerID);
    }
    return {
      statusCode: 200,
      body: 'success',
    };
  } catch (err) {
    console.log(`Stripe webhook failed with ${err}`);
    return {
      statusCode: 400,
      body: `Webhook Error: ${err.message}`,
    };
  }
};
于 2021-05-04T17:05:28.917 回答