Stripe Webhook 错误:未找到与负载的预期签名匹配的签名

2023-11-23

我正在使用 Stripe 提供的代码来测试 webhook。 Stripe 机密和端点机密已经过三次检查。

条纹版本:6.19 正文解析器:1.19

当我在 Stripe 仪表板上测试 webhook 时,得到结果:(Test webhook error: 400) No signatures found matching the expected signature for payload. Are you passing the raw request body you received from Stripe?

任何帮助,将不胜感激。

var bodyParser - require('body-parser');


// Using Express
const app = require('express')();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());


// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
const stripe = require('stripe')('sk_test_VPw...');

// Find your endpoint's secret in your Dashboard's webhook settings
const endpointSecret = 'whsec_...';


// Use body-parser to retrieve the raw body as a buffer
const bodyParser = require('body-parser');

// Match the raw body to content type application/json
app.post('/webhook', bodyParser.raw({type: 'application/json'}), (request, response) => {
  const sig = request.headers['stripe-signature'];

  let event;

  try {
    event = stripe.webhooks.constructEvent(request.body, sig, endpointSecret); //NOT WORKING!
  } catch (err) {
    return response.status(400).send(`Webhook Error: ${err.message}`);
  }

  // Handle the checkout.session.completed event
  if (event.type === 'checkout.session.completed') {
    const session = event.data.object;

    // Fulfill the purchase...
    handleCheckoutSession(session);
  }

  // Return a response to acknowledge receipt of the event
  response.json({received: true});
});

通常,这是由于您在检查签名之前解析或修改了原始请求字符串(因此签名是根据修改后的字符串计算的,而不是根据 Stripe 发送的确切字符串计算的)。在本例中,JSON Express 中间件似乎正在执行以下操作:app.use(express.json());.

条纹有一个例子在 webhook 端点上使用原始 bodyParser 中间件,以便您的代码获取所需的原始字符串:

// Use JSON parser for all non-webhook routes
app.use((req, res, next) => {
  if (req.originalUrl === '/webhook') {
    next();
  } else {
    express.json()(req, res, next);
  }
});

// Stripe requires the raw body to construct the event
app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => {
  const sig = req.headers['stripe-signature'];

  let event;

  try {
    event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);
  } catch (err) {
    // On error, log and return the error message
    console.log(`❌ Error message: ${err.message}`);
    return res.status(400).send(`Webhook Error: ${err.message}`);
  }

  // Successfully constructed event
  console.log('✅ Success:', event.id);

  // Return a response to acknowledge receipt of the event
  res.json({received: true});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Stripe Webhook 错误:未找到与负载的预期签名匹配的签名 的相关文章

