zksu
/
API
forked from yoone/API
1
0
Fork 0

Compare commits

..

No commits in common. "8d12c0ff79183718cb93e8b4de784d5d4b497900" and "3664431931c81edd1c103bdcf390b33f86d4d2ef" have entirely different histories.

1 changed files with 54 additions and 43 deletions

View File

@ -9,10 +9,13 @@ import {
} from '@midwayjs/decorator';
import { Context } from '@midwayjs/koa';
import * as crypto from 'crypto';
import { SiteService } from '../service/site.service';
import { OrderService } from '../service/order.service';
import { SiteApiService } from '../service/site-api.service';
import {
UnifiedOrderDTO,
} from '../dto/site-api.dto';
@Controller('/webhook')
export class WebhookController {
@ -28,11 +31,9 @@ export class WebhookController {
@Logger()
logger: ILogger;
@Inject()
private readonly siteService: SiteService;
@Inject()
private readonly siteApiService: SiteApiService;
// 移除配置中的站点数组,来源统一改为数据库
@ -48,7 +49,7 @@ export class WebhookController {
@Query('siteId') siteIdStr: string,
@Headers() header: any
) {
console.log(`webhook woocommerce`, siteIdStr, body, header)
console.log(`webhook woocommerce`, siteIdStr, body,header)
const signature = header['x-wc-webhook-signature'];
const topic = header['x-wc-webhook-topic'];
const source = header['x-wc-webhook-source'];
@ -78,44 +79,43 @@ export class WebhookController {
.update(rawBody)
.digest('base64');
try {
if (hash !== signature) {
if (hash === signature) {
switch (topic) {
case 'product.created':
case 'product.updated':
// 不再写入本地,平台事件仅确认接收
break;
case 'product.deleted':
// 不再写入本地,平台事件仅确认接收
break;
case 'order.created':
case 'order.updated':
await this.orderService.syncSingleOrder(siteId, body);
break;
case 'order.deleted':
break;
case 'customer.created':
break;
case 'customer.updated':
break;
case 'customer.deleted':
break;
default:
console.log('Unhandled event:', body.event);
}
return {
code: 200,
success: true,
message: 'Webhook processed successfully',
};
} else {
return {
code: 403,
success: false,
message: 'Webhook verification failed',
};
}
const adapter = await this.siteApiService.getAdapter(siteId);
switch (topic) {
case 'product.created':
case 'product.updated':
// 不再写入本地,平台事件仅确认接收
break;
case 'product.deleted':
// 不再写入本地,平台事件仅确认接收
break;
case 'order.created':
case 'order.updated':
const order = adapter.mapPlatformToUnifiedOrder(body)
await this.orderService.syncSingleOrder(siteId, order);
break;
case 'order.deleted':
break;
case 'customer.created':
break;
case 'customer.updated':
break;
case 'customer.deleted':
break;
default:
console.log('Unhandled event:', body.event);
return {
code: 200,
success: true,
message: 'Webhook processed successfully',
};
}
} catch (error) {
console.log(error);
}
@ -130,10 +130,23 @@ 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 {
@ -149,7 +162,6 @@ 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) {
@ -162,8 +174,7 @@ export class WebhookController {
break;
case 'orders/create':
case 'orders/update':
const order = adapter.mapPlatformToUnifiedOrder(body)
await this.orderService.syncSingleOrder(siteId, order);
await this.orderService.syncSingleOrder(siteId, bodys);
break;
case 'orders/delete':
break;