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 };
|
|||
|
|
}
|
|||
|
|
}
|