随机推荐

  • Android TTS 无法在设备中运行

    TextToSpeech 就像 http developer android com resources samples ApiDemos src com example android apis app TextToSpeechActiv
  • 时间日历数据结构

    我们正在考虑更新 重写 我们的系统 该系统存储有关人们白天何时可以预订房间等信息 现在 我们将开始时间和房间可用的日期存储在一个表中 并在另一个表中存储各个预约时间 从表面上看 以这种方式存储信息似乎是一个合乎逻辑的想法 但随着时间的推移和
  • Angular 2 - 无法使用上下文读取未定义错误的属性“0”错误上下文:[object Object]

    我的服务是这样的 getRecords Observable
  • 有人有 ffmpeg 图像转视频脚本吗? [复制]

    这个问题在这里已经有答案了 我想拍摄一堆图像并用它们制作视频幻灯片 会有一个应用程序可以做到这一点 对吗 是的 看起来不少 问题是我希望幻灯片与一段音乐同步 而我见过的所有应用程序只允许您显示每张幻灯片整秒的倍数 我希望它们显示 1 714
  • 从另一个表单调用方法

    我尝试从另一种形式调用方法 我的尝试 public partial class newLedPopUp Form Form1 back new Form1 back output Close and public partial class
  • 使用 HTTPStatusCodeResult 和 jQuery 自定义错误消息

    我有一个控制器操作 它将一些 JSON 结果返回到 jQuery Full Calendar 插件 我返回一个HTTPStatusCodeResult如果出现错误 则会显示自定义错误消息 但我无法显示自定义错误消息 警报框中显示的只是默认的
  • 如何将V8编译的javascript变成EXE?

    我知道谷歌的 v8 将 javascript 编译为本机代码 如果我理解正确的话 是二进制 有没有办法获取输出并将其转换为exe 我不认为您可以使用 V8 直接将一段 JavaScript 转换为可执行文件 但您可能可以制作一个将 V8 引
  • 更新深层 ReactJS 状态

    我在 ReactJS 组件状态中有一个项目数组 我正在迭代这些项目来创建表单 我的问题是 当字段发生变化时 如何最好地更新这些项目 例如 var items this state foo bar items map function ite
  • 从 Axios API 返回数据[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Node JS 应用程序来发出和接收 API 请求 它使用 Axios 向另一台服务器发出 get 请求 并使用从 API 调用接收到的数据 第二个片段是脚本从调用返回数据时的情况 它实际上会获取
  • Sprockets::FileNotFound:在 Rails 4 上找不到文件“jquery.ui.all”

    Sprockets FileNotFound couldn t find file jquery ui all 我尝试了迄今为止找到的所有建议 它们都不适合我 我无法再运行正在开发的程序 因此我无法再在线进行新的部署 Gemfile sou
  • find()、findOrFail()、first()、firstOrFail()、get()、list()、toArray() 之间有什么区别

    这些方法有什么区别 find findOrFail first firstOrFail get list toArray 我一直在使用它们 每一个都会给出不同的结果 有时我需要添加toArray 在 的最后get 因为我的函数需要一个数组
  • 安装多处理 python3

    对 Python 来说还很陌生 我想安装 python 的多处理模块 我正在使用 python 3 6 和 pip 版本 9 1 我收到一个错误 这让我相信由于没有与 python 3 兼容的多处理模块 因此可能会发生以下错误 pip3 i
  • 类型 '{ [x: string]: string; 中缺少属性}'

    在这个反应应用程序中有一个带有一些输入字段的表单 这些字段都使用this handleChange与onChange属性 private handleChange event React FormEvent
  • 保证金最高百分比是如何计算的?

    我知道这应该很简单 但是任何人都可以告诉我为什么下面的子框在以下情况下会溢出其父级的容器 margin top 50 应用于孩子身上 保证金最高百分比是如何计算的 container background lightblue padding
  • 正确使用 HTTP 错误代码。 550 - 为什么是 5xx 而不是 4xx?

    今天 当用户没有权限时 一位同事在删除操作中使用了 550 错误 乍一看这对我来说很糟糕 因为据我所知 这种错误对我来说看起来像是客户端 又名 4xx 错误而不是服务器 又名 5xx 当查看描述时 它完全表明它被正确使用 而不是 401 错
  • 使用 HTML5 Canvas 进行图像处理和纹理映射?

    在我正在开发的 3D 引擎中 我成功地绘制了 3D 立方体 就我而言 填充侧面的唯一方法是使用纯色或渐变 为了让事情变得更令人兴奋 我真的很想使用简单的位图来实现纹理映射 关键是我几乎找不到任何关于 JavaScript 图像处理主题的文章
  • Python 使用“quoted-printable”传输编码和“utf-8”内容编码发送电子邮件

    蟒蛇的email mime倾向于使用编码base64 or 7bit and us ascii 我想用quoted printable and utf 8因为这对于人类来说更容易阅读和调试 目前 我的电子邮件看起来像 61353500484
  • Python setup.py 调用 makefile 不包含二进制文件

    一些上下文 我有一些 C 代码 编译后我可以在终端中调用 如下所示 my excec params它生成一些我在 python 中使用的文件来生成图表和其他内容 我想将所有内容打包到 python 库中 包括 C 代码和 python 代码
  • 将事件处理程序添加到新创建的元素

    我正在尝试将新元素添加到有序列表中 并带有删除链接 list ol append li label a href remove a li 但这不起作用 a href remove on click function event alert
  • Stripe Webhook 错误:未找到与负载的预期签名匹配的签名

    我正在使用 Stripe 提供的代码来测试 webhook Stripe 机密和端点机密已经过三次检查 条纹版本 6 19 正文解析器 1 19 当我在 Stripe 仪表板上测试 webhook 时 得到结果 Test webhook e