From 57faa37e70d8a93cf70d720a302ce872ca4f06f3 Mon Sep 17 00:00:00 2001 From: julien vdb Date: Mon, 27 Jul 2026 00:39:07 +0200 Subject: [PATCH] 0.13.19 : tell apart the two causes of a Stripe signature failure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Un corps brut absent et un secret de signature erroné produisent des messages Stripe proches, alors que les correctifs sont opposés. Le log d'échec indique désormais si le corps brut est présent et sa taille, si l'en-tête stripe-signature est là, et si STRIPE_WEBHOOK_SECRET est défini (sa longueur, jamais sa valeur). Co-Authored-By: Claude Opus 5 --- package.json | 2 +- src/api/order/controllers/order.ts | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5c8babc..47ab146 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "harmony-back", - "version": "0.13.18", + "version": "0.13.19", "private": true, "description": "A Strapi application", "scripts": { diff --git a/src/api/order/controllers/order.ts b/src/api/order/controllers/order.ts index 7c2917f..f976308 100644 --- a/src/api/order/controllers/order.ts +++ b/src/api/order/controllers/order.ts @@ -18,7 +18,24 @@ export default factories.createCoreController( process.env.STRIPE_WEBHOOK_SECRET!, ); } catch (err: any) { - strapi.log.error(`❌ Erreur de signature Webhook: ${err.message}`); + // Deux causes très différentes se ressemblent ici. Corps brut absent + // (middleware `strapi::body` sans `includeUnparsed`) : Stripe se + // plaint du payload. Corps brut présent mais signature invalide : + // c'est le secret qui ne correspond pas à l'endpoint appelant — + // chaque endpoint Stripe a le sien. + strapi.log.error( + `❌ Erreur de signature Webhook: ${err.message} ` + + `[corps brut: ${ + typeof unparsedBody === "string" || Buffer.isBuffer(unparsedBody) + ? `présent, ${unparsedBody.length} octets` + : `ABSENT (${typeof unparsedBody})` + }, en-tête stripe-signature: ${sig ? "présent" : "ABSENT"}, ` + + `STRIPE_WEBHOOK_SECRET: ${ + process.env.STRIPE_WEBHOOK_SECRET + ? `défini (${process.env.STRIPE_WEBHOOK_SECRET.length} car.)` + : "NON DÉFINI" + }]`, + ); return ctx.badRequest(`Webhook Error: ${err.message}`); }