首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从条带获取webhook上的异常

从条带获取webhook上的异常
EN

Stack Overflow用户
提问于 2019-05-15 17:10:41
回答 1查看 2.1K关注 0票数 2

我正在尝试设置一个来自条纹的webhook来处理payment_intent.succeeded事件,但是我得到了一个异常。这是我在Node后台的代码(我已经提取了我希望的所有相关部分。如果还需要什么,请告诉我):

const stripeWebHookSecret = 'whsec_WA0Rh4vAD3z0rMWy4kv2p6XXXXXXXXXX';

代码语言:javascript
复制
import express from 'express';
const app = express();
app.use(bodyParser.urlencoded({ extended:true }));
app.use(bodyParser.json());
app.use(session({ <some params here> }));

const openRouter = express.Router();

registerOpenPaymentRoutes(openRouter);

app.use('/open', openRouter);

registerOpenPaymentRoutes的实现如下所示:

代码语言:javascript
复制
export const registerOpenPaymentRoutes = (router) => {
    router.post('/payment/intent/webhook', bodyParser.raw({type: 'application/json'}), (req, res) => {
        let signature = req.headers['stripe-signature'];
        try {
            let event = stripe.webhooks.constructEvent(req.body, signature, stripeWebHookSecret);
            switch(event.type){
                case 'payment_intent.succeeded':
                    let intent = event.data.object;
                    res.json({ message: 'Everything went smooth!', intent });
                default:
                    res.status(400).json({ error: 'Event type not supported' });
            }
        }
        catch (error){
            res.status(400).json({ message: `Wrong signature`, signature, body: req.body, error });
        }
    });
}

到目前为止,我从条纹仪表板触发了一个测试webhook事件,我命中了端点,但从good.When块获得了结果。错误消息如下:

代码语言:javascript
复制
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"

我返回了带有错误消息的签名,就像你在上面看到的一样,签名看起来像这样:

"t=1557911017,v1=bebf499bcb35198b8bfaf22a68b8879574298f9f424e57ef292752e3ce21914d,v0=23402bb405bfd6bd2a13c310cfecda7ae1905609923d801fa4e8b872a4f82894"

据我从文档中了解,要获得前面提到的原始请求正文,需要对我已有的路由器使用bodyParser.raw({type: 'application/json'})参数。

有谁能看到缺失的部分吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 17:42:37

这是因为您已经将express应用程序设置为使用bodyParser.json()中间件,该中间件与您在webhook路由中设置的bodyParser.raw()中间件冲突。

如果您删除了app.use(bodyParser.json());行,您的webhooks将按预期工作,但随后您的其余路由将不具有解析的主体,这并不理想。

我建议添加一个自定义中间件来根据路由选择bodyParser版本。类似于:

代码语言:javascript
复制
// only use the raw bodyParser for webhooks
app.use((req, res, next) => {
  if (req.originalUrl === '/payment/intent/webhook') {
    next();
  } else {
    bodyParser.json()(req, res, next);
  }
});

然后在webhook路由上显式地使用bodyParser.raw()中间件。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56145563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档