Compare commits
No commits in common. "8d12c0ff79183718cb93e8b4de784d5d4b497900" and "3664431931c81edd1c103bdcf390b33f86d4d2ef" have entirely different histories.
8d12c0ff79
...
3664431931
|
|
@ -12,7 +12,10 @@ import * as crypto from 'crypto';
|
||||||
|
|
||||||
import { SiteService } from '../service/site.service';
|
import { SiteService } from '../service/site.service';
|
||||||
import { OrderService } from '../service/order.service';
|
import { OrderService } from '../service/order.service';
|
||||||
import { SiteApiService } from '../service/site-api.service';
|
|
||||||
|
import {
|
||||||
|
UnifiedOrderDTO,
|
||||||
|
} from '../dto/site-api.dto';
|
||||||
|
|
||||||
@Controller('/webhook')
|
@Controller('/webhook')
|
||||||
export class WebhookController {
|
export class WebhookController {
|
||||||
|
|
@ -31,8 +34,6 @@ export class WebhookController {
|
||||||
|
|
||||||
@Inject()
|
@Inject()
|
||||||
private readonly siteService: SiteService;
|
private readonly siteService: SiteService;
|
||||||
@Inject()
|
|
||||||
private readonly siteApiService: SiteApiService;
|
|
||||||
|
|
||||||
// 移除配置中的站点数组,来源统一改为数据库
|
// 移除配置中的站点数组,来源统一改为数据库
|
||||||
|
|
||||||
|
|
@ -78,14 +79,7 @@ export class WebhookController {
|
||||||
.update(rawBody)
|
.update(rawBody)
|
||||||
.digest('base64');
|
.digest('base64');
|
||||||
try {
|
try {
|
||||||
if (hash !== signature) {
|
if (hash === signature) {
|
||||||
return {
|
|
||||||
code: 403,
|
|
||||||
success: false,
|
|
||||||
message: 'Webhook verification failed',
|
|
||||||
};
|
|
||||||
}
|
|
||||||
const adapter = await this.siteApiService.getAdapter(siteId);
|
|
||||||
switch (topic) {
|
switch (topic) {
|
||||||
case 'product.created':
|
case 'product.created':
|
||||||
case 'product.updated':
|
case 'product.updated':
|
||||||
|
|
@ -96,8 +90,7 @@ export class WebhookController {
|
||||||
break;
|
break;
|
||||||
case 'order.created':
|
case 'order.created':
|
||||||
case 'order.updated':
|
case 'order.updated':
|
||||||
const order = adapter.mapPlatformToUnifiedOrder(body)
|
await this.orderService.syncSingleOrder(siteId, body);
|
||||||
await this.orderService.syncSingleOrder(siteId, order);
|
|
||||||
break;
|
break;
|
||||||
case 'order.deleted':
|
case 'order.deleted':
|
||||||
break;
|
break;
|
||||||
|
|
@ -109,12 +102,19 @@ export class WebhookController {
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
console.log('Unhandled event:', body.event);
|
console.log('Unhandled event:', body.event);
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
code: 200,
|
code: 200,
|
||||||
success: true,
|
success: true,
|
||||||
message: 'Webhook processed successfully',
|
message: 'Webhook processed successfully',
|
||||||
};
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
code: 403,
|
||||||
|
success: false,
|
||||||
|
message: 'Webhook verification failed',
|
||||||
|
};
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
|
|
@ -130,10 +130,23 @@ export class WebhookController {
|
||||||
@Query('signature') signature: string,
|
@Query('signature') signature: string,
|
||||||
@Headers() header: any
|
@Headers() header: any
|
||||||
) {
|
) {
|
||||||
console.log(`webhook shoppy`, siteIdStr, body, header)
|
|
||||||
const topic = header['x-oemsaas-event-type'];
|
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 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) {
|
if (!signature) {
|
||||||
return {
|
return {
|
||||||
|
|
@ -149,7 +162,6 @@ export class WebhookController {
|
||||||
// .createHmac('sha256', this.secret)
|
// .createHmac('sha256', this.secret)
|
||||||
// .update(rawBody)
|
// .update(rawBody)
|
||||||
// .digest('base64');
|
// .digest('base64');
|
||||||
const adapter = await this.siteApiService.getAdapter(siteId);
|
|
||||||
try {
|
try {
|
||||||
if (this.secret === signature) {
|
if (this.secret === signature) {
|
||||||
switch (topic) {
|
switch (topic) {
|
||||||
|
|
@ -162,8 +174,7 @@ export class WebhookController {
|
||||||
break;
|
break;
|
||||||
case 'orders/create':
|
case 'orders/create':
|
||||||
case 'orders/update':
|
case 'orders/update':
|
||||||
const order = adapter.mapPlatformToUnifiedOrder(body)
|
await this.orderService.syncSingleOrder(siteId, bodys);
|
||||||
await this.orderService.syncSingleOrder(siteId, order);
|
|
||||||
break;
|
break;
|
||||||
case 'orders/delete':
|
case 'orders/delete':
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue