条纹验证 web-hook 签名 HMAC sha254 HAPI.js
Stripe verify web-hook signature HMAC sha254 HAPI.js
我正在尝试验证我的 hapi.js 应用程序中由 stripe 发送的 webhook。
我已按照此处详述的说明进行操作:
https://stripe.com/docs/webhooks/signatures
(我显然没有在这里发布我的端点秘密:)
<!-- language: lang-js -->
const enpointSecret = ######;
const sig = _.fromPairs(request.headers["stripe-signature"].split(',')
.map(s => s.split('=')));
// produces object eg { t: '1111', v1: '111111..', v0: '...'} etc
const signed_payload = `${sig.t}.${JSON.stringify(request.payload)}`;
const hmac = crypto.createHmac('sha256', endpointSecret)
.update(signed_payload)
.digest('hex');
生成的 hmac 与 header (sig.v1) 中的签名不匹配。我不知道我做错了什么...
我正在本地开发 - 并使用 ngrok,以便我可以测试我的 webhook。这可能是个问题吗?谢谢
在哈皮17,
根据评论 - 在 Hapi 17 中,您必须防止正文被解析。我在房子周围跳舞设置有效载荷配置的输出......但你不需要这样做。简单设置 payload.parse 为 false
<!-- language: lang-js -->
module.exports = {
method: 'POST',
path: '/api/webhook',
config: {
auth: false,
payload: {
parse: false // the important bit
},
handler: async (request, h) => {
然后我可以使用内置的条纹方法
<!-- language: lang-js -->
try {
let event = stripe.webhooks.constructEvent( request.payload.toString(), request.headers["stripe-signature"], endpointSecret);
console.log(event);
}
catch (err) {
console.log(err)
}
真正的功劳应该归功于 Karl Reid - 所以虽然我在这里发布了这个,但我没有将其标记为已接受的答案。
我正在尝试验证我的 hapi.js 应用程序中由 stripe 发送的 webhook。 我已按照此处详述的说明进行操作:
https://stripe.com/docs/webhooks/signatures
(我显然没有在这里发布我的端点秘密:)
<!-- language: lang-js -->
const enpointSecret = ######;
const sig = _.fromPairs(request.headers["stripe-signature"].split(',')
.map(s => s.split('=')));
// produces object eg { t: '1111', v1: '111111..', v0: '...'} etc
const signed_payload = `${sig.t}.${JSON.stringify(request.payload)}`;
const hmac = crypto.createHmac('sha256', endpointSecret)
.update(signed_payload)
.digest('hex');
生成的 hmac 与 header (sig.v1) 中的签名不匹配。我不知道我做错了什么...
我正在本地开发 - 并使用 ngrok,以便我可以测试我的 webhook。这可能是个问题吗?谢谢
在哈皮17, 根据评论 - 在 Hapi 17 中,您必须防止正文被解析。我在房子周围跳舞设置有效载荷配置的输出......但你不需要这样做。简单设置 payload.parse 为 false
<!-- language: lang-js -->
module.exports = {
method: 'POST',
path: '/api/webhook',
config: {
auth: false,
payload: {
parse: false // the important bit
},
handler: async (request, h) => {
然后我可以使用内置的条纹方法
<!-- language: lang-js -->
try {
let event = stripe.webhooks.constructEvent( request.payload.toString(), request.headers["stripe-signature"], endpointSecret);
console.log(event);
}
catch (err) {
console.log(err)
}
真正的功劳应该归功于 Karl Reid - 所以虽然我在这里发布了这个,但我没有将其标记为已接受的答案。