|
|
|
|
@ -75,7 +75,7 @@ export class WPService implements IPlatformService {
|
|
|
|
|
}
|
|
|
|
|
const data = res.data as T[];
|
|
|
|
|
const totalPages = Number(res.headers?.['x-wp-totalpages'] ?? 1);
|
|
|
|
|
const total = Number(res.headers?.['x-wp-total']?? 1)
|
|
|
|
|
const total = Number(res.headers?.['x-wp-total'] ?? 1)
|
|
|
|
|
return { items: data, total, totalPages, page, per_page, page_size: per_page };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -206,7 +206,7 @@ export class WPService implements IPlatformService {
|
|
|
|
|
const auth = Buffer.from(`${consumerKey}:${consumerSecret}`).toString(
|
|
|
|
|
'base64'
|
|
|
|
|
);
|
|
|
|
|
console.log(`!!!wpApiUrl, consumerKey, consumerSecret, auth`,site.apiUrl, consumerKey, consumerSecret, auth)
|
|
|
|
|
console.log(`!!!wpApiUrl, consumerKey, consumerSecret, auth`, site.apiUrl, consumerKey, consumerSecret, auth)
|
|
|
|
|
let hasMore = true;
|
|
|
|
|
while (hasMore) {
|
|
|
|
|
const config: AxiosRequestConfig = {
|
|
|
|
|
@ -259,8 +259,8 @@ export class WPService implements IPlatformService {
|
|
|
|
|
// 导出 WooCommerce 产品为特殊CSV(平台特性)
|
|
|
|
|
async exportProductsCsvSpecial(site: any, page: number = 1, pageSize: number = 100): Promise<string> {
|
|
|
|
|
const list = await this.getProducts(site, { page, per_page: pageSize });
|
|
|
|
|
const header = ['id','name','type','status','sku','regular_price','sale_price','stock_status','stock_quantity'];
|
|
|
|
|
const rows = (list.items || []).map((p: any) => [p.id,p.name,p.type,p.status,p.sku,p.regular_price,p.sale_price,p.stock_status,p.stock_quantity]);
|
|
|
|
|
const header = ['id', 'name', 'type', 'status', 'sku', 'regular_price', 'sale_price', 'stock_status', 'stock_quantity'];
|
|
|
|
|
const rows = (list.items || []).map((p: any) => [p.id, p.name, p.type, p.status, p.sku, p.regular_price, p.sale_price, p.stock_status, p.stock_quantity]);
|
|
|
|
|
const csv = [header.join(','), ...rows.map(r => r.map(v => String(v ?? '')).join(','))].join('\n');
|
|
|
|
|
return csv;
|
|
|
|
|
}
|
|
|
|
|
@ -289,7 +289,7 @@ export class WPService implements IPlatformService {
|
|
|
|
|
const res = await api.get(`orders/${orderId}`);
|
|
|
|
|
return res.data as Record<string, any>;
|
|
|
|
|
}
|
|
|
|
|
async getOrders(siteId: number,params: Record<string, any> = {}): Promise<Record<string, any>[]> {
|
|
|
|
|
async getOrders(siteId: number, params: Record<string, any> = {}): Promise<Record<string, any>[]> {
|
|
|
|
|
const site = await this.siteService.get(siteId);
|
|
|
|
|
const api = this.createApi(site, 'wc/v3');
|
|
|
|
|
return await this.sdkGetAll<Record<string, any>>(api, 'orders', params);
|
|
|
|
|
@ -805,7 +805,7 @@ export class WPService implements IPlatformService {
|
|
|
|
|
const result = response.data;
|
|
|
|
|
|
|
|
|
|
// 转换 WooCommerce 批量操作结果为统一格式
|
|
|
|
|
const errors: Array<{identifier: string, error: string}> = [];
|
|
|
|
|
const errors: Array<{ identifier: string, error: string }> = [];
|
|
|
|
|
|
|
|
|
|
// WooCommerce 返回格式: { create: [...], update: [...], delete: [...] }
|
|
|
|
|
// 错误信息可能在每个项目的 error 字段中
|
|
|
|
|
@ -1046,7 +1046,7 @@ export class WPService implements IPlatformService {
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async fetchMediaPaged(site: any, params: Partial<WpMediaGetListParams> = {}) {
|
|
|
|
|
public async fetchMediaPaged(site: any, params: Partial<WpMediaGetListParams> = {}) {
|
|
|
|
|
const apiUrl = site.apiUrl;
|
|
|
|
|
const { consumerKey, consumerSecret } = site as any;
|
|
|
|
|
const endpoint = 'wp/v2/media';
|
|
|
|
|
@ -1061,15 +1061,15 @@ public async fetchMediaPaged(site: any, params: Partial<WpMediaGetListParams> =
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
// 检查是否有错误信息
|
|
|
|
|
if(response?.data?.message){
|
|
|
|
|
if (response?.data?.message) {
|
|
|
|
|
throw new Error(`获取${apiUrl}条媒体文件失败,原因为${response.data.message}`)
|
|
|
|
|
}
|
|
|
|
|
if(!Array.isArray(response.data)) {
|
|
|
|
|
if (!Array.isArray(response.data)) {
|
|
|
|
|
throw new Error(`获取${apiUrl}条媒体文件失败,原因为返回数据不是数组`);
|
|
|
|
|
}
|
|
|
|
|
const total = Number(response.headers['x-wp-total'] || 0);
|
|
|
|
|
const totalPages = Number(response.headers['x-wp-totalpages'] || 0);
|
|
|
|
|
return { items: response.data, total, totalPages, page:params.page ?? 1, per_page: params.per_page ?? 20, page_size: params.per_page ?? 20 };
|
|
|
|
|
return { items: response.data, total, totalPages, page: params.page ?? 1, per_page: params.per_page ?? 20, page_size: params.per_page ?? 20 };
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 上传媒体文件
|
|
|
|
|
@ -1205,10 +1205,12 @@ public async fetchMediaPaged(site: any, params: Partial<WpMediaGetListParams> =
|
|
|
|
|
throw new Error('source_url 不存在');
|
|
|
|
|
}
|
|
|
|
|
// 下载源文件为 Buffer
|
|
|
|
|
const resp = await axios.get(srcUrl, { responseType: 'arraybuffer', timeout: 30000,
|
|
|
|
|
const resp = await axios.get(srcUrl, {
|
|
|
|
|
responseType: 'arraybuffer', timeout: 30000,
|
|
|
|
|
headers: {
|
|
|
|
|
'User-Agent': 'Mozilla/5.0 (compatible; Node.js Axios)',
|
|
|
|
|
} });
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
const inputBuffer = Buffer.from(resp.data);
|
|
|
|
|
// 条件判断 如果下载的 Buffer 为空则抛出错误
|
|
|
|
|
if (!inputBuffer || inputBuffer.length === 0) {
|
|
|
|
|
|