forked from yoone/API
96 lines
2.5 KiB
TypeScript
96 lines
2.5 KiB
TypeScript
import { Inject, Provide } from '@midwayjs/core';
|
|
import axios from 'axios';
|
|
import dayjs = require('dayjs');
|
|
import utc = require('dayjs/plugin/utc');
|
|
import timezone = require('dayjs/plugin/timezone');
|
|
|
|
// 扩展dayjs功能
|
|
dayjs.extend(utc);
|
|
dayjs.extend(timezone);
|
|
|
|
|
|
// Wintopay 物流更新请求接口
|
|
interface LogisticsUpdateRequest {
|
|
trade_id: string; // 订单的流水号
|
|
track_number: string; // 物流单号
|
|
track_brand: string; // 物流公司编号
|
|
}
|
|
|
|
// Wintopay 物流更新响应接口
|
|
interface LogisticsUpdateResponse {
|
|
code: string;
|
|
message: string;
|
|
data: {
|
|
trade_id: string;
|
|
track_brand: string;
|
|
track_number: string;
|
|
time: number;
|
|
};
|
|
error: any;
|
|
request_id: string;
|
|
}
|
|
|
|
@Provide()
|
|
export class WintopayService {
|
|
@Inject() logger;
|
|
|
|
// 默认配置
|
|
private config = {
|
|
//测试环境配置,在生产环境记得换掉
|
|
apiBaseUrl: 'https://stage-merchant-api.wintopay.com',
|
|
Authorization: 'Bearer kV8w1er8dFw9p9g2kb0mer398hD8hfWk',
|
|
};
|
|
|
|
// 发送请求
|
|
private async sendRequest<T>(url: string, data: any): Promise<T> {
|
|
try {
|
|
const headers = {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': this.config.Authorization,
|
|
};
|
|
|
|
// 发送请求 - 临时禁用SSL证书验证以解决UNABLE_TO_VERIFY_LEAF_SIGNATURE错误
|
|
const response = await axios.post<T>(
|
|
`${this.config.apiBaseUrl}${url}`,
|
|
data,
|
|
{
|
|
headers,
|
|
httpsAgent: new (require('https').Agent)({
|
|
rejectUnauthorized: false
|
|
})
|
|
}
|
|
);
|
|
|
|
return response.data;
|
|
} catch (error) {
|
|
this.logger.error('Wintopay API请求失败:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 更新订单物流信息
|
|
* @param params 物流更新参数
|
|
* @returns 物流更新响应
|
|
*/
|
|
async logisticsUpdate(params: LogisticsUpdateRequest): Promise<LogisticsUpdateResponse> {
|
|
try {
|
|
this.logger.info('开始更新物流信息:', params);
|
|
|
|
const response = await this.sendRequest<LogisticsUpdateResponse>('/v1/logistics/update', params);
|
|
|
|
this.logger.info('物流更新成功:', response);
|
|
return response;
|
|
} catch (error: any) {
|
|
this.logger.error('物流更新失败:', error);
|
|
|
|
// 处理API返回的错误
|
|
if (error.response?.data) {
|
|
throw new Error(`物流更新失败: ${error.response.data.message || '未知错误'}`);
|
|
}
|
|
|
|
throw new Error(`物流更新请求失败: ${error.message || '网络错误'}`);
|
|
}
|
|
}
|
|
} |