From f54b3c3617ff717c957ded1c5f80b10c55795658 Mon Sep 17 00:00:00 2001 From: zhuotianyuan Date: Wed, 7 Jan 2026 11:54:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(adapter):=20=E5=85=AC=E5=BC=80=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E6=96=B9=E6=B3=95=E4=BB=A5=E6=94=AF=E6=8C=81=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E6=8E=A5=E5=8F=A3=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将各适配器中的私有映射方法改为公开,并在接口中定义统一方法签名 修改webhook控制器以使用适配器映射方法处理订单数据 --- src/controller/webhook.controller.ts | 37 ++++++++-------------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/src/controller/webhook.controller.ts b/src/controller/webhook.controller.ts index 09eaea0..312ea6e 100644 --- a/src/controller/webhook.controller.ts +++ b/src/controller/webhook.controller.ts @@ -181,17 +181,11 @@ export class WebhookController { console.log('Unhandled event:', topic); } - return { - code: 200, - success: true, - message: 'Webhook processed successfully', - }; - } else { - return { - code: 403, - success: false, - message: 'Webhook verification failed', - }; + return { + code: 200, + success: true, + message: 'Webhook processed successfully', + }; } } catch (error) { console.log(error); @@ -207,23 +201,10 @@ export class WebhookController { @Query('signature') signature: string, @Headers() header: any ) { + console.log(`webhook shoppy`, siteIdStr, body, header) const topic = header['x-oemsaas-event-type']; - // const source = header['x-oemsaas-shop-domain']; + // const source = header['x-oemsaas-shop-domain']; const siteId = Number(siteIdStr); - const bodys = new UnifiedOrderDTO(); - Object.assign(bodys, body); - // 从数据库获取站点配置 - const site = await this.siteService.get(siteId, true); - - // if (!site || !source?.includes(site.websiteUrl)) { - if (!site) { - console.log('domain not match'); - return { - code: HttpStatus.BAD_REQUEST, - success: false, - message: 'domain not match', - }; - } if (!signature) { return { @@ -239,6 +220,7 @@ export class WebhookController { // .createHmac('sha256', this.secret) // .update(rawBody) // .digest('base64'); + const adapter = await this.siteApiService.getAdapter(siteId); try { if (this.secret === signature) { switch (topic) { @@ -251,7 +233,8 @@ export class WebhookController { break; case 'orders/create': case 'orders/update': - await this.orderService.syncSingleOrder(siteId, bodys); + const order = adapter.mapOrder(body) + await this.orderService.syncSingleOrder(siteId, order); break; case 'orders/delete': break;