获取 SvelteKit 端点请求的原始正文

2024-03-10

我的 SvelteKit 应用程序中有一个端点,用于处理来自 Stripe 的 Webhook 请求。每个请求都经过签名,以便可以验证它是否来自 Stripe。

我必须验证该事件是否来自 Stripe 的代码如下所示:

import Stripe from "stripe";

const WEBHOOK_SECRET = process.env["STRIPE_WH_SECRET"];

const stripe = new Stripe(process.env["STRIPE_SECRET"], {
  apiVersion: "2020-08-27",
});

export async function post({ headers, body }) {
  let event: Stripe.Event;
  try {
    event = stripe.webhooks.constructEvent(
      body,
      headers["stripe-signature"],
      WEBHOOK_SECRET
    );
  } catch (err) {
    return {
      status: 400,
      body: err,
    };
  }

  // Do stuff with the event
}

但是当它收到来自 Stripe 的事件时,我收到此错误:

No signatures found matching the expected signature for payload. Are you passing the raw request body you received from Stripe? https://github.com/stripe/stripe-node#webhook-signing

经过一番研究,我发现正文被解析为 JSON这个功能 https://github.com/sveltejs/kit/blob/ad09981723b6daa536e68967583aa3a2e1554709/packages/kit/src/core/http/get_body/index.js#L4甚至之前SvelteKit 挂钩 https://kit.svelte.dev/docs#hooks被调用,这意味着没有办法直接获取原始主体,所以我决定最好的选择是尝试重建原始主体:

event = stripe.webhooks.constructEvent(
  JSON.stringify(body),
  headers["stripe-signature"],
  WH_SECRET
);

我不太确定why这不起作用,因为在挖掘之后Stripe库中的相关代码 https://github.com/stripe/stripe-node/blob/master/lib/Webhooks.js,它似乎可以很好地处理字符串。我最好的猜测是,在某些时候编码会变得混乱。

对此的任何帮助将不胜感激,因为我真的很想避免放弃 SvelteKit,因为我实际上已经用它完成了我的项目(回想起来,这不是一个好主意)。


这是在 Svelte Kit 中获取请求的原始正文的方法:

// routeName/+server.js
export async function POST({ request }) {
    const rawBody = await request.text()
    ...
}

我在处理 Stripe 和 Svelte Kit 时也发现了这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 SvelteKit 端点请求的原始正文 的相关文章

