使用springboot进行Stripe webhook签名验证

问题描述 投票:0回答:1

我正在开发一个端点来接收来自 stripe 的 webhook 事件。使用stripe库来验证签名。

Webhook.constructEvent(body, sigHeader, "whsec_....");

它总是给我错误“找不到签名”,我已经调试并发现预期签名与计算签名不同。我已确保我的签名密钥是正确的,我认为问题出在我在 Spring Boot 控制器中获取的请求正文。

我正在尝试提取请求正文,如下所示。在弹簧控制器中获取原始主体的正确方法是什么:

@PostMapping("/event")
public ResponseEntity<String> processStripeEvents(@RequestBody String payload, HttpServletRequest request)

我也尝试使用 apache IOUtils 从请求中读取正文,但这也给出了相同的错误。我正在使用 Webhook.site 来测试事件接收,这可能是问题所在吗?

spring-boot stripe-payments webhooks
1个回答
0
投票

最后下面的代码对我有用。 @RequestBody 或 Apache IOUtils 不会给出原始的原始主体,它会由于签名不匹配而进行一些转换。

@PostMapping("/event")
public ResponseEntity<String> processStripeEvents(HttpServletRequest request) throws IOException {
    logger.info("Received event from stripe ");
    Event event = null;
    String body = request.getReader().lines().collect(Collectors.joining("\n"));
    try {
        String sigHeader = request.getHeader("Stripe-Signature");
        event = Webhook.constructEvent(body, sigHeader, "whsec_...");
    }  catch (Exception e) {

        logger.error("Error while verifying stripe event signature", e);
        return ResponseEntity.badRequest().body(e.getMessage());
    }

}

© www.soinside.com 2019 - 2024. All rights reserved.