110 lines
3.7 KiB
JavaScript
110 lines
3.7 KiB
JavaScript
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 };
|
||
}
|
||
} |