随机推荐

  • Java(机器人)屏幕截图超出可见范围

    我想立即截取比我的屏幕大的整个网站的屏幕截图 我知道如何使用 Robot 类来截取可见区域的屏幕截图 我认为这样做的一种方法是 启动浏览器 进入所需网站 启动我的程序 程序将截取可见区域的屏幕截图 程序将向下滚动以使页面的后半部分可见并截取
  • EF 4.1 Code First 和现有数据库以及 .NET 成员资格

    我的开发盒上有一个名为 ApplicationName Development 的数据库在 SQL Server 2008 R2 Developer 版本上运行 我将 NET 成员资格表添加到数据库中没有任何问题 当我尝试让 Code Fi
  • 我想删除 HTML 空白

    我有一个新问题困扰着我 我正在制作一个网页 我希望在不滚动的情况下进行修复 最重要的是我希望我的主 Div 填满我的所有可用空间 我做了这个代码
  • 是否允许类型相同但大小不同的双关数组?

    类型相同但大小不同的双关数组仍然违反严格别名吗 int arr 4 int ref 2 reinterpret cast
  • xcode 5 中的 Shell 脚本调用错误

    我在我的项目中使用 openssl 和 sqlcipher 我必须从 Xcode 4 6 升级到 Xcode 5 但是我在 Xcode 5 中编译项目 它给我错误 cp libCrypto a 没有这样的文件或目录 Cp libssl a
  • 用于匹配捕获组中前面或后面的字母字符的正则表达式

    举例来说 我有以下数据 ab cd ef zy ba cd 我希望能够以匹配第一个字符的方式来匹配它 然后根据第一个字符的捕获组匹配第二个字符 上面示例中的每一行都应该匹配 而类似cc or af不应该 详细来说 我的想法看起来像这样 基于
  • HTML img src 返回 404 未找到错误,尽管一切正常

    这是一件令人困惑的事情 首先看我的文件夹的层次结构等 https i stack imgur com b5U8a png并看到图像文件夹下有我的图像 cribbage png 我正在尝试使用 index html 中的以下代码访问此图像 h
  • 在 PostgreSQL 中连接

    我有一个带有宽度和高度 均为整数 的表格 我想按原样显示它 例如 宽度 300 高度 160 面积 300 x 160 我正在使用以下查询 select cast concat width x height as varchar 20 fr
  • 云形成的秘密

    我想坚持 所有基础设施都是代码 的政策 但是 我看不到使用 CloudFormation 来实现机密的方法 SecretsManager 要求您以纯文本形式指定 SecretString 即使您从某处注入解密的值 纯文本字符串也会显示在 C
  • NSIS - 检查注册表项值是否存在

    我需要检查注册表值是否存在 我怎样才能做到这一点 我的第一个方法 ReadRegStr 0 HKLM SOFTWARE Microsoft Windows NT CurrentVersion Ports NUL IF 0 MESSAGEBO
  • Pandas:“item”已被弃用

    到目前为止 我在这里使用了这行代码 max total gross event data max total gross loc event data event id event id item 自从我更新了 Pandas 后 我收到了未
  • MSBuild / Visual Studio 分布式构建

    我开发 维护一个需要很长时间才能构建的应用程序 例如 完整的构建需要超过六个小时 在花了一天的大部分时间构建我们的应用程序之后 我开始研究改进构建时间的方法 建议关于这个堆栈溢出问题 https stackoverflow com ques
  • JavaFX:在拖放过程中更改光标

    我试图在拖放过程中更改节点上的光标 但图像没有改变 我正在打电话setCursor in the DragDetectedEventHandler我的节点 我也尝试过打电话getParent setCursor 并得到相同的结果 我还尝试在
  • 未定义行为 (UB) 以实现余地为条件的程序是具有无条件 UB 的程序吗?

    在回答中 在 C 20 中使用 std bit cast 创建闭包 lambda 对象是否有效 https stackoverflow com questions 68828838 is it valid to create closure
  • Silverstripe 后端发生奇怪的行为?

    突然间 每当我尝试单击 silverstripe 后端中的页面时 它最初会显示如下 我正在运行 SS 3 2 当这种情况开始发生时 我升级到 3 2 1 看看是否可以解决问题 但不行 有时它也会显示此错误消息 User Warning Co
  • RecyclerView重叠无阴影

    我想开发像这张图这样的List 我曾经使用 RecyclerView ItemDecoration 进行重叠 但它是重叠的 没有阴影 屏幕和装饰器代码如下 public class OverlapDecoration extends Rec
  • 如何在html5视频上移动svg元素并同时控制视频播放?

  • 双花括号 ({{) 在 YAML 文件(Ansible 使用的)中意味着什么?

    我对 Ansible 相当陌生 并试图理解 YAML 文件 因为我不清楚这条线 file dest docroot 有人可以解释一下那些大括号 是做什么的吗 name Create Web Root when nginxinstalled
  • c++如何写构造函数?

    我不习惯 C 并且在编写构造函数时遇到问题 请参阅此示例 是我正在处理的代码的简短版本 class B public B int x class A public B b A here I have to initialize b 这会引发
  • 获取 SvelteKit 端点请求的原始正文

    我的 SvelteKit 应用程序中有一个端点 用于处理来自 Stripe 的 Webhook 请求 每个请求都经过签名 以便可以验证它是否来自 Stripe 我必须验证该事件是否来自 Stripe 的代码如下所示 import Strip