/*
|
##### 如果你热爱编程,想快速入门云开发,欢迎使用`vk-unicloud`系列开发框架
|
##### 无需转变开发习惯,0成本上手云开发。
|
##### 框架内置了众多API、工具包,为你的业务扫平障碍。使你的项目刚起步进度就是50%(微信登录、短信、验证码、缓存、生成小程序码等等)
|
##### 从此你又get一个新技能,只需用js,轻松搞定前后台整体业务。
|
##### `client端` 框架地址:https://ext.dcloud.net.cn/plugin?id=2204
|
##### `admin端` 框架地址:https://ext.dcloud.net.cn/plugin?name=vk-unicloud-admin
|
##### `client端` 框架文档:https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=2912162&doc_id=975983
|
##### `admin端` 框架文档:https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4003860&doc_id=975983
|
##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架
|
*/
|
|
/**
|
* 为了不引入其他npm包,这里使用最简单高效的方式进行路由
|
* 此云函数的作用仅为配合前端生成支付参数、查询支付订单等API接口,请勿修改此文件代码。
|
*/
|
var util = {};
|
const uniID = require('uni-id')
|
const vkPayNotify = require('../vk-pay-notify/index')
|
const ucePayNotify = require('../uce-pay-notify/index')
|
util.router = async function(obj) {
|
let { event, context } = obj;
|
let { action, data = {}, uniIdToken } = event;
|
// 判断是否是第三方支付异步回调
|
if (event.path) {
|
if (event.path.indexOf("/vk-pay-notify/") === 0) {
|
// 执行第三方支付异步回调的逻辑
|
return await vkPayNotify.main(event, context);
|
}
|
if (event.path.indexOf("/uce-pay-notify/") === 0) {
|
// 执行第三方支付异步回调的逻辑
|
return await ucePayNotify.main(event, context);
|
}
|
}
|
if (event.httpMethod) {
|
if (event.queryStringParameters) {
|
let options = event.queryStringParameters;
|
try {
|
if (typeof options == "string") options = JSON.parse(options);
|
data = Object.assign(data, options);
|
} catch (err) {}
|
}
|
if (event.body) {
|
let options = event.body;
|
if (event.isBase64Encoded) {
|
options = Buffer.from(options, 'base64').toString('utf-8');
|
}
|
try {
|
if (typeof options == "string") options = JSON.parse(options);
|
if (options.data) data = Object.assign(data, options.data);
|
} catch (err) {}
|
action = options.action || options.$url;
|
}
|
if (data.vk_appid) context.APPID = data.vk_appid;
|
if (data.vk_platform) context.PLATFORM = data.vk_platform;
|
}
|
if (!action) return { code: -1, msg: "action不能为空" };
|
let originalParam = { event, context };
|
let service;
|
let serviceParames = {
|
data,
|
action,
|
uniIdToken,
|
originalParam
|
};
|
if (action.indexOf("..") > -1) {
|
return { code: -1, msg: "action不允许带.." };
|
} else if (action.indexOf("pay-notify") > -1) {
|
return { code: -1, msg: "禁止访问" };
|
}
|
try {
|
service = require(`../service/${action}`);
|
} catch (err) {
|
console.error(err);
|
return returnErrorCatch(err, action);
|
}
|
return await service.main(serviceParames);
|
}
|
|
module.exports = util;
|
|
|
function returnErrorCatch(err = {}, action) {
|
let { code, message = "" } = err;
|
console.error(err);
|
if (code == "MODULE_NOT_FOUND" && message.indexOf("service/") > -1) {
|
if (["pay/createPayment", "pay/queryPayment", "pay/queryRefund", "pay/refund", "pay/transfer"].indexOf(action) >
|
-1) {
|
return { code: 404,
|
msg: `云函数 ${action} 不存在!\n请将项目根目录下 /使用帮助/7、vk-pay云函数示例代码/service/整个目录粘贴到 uniCloud/cloudfunctions/vk-pay/service/,并重新上传 vk-pay 云函数`,
|
errMsg: message, err };
|
} else {
|
return { code: 404, msg: `云函数 ${action} 不存在!`, errMsg: message, err };
|
}
|
} else if (code == "MODULE_NOT_FOUND" && message.indexOf("Cannot find module") > -1) {
|
return { code: 500, msg: message, errMsg: message, err };
|
} else {
|
return { code: 500, msg: `云函数 ${action} 编译异常!`, errMsg: message, err };
|
}
|
}
|