You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JSON JQ表达式手动验证Stripe Webhook签名及排障

Stripe Webhook签名验证JQ表达式(适配Workato/Dellboomi/Celigo)

核心验证逻辑说明

Stripe Webhook签名验证依赖三个核心要素:

  • Stripe Webhook签名密钥(格式为whsec_xxx,从Stripe控制台获取)
  • 请求头中的Stripe-Signature值
  • 未被修改的完整原始请求体字符串

适配Workato的JQ表达式

Workato中通过raw_body获取原始请求体,headers."stripe-signature"获取签名头,替换YOUR_WEBHOOK_SECRET为实际密钥:

(.headers."stripe-signature" | capture("t=(?<t>[^,]+),v1=(?<v1>[^,]+)")) as $sig_data
| ($sig_data.t + "." + .raw_body) as $signing_string
| (hmac-sha256($signing_string; "YOUR_WEBHOOK_SECRET") | tobase64) == $sig_data.v1

注意:需确保Workato未自动解析请求体,保留原始字符串格式,否则签名计算会失效。

适配Dellboomi的JQ表达式

Dellboomi中通过$inboundRequest.getHeaders().get("Stripe-Signature")获取签名头,$inboundRequest.getRawPayload()获取原始请求体,替换密钥后使用:

($inboundRequest.getHeaders().get("Stripe-Signature") | capture("t=(?<t>[^,]+),v1=(?<v1>[^,]+)")) as $sig_data
| ($sig_data.t + "." + $inboundRequest.getRawPayload()) as $signing_string
| (hmac-sha256($signing_string; "YOUR_WEBHOOK_SECRET") | tobase64) == $sig_data.v1

注意:需在Dellboomi入站配置中禁用自动Payload解析,保证原始请求体完整性。

适配Celigo的JQ表达式

Celigo中通过request.headers["stripe-signature"]获取签名头,request.rawBody获取原始请求体:

(request.headers["stripe-signature"] | capture("t=(?<t>[^,]+),v1=(?<v1>[^,]+)")) as $sig_data
| ($sig_data.t + "." + request.rawBody) as $signing_string
| (hmac-sha256($signing_string; "YOUR_WEBHOOK_SECRET") | tobase64) == $sig_data.v1

注意:Celigo默认可能解析请求体,需在集成配置中设置保留原始请求体,避免格式转换导致签名不匹配。

401错误排查要点

  • 确认Webhook密钥与Stripe控制台配置完全一致,无多余空格或字符
  • 检查集成平台是否修改了原始请求体(如自动格式化JSON、增减字段)
  • 确认Stripe-Signature请求头未被代理或网关篡改,完整传递到验证环节

内容的提问来源于stack exchange,提问作者sujay777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:09:57