110 lines
3.7 KiB
JavaScript
Raw Permalink Normal View History

2026-07-27 11:28:33 +08:00
const aliApi = require("./minialiplay");
const dayjs = require("dayjs");
exports.main = async (event) => {
switch (event.type) {
case "getUserInfo":
return await getUserInfo(event);
case "parsePayNotify":
return await parsePayNotify(event);
case "parseRefundNotify":
return await parseRefundNotify(event);
case "createTrade":
return await createTrade(event);
case "queryTrade":
return await queryTrade(event);
case "refundTrade":
return await refundTrade(event);
case "queryRefundDetail":
return await queryRefundDetail(event);
default:
return {
success: false,
message: "参数错误",
};
}
};
async function getUserInfo({ code }) {
try {
let accessToken = await aliApi.accToken({ code });
let data = await aliApi.userInfo(accessToken);
return { success: true, data }
} catch (e) {
return { success: false, message: e.message };
}
}
async function parsePayNotify({ data }) {
try {
const item = await aliApi.parsePayNotify(data);
return { success: item.isSuccess, data: item };
} catch (e) {
return { success: false, message: e.message };
}
}
async function parseRefundNotify({ data }) {
try {
const item = await aliApi.parseRefundNotify(data);
return { success: false, data: item };
} catch (e) {
return { success: false, message: e.message };
}
}
async function createTrade({ data }) {
try {
const payload = {
outTradeNo: data.outTradeNo,
totalAmount: data.totalAmount,
subject: data.desc,
buyerId: data.openId,
timeExpire: dayjs(data.expireTime).format('YYYY-MM-DD HH:mm:ss'),
}
const item = await aliApi.createTrade(payload);
return { success: true, data: item };
} catch (e) {
return { success: false, message: e.message };
}
}
async function queryTrade({ tradeNo }) {
try {
const item = await aliApi.queryTrade(tradeNo);
return { success: true, data: item };
} catch (e) {
return { success: false, message: e.message };
}
}
async function refundTrade({ tradeNo, reason, totalAmount }) {
try {
const item = await aliApi.refundTrade({ tradeNo, reason, totalAmount });
// fundChange 资金是否变动(y:是,n:否) 如果资金变动,则查询退款详情
// 退款成功判断说明接口返回fund_change=Y为退款成功fund_change=N或无此字段值返回时需通过退款查询接口进一步确认退款状态。详见退款成功判断指导。注意接口中code=10000仅代表本次退款请求成功不代表退款成功
if (item.fundChange === 'Y') {
return { success: true, tradeStatus: 'refunded', refundTime: item.gmtRefundPay };
// 等待5秒后查询退款详情 支付宝处理退款需要时间 建议商户在退款发起后间隔10秒以上再发起退款查询请求
// console.log('等待5秒后查询退款详情')
// await new Promise(resolve => setTimeout(resolve, 5 * 1000));
// const result = await aliApi.queryRefundDetail(tradeNo, item.outTradeNo);
// console.log('查询退款详情结果===')
// console.log(result)
// if (result.success && result.data.refundStatus == 'REFUND_SUCCESS') {
// return { success: true, tradeStatus: 'refunded', refundTime: result.data.gmtRefundPay };
// }
}
return { success: true, tradeStatus: 'refunding' };
} catch (e) {
return { success: false, message: e.message };
}
}
async function queryRefundDetail({ tradeNo, outTradeNo }) {
try {
const item = await aliApi.queryRefundDetail(tradeNo, outTradeNo);
return { success: true, data: item };
} catch (e) {
return { success: false, message: e.message };
}
}