SuperAPI AI 工具集

volume-webhooks

测试与质量

查看项目

更新于 10-16 05:52

技能介绍

用途:用于搭建和调试 Volume(英国开放银行 pay-by-bank 支付服务商,API 主机 volumepay.io)的支付 webhook 处理器。支付达到终态时,Volume 会向你应用配置中的 URL 发送 HTTP PUT 请求。

主要能力:验证 Volume 的 Authorization: SHA256withRSA <signature> 头;处理 COMPLETED、SETTLED、FAILED 三种终态;处理重试与去重;沙箱与实时环境密钥区分。

验证要点:算法为 RSA PKCS#1 v1.5 + SHA-256(Java SHA256withRSA),非 PSS;签名用标准 base64 编码,非 base64url、非 hex;签名内容为原始请求体字节,无时间戳、无 nonce。使用公钥验签,无共享密钥,因此 HMAC 校验在此始终是错的。公钥地址:沙箱 https://api.sandbox.volumepay.io/.well-known/signature/pem,实时 https://api.volumepay.io/.well-known/signature/pem;返回的是裸 base64 SPKI 内容,不含 PEM 头尾,需按 DER 解码或包裹 PEM。建议缓存公钥约 1 小时。

处理规则:先验证原始字节再 JSON.parse(DTO 映射或重新序列化会改变字节导致验签失败);路由需接受 PUT;快速返回 200;幂等处理(Volume 会重发直到收到 200);用 paymentRequest.amount(主单位,24.23 表示 £24.23)、currency、merchantPaymentId 与你创建的支付记录对账,不匹配则停止处理;忽略未知字段。

事件:Volume 不发送事件类型头或事件名,由 body 的 paymentStatus 字段区分。COMPLETED 支付成功,用于履约并通知客户;SETTLED 资金结算(仅虚拟账户),用于内部对账,非客户消息;FAILED 支付被拒,看 errorDescription。同一支付可能先 COMPLETED 后 SETTLED,需按 paymentId + paymentStatus 去重。

环境变量:VOLUME_ENV=sandbox 或 live,用于选择公钥 URL;可选 VOLUME_PEM_URL、VOLUME_PUBLIC_KEY(测试用)。沙箱密钥与实时密钥不同。本地开发可用:npx hookdeck-cli listen 3000 volume --path /webhooks/volume。

适用场景:设置 Volume webhook 处理器、排查验签失败、对接 COMPLETED/SETTLED/FAILED 状态。限制:资料未提供收费、价格等信息。