订单功能示例
本文档提供买到的订单 API 的基础使用示例。
基础使用
获取全部订单
typescript
import { Goofish } from "goofish-client";
const client = new Goofish({ cookie: "cookie2=xxxx" });
const result = await client.api.mtop.order.getAllOrders();
console.log(result);获取不同状态的订单
typescript
import { Goofish, OrderStatus } from "goofish-client";
const client = new Goofish({ cookie: "cookie2=xxxx" });
// 获取全部订单
const allOrders = await client.api.mtop.order.getAllOrders();
console.log("全部订单:", allOrders.data?.items?.length);
// 获取待付款订单
const unpaidOrders = await client.api.mtop.order.getUnpaidOrders();
console.log("待付款订单:", unpaidOrders.data?.items?.length);
// 获取待发货订单
const unshippedOrders = await client.api.mtop.order.getUnshippedOrders();
console.log("待发货订单:", unshippedOrders.data?.items?.length);
// 获取待收货订单
const shippedOrders = await client.api.mtop.order.getShippedOrders();
console.log("待收货订单:", shippedOrders.data?.items?.length);
// 获取待评价订单
const unratedOrders = await client.api.mtop.order.getUnratedOrders();
console.log("待评价订单:", unratedOrders.data?.items?.length);
// 获取退款中订单
const refundOrders = await client.api.mtop.order.getRefundOrders();
console.log("退款中订单:", refundOrders.data?.items?.length);自定义参数获取
typescript
import { OrderStatus } from "goofish-client";
const result = await client.api.mtop.order.getBoughtList({
pageNumber: 1,
orderStatus: OrderStatus.ALL,
});
console.log(result);分页加载
基础分页
typescript
// 第一页
const firstPage = await client.api.mtop.order.getAllOrders(1);
// 第二页
const secondPage = await client.api.mtop.order.getAllOrders(2);
console.log(`第一页订单数量: ${firstPage.data?.items?.length || 0}`);
console.log(`第二页订单数量: ${secondPage.data?.items?.length || 0}`);智能分页加载
typescript
async function loadAllOrders() {
let pageNumber = 1;
let allOrders = [];
let hasMore = true;
while (hasMore) {
try {
const response = await client.api.mtop.order.getAllOrders(pageNumber);
if (response.ret[0] === "SUCCESS::调用成功") {
const { items, nextPage } = response.data;
allOrders = allOrders.concat(items);
hasMore = nextPage === "true";
pageNumber++;
console.log(`加载第 ${pageNumber - 1} 页,获得 ${items.length} 个订单`);
// 避免请求过快
await new Promise((resolve) => setTimeout(resolve, 1000));
} else {
console.error("获取订单列表失败:", response.ret);
break;
}
} catch (error) {
console.error("请求异常:", error);
break;
}
}
console.log(`总计加载 ${allOrders.length} 个订单`);
return allOrders;
}
// 使用示例
const allOrders = await loadAllOrders();数据处理
提取关键信息
typescript
const response = await client.api.mtop.order.getAllOrders();
if (response.ret[0] === "SUCCESS::调用成功") {
const orders = response.data.items.map((order) => ({
// 基本信息
orderId: order.commonData.orderId,
itemId: order.commonData.itemId,
tradeStatus: order.commonData.tradeStatusEnum,
// 商品信息
itemTitle: order.content.data.detailInfo.auctionTitle,
itemImage: order.content.data.detailInfo.auctionPic,
itemPrice: order.content.data.priceInfo.price,
itemAmount: order.content.data.priceInfo.buyAmount,
// 卖家信息
sellerUserId: order.head.data.userInfo.userId,
sellerNick: order.head.data.userInfo.userNick,
sellerAvatar: order.head.data.userInfo.userIcon,
// 订单状态
statusMessage: order.head.data.statusViewMsg,
createTime: order.head.data.createTime,
// 可用操作
availableActions: order.tail.data.btnList.map((btn) => ({
name: btn.name,
action: btn.tradeAction,
style: btn.style,
})),
}));
console.log("处理后的订单:", orders);
}按状态分类
typescript
const response = await client.api.mtop.order.getAllOrders();
if (response.ret[0] === "SUCCESS::调用成功") {
const items = response.data.items;
// 按交易状态分类
const categorized = {
success: items.filter(
(item) => item.commonData.tradeStatusEnum === "trade_success"
),
refunded: items.filter(
(item) => item.commonData.tradeStatusEnum === "refund_success"
),
hasPendingActions: items.filter(
(item) =>
item.tail.data.btnList.some((btn) => btn.expanded === "true") &&
item.tail.data.btnList.length > 0
),
});
console.log("交易成功:", categorized.success.length);
console.log("已退款:", categorized.refunded.length);
console.log("有待处理操作:", categorized.hasPendingActions.length);
}错误处理
基础错误处理
typescript
try {
const orderList = await client.api.mtop.order.getAllOrders();
if (orderList.ret[0] === "SUCCESS::调用成功") {
console.log("获取成功:", orderList.data.items.length, "个订单");
} else {
console.error("API 返回错误:", orderList.ret);
}
} catch (error) {
console.error("请求异常:", error.message);
}完整错误处理
typescript
async function getOrdersWithErrorHandling() {
try {
const response = await client.api.mtop.order.getAllOrders();
// 检查响应状态
if (!response || !response.ret || response.ret.length === 0) {
throw new Error("响应格式异常");
}
// 检查业务状态
if (response.ret[0] !== "SUCCESS::调用成功") {
const errorMsg = response.ret[0] || "未知错误";
throw new Error(`业务错误: ${errorMsg}`);
}
// 检查数据完整性
if (!response.data || !Array.isArray(response.data.items)) {
throw new Error("响应数据格式异常");
}
return {
success: true,
data: response.data,
message: "获取成功",
};
} catch (error) {
console.error("获取订单列表失败:", error);
// 根据错误类型返回不同信息
if (error.response) {
const status = error.response.status;
if (status === 401) {
return { success: false, message: "登录状态已过期,请重新登录" };
} else if (status >= 500) {
return { success: false, message: "服务器异常,请稍后重试" };
} else {
return { success: false, message: `请求失败: ${status}` };
}
} else if (error.code === "ENOTFOUND") {
return { success: false, message: "网络连接异常" };
} else {
return { success: false, message: error.message || "未知错误" };
}
}
}
// 使用示例
const result = await getOrdersWithErrorHandling();
if (result.success) {
console.log("订单列表:", result.data.items);
} else {
console.error("获取失败:", result.message);
}实用工具函数
订单搜索
typescript
async function searchOrders(keyword) {
const response = await client.api.mtop.order.getAllOrders();
if (response.ret[0] === "SUCCESS::调用成功") {
const matchedOrders = response.data.items.filter((order) =>
order.content.data.detailInfo.auctionTitle
.toLowerCase()
.includes(keyword.toLowerCase())
);
console.log(`找到 ${matchedOrders.length} 个包含 "${keyword}" 的订单`);
return matchedOrders;
}
return [];
}
// 使用示例
const phoneOrders = await searchOrders("iPhone");订单统计
typescript
async function getOrderStatistics() {
const response = await client.api.mtop.order.getAllOrders();
if (response.ret[0] === "SUCCESS::调用成功") {
const items = response.data.items;
const stats = {
total: items.length,
success: items.filter(
(item) => item.commonData.tradeStatusEnum === "trade_success"
).length,
refunded: items.filter(
(item) => item.commonData.tradeStatusEnum === "refund_success"
).length,
// 金额统计
totalAmount: items.reduce((sum, item) => {
const price = parseFloat(item.content.data.priceInfo.price || "0");
const amount = parseInt(item.content.data.priceInfo.buyAmount || "1");
return sum + price * amount;
}, 0),
// 卖家分布
sellers: items.reduce((sellers, item) => {
const sellerNick = item.head.data.userInfo.userNick;
sellers[sellerNick] = (sellers[sellerNick] || 0) + 1;
return sellers;
}, {}),
};
console.log("订单统计:");
console.log(`总订单: ${stats.total} 个`);
console.log(`交易成功: ${stats.success} 个`);
console.log(`已退款: ${stats.refunded} 个`);
console.log(`总金额: ${stats.totalAmount.toFixed(2)} 元`);
console.log("卖家分布:", stats.sellers);
return stats;
}
return null;
}
// 使用示例
const statistics = await getOrderStatistics();订单操作提取
typescript
async function getOrderActions() {
const response = await client.api.mtop.order.getAllOrders();
if (response.ret[0] === "SUCCESS::调用成功") {
const ordersWithActions = response.data.items
.map((order) => ({
orderId: order.commonData.orderId,
itemTitle: order.content.data.detailInfo.auctionTitle,
statusMessage: order.head.data.statusViewMsg,
actions: order.tail.data.btnList
.filter((btn) => btn.expanded === "true")
.map((btn) => ({
name: btn.name,
action: btn.tradeAction,
style: btn.style,
url: btn.clickEvent?.data?.url,
code: btn.clickEvent?.data?.code,
})),
}))
.filter((order) => order.actions.length > 0);
console.log("有待处理操作的订单:");
ordersWithActions.forEach((order) => {
console.log(`订单 ${order.orderId}: ${order.itemTitle}`);
console.log(` 状态: ${order.statusMessage}`);
console.log(` 可用操作:`);
order.actions.forEach((action) => {
console.log(` - ${action.name} (${action.action})`);
});
});
return ordersWithActions;
}
return [];
}
// 使用示例
const ordersWithActions = await getOrderActions();