我只是在官方的条纹文档中复制了关于基本网络挂钩使用的代码,但它一直向我抛出相同的错误.唯一可以看到我更改的是,我使用的是rawBody.json()中间件,而不是exts.json()中间件,我这样做是因为文档中写着"如果您使用的是Express v4-v4.16,则需要使用正文解析器而不是EXPRESS来检索请求正文".复制的代码可以在文档中找到,但我将其附加在这里,以防我遗漏了什么.该错误是一个400 Bad请求,其描述为:"WebHook错误:WebHook有效负载必须以字符串或缓冲区的形式提供"

dotenv.config()

const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY)

const app = express()

app.use(morgan("dev"))

app.use(
  cors({
    origin: process.env.ORIGIN,
    credentials: true,
    optionsSuccessStatus: 200,
  })
)

app.post("/webhook", bodyParser.json(), (request, response) => {
  const payload = request.body
  const sig = request.headers["stripe-signature"]

  let event

  try {
    event = stripe.webhooks.constructEvent(
      payload,
      sig,
      process.env.STRIPE_ENDPOINT_SECRET
    )

    if (event.type === "checkout.session.completed") {
      console.log("Session completed successfully")
    }
  } catch (err) {
    return response.status(400).send(`Webhook Error: ${err.message}`)
  }

  response.status(200).end()
})

app.use(cookieParser())

app.use(express.json({ limit: "50mb" }))

//Rest of endpoints

推荐答案

你可以试着用express.raw({ type: 'application/json' }).

const express = require('express');

app.post("/webhook", express.raw({ type: 'application/json' }), (request, response) => {
  const payload = request.body
  const sig = request.headers["stripe-signature"]

  let event

  try {
    event = stripe.webhooks.constructEvent(
      payload,
      sig,
      process.env.STRIPE_ENDPOINT_SECRET
    )

    if (event.type === "checkout.session.completed") {
      console.log("Session completed successfully")
    }
  } catch (err) {
    return response.status(400).send(`Webhook Error: ${err.message}`)
  }

  response.status(200).end()
})

以下是在条带上使用网络挂钩的github个示例

Node.js相关问答推荐

从目录中获取所有文件,而不是NodeJS中的单个文件

Webpack:如何避免导出函数的重命名?

如何发送比特币BTC使用发送加密使用WIF密钥在 node ,js

Axios TypeError:将循环 struct 转换为 JSON

与诗乃一起嘲笑奈克斯

nyc 代码覆盖不适用于 NodeJs Express 服务器

Nodejs 从链接数组中获取数据并保存到 mongodb

多个 Axios 请求合并

在 Express.js 中迭代子文档数组

AJAX 和 Node JS:在我的服务器中接收空数据

在安装 tensorflow 时遇到问题

如何限制 cron 表单将消息推送到 RabbitMQ?

如何以编程方式检测nodejs中的调试模式?

在 express 中添加故意延迟

如何为 node.js 服务器分配域名?

处理快速异步中间件中的错误

yarn 和 npm 的主要区别是什么?

expressjs app.VERB 调用中的 next() 和 next('route') 有什么区别?

如何断言不为空?

Firestore:多个条件 where 子句