Commit 83227084 by 王昆

gsb

parent 221c9c87
......@@ -64,12 +64,20 @@ class APIBase extends DocBase {
let sign = md5(signStr).toUpperCase();
console.log(params.sign, signStr, sign);
if (params.sign != sign) {
return system.getResultFail(1001001, "签名验证失败");
return system.getResultFail(1001001, this.getSignErrorMsg(sign));
}
params.app = app;
return system.getResultSuccess();
}
getSignErrorMsg(sign) {
let signErrorMsg = "签名验证失败";
if (settings.env == "dev") {
signErrorMsg = signErrorMsg + "---" + sign;
}
return signErrorMsg;
}
async checkSign(gname, params) {
if (this.SIGN_GNAME.indexOf(gname) != -1) {
return await this.validSign(params);
......
......@@ -8,7 +8,30 @@ class TestAPI extends APIBase {
}
async nameTwo(pobj, query, req) {
return await this.authSve.nameTwo(pobj);
try {
return await this.authSve.nameTwo(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "请求异常")
}
}
async bankThree(pobj, query, req) {
try {
return await this.authSve.bankThree(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "请求异常")
}
}
async bankFour(pobj, query, req) {
try {
return await this.authSve.bankFour(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "请求异常")
}
}
exam() {
......
var APIBase = require("../../api.base");
var system = require("../../../system");
class TestAPI extends APIBase {
constructor() {
super();
this.signSve = system.getObject("service.sign.signSve");
}
/**
* 创建模板
* @param pobj
* @returns {Promise<{msg: *, data: *, status: *}|*|undefined>}
*/
async createTemplate(pobj, query, req) {
try {
return await this.signSve.createTemplate(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "请求异常")
}
}
/**
* 创建个人账户
* @param req
* @returns {Promise<{msg: *, data: *, status: *}|*|undefined>}
*/
async createAccount(pobj, query, req) {
try {
return await this.signSve.createAccount(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "请求异常")
}
}
/**
* 创建企业印章
* @param req
* @returns {Promise<{msg: *, data: *, status: *}|*|undefined>}
*/
async createEntSeal(pobj, query, req) {
try {
return await this.signSve.createEntSeal(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "请求异常")
}
}
// 静默签
async autoSign(pobj, query, req) {
try {
return await this.signSve.autoSign(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "请求异常")
}
}
// 手动签
async handSign(pobj, query, req) {
try {
return await this.signSve.handSign(pobj);
} catch (e) {
console.log(e);
return system.getResultFail(500, "请求异常")
}
}
exam() {
return "";
}
classDesc() {
return {
groupName: "",
groupDesc: "",
name: "",
desc: "",
exam: "",
};
}
methodDescs() {
return [
{
methodDesc: "",
methodName: "",
paramdescs: [
{
paramDesc: "",
paramName: "",
paramType: "",
defaultValue: "",
}
],
rtnTypeDesc: "",
rtnType: ""
}
];
}
}
module.exports = TestAPI;
......@@ -6,15 +6,18 @@ module.exports = (db, DataTypes) => {
requestid: DataTypes.STRING,
merchant_id: DataTypes.STRING,
product_id: DataTypes.STRING,
product_specifications: DataTypes.BIGINT,
trade_amt: DataTypes.BIGINT,
result: DataTypes.INTEGER,
fee: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
fee_remark: DataTypes.STRING,
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'api_trade_log',
......
......@@ -11,7 +11,7 @@ class OrderService extends ServiceBase {
async getMerchantOrderProduct(merchantId, apiPrev) {
let orderProductList = await this.orderproductSve.getMerchantLiveProduct({merchant_id: merchantId});
if (!orderProductList || orderProductList.length == 0) {
return system.getResult(1002001, "暂无可用订单,请先下单");
return system.getResultFail(1002001, "暂无可用订单,请先下单");
}
let productIds = [];
......@@ -31,7 +31,7 @@ class OrderService extends ServiceBase {
}
}
if (!orderProduct) {
return system.getResult(1002002, "订单未设置该产品");
return system.getResultFail(1002002, "订单未设置该产品");
}
return system.getResultSuccess(orderProduct);
}
......
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
class OrderAuthlogService extends ServiceBase {
constructor() {
super();
}
/**
* fn:保存身份认证日志
* @param params
* @returns {Promise<void>}
*/
async saveEorderAuthLog(params){
return await this.callms("sve_order", "saveEorderAuthLog", params);
}
}
module.exports = OrderAuthlogService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../svems.base")
class OrderSignLogService extends ServiceBase {
constructor() {
super();
}
/**
* fn:保存签约日志
* @param params
* @returns {Promise<void>}
*/
async saveEorderSignLog(params){
return await this.callms("sve_order", "saveEorderSignLog", params);
}
}
module.exports = OrderSignLogService;
\ No newline at end of file
......@@ -8,71 +8,158 @@ class AuthService extends ServiceBase {
this.feeSve = system.getObject("service.fee.feeSve");
this.orderSve = system.getObject("service.order.orderSve");
this.orderauthlogSve = system.getObject("service.order.orderauthlogSve");
this.enginesignSve = system.getObject("service.engine.enginesignSve");
this.tradelogDao = system.getObject("db.common.tradelogDao");
}
async nameTwo(params) {
try {
// 通过应用id查询商户订单信息,确定产品认证接口
let app = params.app;
let merchantId = app.merchant_id;
// 获取订单产品
let orderProduct = await this.orderSve.getMerchantOrderProduct(merchantId, "nameTwo");
if (orderProduct.status !== 0) {
return orderProduct;
let idName = this.trim(params.idName);
let idNo = this.trim(params.idNo).toUpperCase();
if (!idName) {
return system.getResultFail(1000000, "姓名错误");
}
if (!idNo) {
return system.getResultFail(1000000, "身份证错误");
}
params.orderProduct = orderProduct.data;
return this.doAuth(params);
params.apiName = "nameTwo";
return this.authentication(params, async (p) => {
return await this.enginesignSve.TwoFactorVerification({
id_name: idName,
id_no: idNo,
channel: p.orderProduct.channel,
auth_type: 2,
});
});
} catch (error) {
console.log(error);
return system.getResult(null, `系统错误 错误信息 ${error}`);
return system.getResultFail(500, `系统错误 错误信息 ${error}`);
}
}
async bankThree(params) {
try {
return this.doAuth(params);
let idName = this.trim(params.idName);
let idNo = this.trim(params.idNo).toUpperCase();
let bankNo = this.trim(params.bankNo);
if (!idName) {
return system.getResultFail(1000000, "姓名错误");
}
if (!idNo) {
return system.getResultFail(1000000, "身份证错误");
}
if (!bankNo) {
return system.getResultFail(1000000, "银行卡号错误");
}
params.apiName = "bankThree";
return this.authentication(params, async (p) => {
let validRes = await this.enginesignSve.ThreeFactorVerification({
id_name: idName,
id_no: idNo,
bank_no: bankNo,
channel: p.orderProduct.channel,
auth_type: 2,
});
return validRes;
});
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async bankFour(params) {
try {
return this.doAuth(params);
let idName = this.trim(params.idName);
let idNo = this.trim(params.idNo).toUpperCase();
let bankNo = this.trim(params.bankNo);
let mobile = this.trim(params.mobile);
if (!idName) {
return system.getResultFail(1000000, "姓名错误");
}
if (!idNo) {
return system.getResultFail(1000000, "身份证错误");
}
if (!bankNo) {
return system.getResultFail(1000000, "银行卡号错误");
}
if (!mobile) {
return system.getResultFail(1000000, "银行卡号错误");
}
params.apiName = "bankFour";
return this.authentication(params, async (p) => {
let validRes = await this.enginesignSve.FourFactorVerification({
id_name: idName,
id_no: idNo,
bank_no: bankNo,
mobile: mobile,
channel: p.orderProduct.channel,
auth_type: 2,
});
return validRes;
});
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async doAuth(params) {
let orderProduct = params.orderProduct;
async authentication(params, validMethod) {
let app = params.app;
let merchantId = app.merchant_id;
// 获取订单产品
let orderProduct = await this.orderSve.getMerchantOrderProduct(merchantId, params.apiName);
if (orderProduct.status !== 0) {
return orderProduct;
}
orderProduct = orderProduct.data;
params.orderProduct = orderProduct;
// 扣费
let tres = await this.trade(orderProduct);
let tres = await this.trade(params);
if (tres.status !== 0) {
return tres;
}
let tradeLog = tres.data.tradeLog;
let trade = tres.data.trade;
// 2. 调用认证引擎
// 3. 异步调用订单消费逻辑
// 2. 调用认证引擎
let res = await validMethod(params);
let pass = res.status === 0;
// 生成订单
let logres = await this.orderauthlogSve.saveEorderAuthLog({
order_id: orderProduct.id,
product_id: orderProduct.product_id,
platform_name: app.name,
platform_id: app.id,
spended_num: trade.trade_amt,
user_name: params.idName, // 使用方
actual_spend_name: app.merchant_name,// 实际使用方
engine_trade_id: trade.id,
pass: pass ? 1 : 0
});
console.log(logres);
// 4. 返回认证结果
return system.getResultSuccess({pass: pass}, res.msg);
}
// 交易
async trade(orderProduct) {
async trade(params) {
let orderProduct = params.orderProduct;
let trade_amt = 1;
if (orderProduct == 2) {
trade_amt = Number(orderProduct.price);
}
let tradeLog = await this.tradelogDao.create({
requestid: params.requestid,
merchant_id: orderProduct.merchant_id,
product_id: orderProduct.product_id,
product_specifications: orderProduct.product_specifications,
trade_amt: trade_amt,
result: 0,
});
let tradeRes = await this.feeSve.trade({
account_id: orderProduct.engine_account_id,
trade_amt: orderProduct.product_specifications,
trade_amt: trade_amt,
trade_no: tradeLog.id,
trade_desc: "二要素验证",
});
......@@ -81,10 +168,10 @@ class AuthService extends ServiceBase {
tradeLog.fee = 0;
tradeLog.fee_remark = "扣费失败," + tradeRes.msg;
await tradeLog.save();
return system.getResult(1002001, "扣费失败," + tradeRes.msg);
return system.getResultFail(1002001, "扣费失败," + tradeRes.msg);
} else {
tradeLog.result = 1;
tradeLog.fee = 1
tradeLog.fee = 1;
tradeLog.fee_remark = "扣费成功";
await tradeLog.save();
}
......
......@@ -4,10 +4,35 @@ const ServiceBase = require("../../svems.base")
class AuthService extends ServiceBase {
constructor() {
super();
this.feeSve = system.getObject("service.fee.feeSve");
this.orderSve = system.getObject("service.order.orderSve");
this.orderauthlogSve = system.getObject("service.order.orderauthlogSve");
this.enginesignSve = system.getObject("service.engine.enginesignSve");
this.tradelogDao = system.getObject("db.common.tradelogDao");
}
async createAccount(params) {
try {
// 通过应用id查询商户订单信息,确定产品认证接口
// 验证参数
let idName = this.trim(params.idName);
let idNo = this.trim(params.idNo).toUpperCase();
let mobile = this.trim(params.mobile);
if (!idName) {
return system.getResultFail(1000000, "姓名错误");
}
if (!idNo) {
return system.getResultFail(1000000, "身份证错误");
}
params.apiName = "sign@";
return this.operatorSign(params, async (p) => {
// 调用创建账户API
let validRes = await this.enginesignSve.createAccount({
id_name: idName,
id_no: idNo,
mobile: mobile,
channel: p.orderProduct.channel,
});
return validRes;
});
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
......@@ -24,6 +49,92 @@ class AuthService extends ServiceBase {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async operatorSign(params, operatorMethod) {
let app = params.app;
let merchantId = app.merchant_id;
let isFee = params.isFee;
// 获取订单产品
let orderProduct = await this.orderSve.getMerchantOrderProduct(merchantId, params.apiName);
if (orderProduct.status !== 0) {
return orderProduct;
}
orderProduct = orderProduct.data;
params.orderProduct = orderProduct;
// 扣费
let tradeLog;
let trade;
if (isFee) {
let tres = await this.trade(params);
if (tres.status !== 0) {
return tres;
}
trade = tres.data.trade;
}
// 2. 调用签约引擎接口
let res = await operatorMethod(params);
if (isFee) {
// 生成订单
let logres = await this.orderauthlogSve.saveEorderAuthLog({
order_id: orderProduct.id,
product_id: orderProduct.product_id,
platform_name: app.name,
platform_id: app.id,
spended_num: trade.trade_amt,
user_name: params.idName, // 使用方
actual_spend_name: app.merchant_name,// 实际使用方
engine_trade_id: trade.id,
pass: pass ? 1 : 0
});
console.log(logres);
}
// 4. 返回认证结果
return system.getResultSuccess("TODO 返回具体参数", res.msg);
}
// 交易
async trade(params) {
let orderProduct = params.orderProduct;
let trade_amt = 1;
if (orderProduct == 2) {
trade_amt = Number(orderProduct.price);
}
let tradeLog = await this.tradelogDao.create({
requestid: params.requestid,
merchant_id: orderProduct.merchant_id,
product_id: orderProduct.product_id,
trade_amt: trade_amt,
result: 0,
});
let tradeRes = await this.feeSve.trade({
account_id: orderProduct.engine_account_id,
trade_amt: trade_amt,
trade_no: tradeLog.id,
trade_desc: "二要素验证",
});
if (tradeRes.status !== 0) {
tradeLog.result = 2;
tradeLog.fee = 0;
tradeLog.fee_remark = "扣费失败," + tradeRes.msg;
await tradeLog.save();
return system.getResultFail(1002001, "扣费失败," + tradeRes.msg);
} else {
tradeLog.result = 1;
tradeLog.fee = 1;
tradeLog.fee_remark = "扣费成功";
await tradeLog.save();
}
return system.getResultSuccess({
tradeLog: tradeLog,
trade: tradeRes.data
})
}
}
module.exports = AuthService;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment