Commit 83227084 by 王昆

gsb

parent 221c9c87
...@@ -64,12 +64,20 @@ class APIBase extends DocBase { ...@@ -64,12 +64,20 @@ class APIBase extends DocBase {
let sign = md5(signStr).toUpperCase(); let sign = md5(signStr).toUpperCase();
console.log(params.sign, signStr, sign); console.log(params.sign, signStr, sign);
if (params.sign != sign) { if (params.sign != sign) {
return system.getResultFail(1001001, "签名验证失败"); return system.getResultFail(1001001, this.getSignErrorMsg(sign));
} }
params.app = app; params.app = app;
return system.getResultSuccess(); return system.getResultSuccess();
} }
getSignErrorMsg(sign) {
let signErrorMsg = "签名验证失败";
if (settings.env == "dev") {
signErrorMsg = signErrorMsg + "---" + sign;
}
return signErrorMsg;
}
async checkSign(gname, params) { async checkSign(gname, params) {
if (this.SIGN_GNAME.indexOf(gname) != -1) { if (this.SIGN_GNAME.indexOf(gname) != -1) {
return await this.validSign(params); return await this.validSign(params);
......
...@@ -8,7 +8,30 @@ class TestAPI extends APIBase { ...@@ -8,7 +8,30 @@ class TestAPI extends APIBase {
} }
async nameTwo(pobj, query, req) { 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() { 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) => { ...@@ -6,15 +6,18 @@ module.exports = (db, DataTypes) => {
requestid: DataTypes.STRING, requestid: DataTypes.STRING,
merchant_id: DataTypes.STRING, merchant_id: DataTypes.STRING,
product_id: DataTypes.STRING, product_id: DataTypes.STRING,
product_specifications: DataTypes.BIGINT, trade_amt: DataTypes.BIGINT,
result: DataTypes.INTEGER, result: DataTypes.INTEGER,
fee: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
fee_remark: DataTypes.STRING,
}, { }, {
paranoid: false,//假的删除 paranoid: false,//假的删除
underscored: true, underscored: true,
version: true, version: true,
freezeTableName: true, freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true, //freezeTableName: true,
// define the table's name // define the table's name
tableName: 'api_trade_log', tableName: 'api_trade_log',
......
...@@ -11,7 +11,7 @@ class OrderService extends ServiceBase { ...@@ -11,7 +11,7 @@ class OrderService extends ServiceBase {
async getMerchantOrderProduct(merchantId, apiPrev) { async getMerchantOrderProduct(merchantId, apiPrev) {
let orderProductList = await this.orderproductSve.getMerchantLiveProduct({merchant_id: merchantId}); let orderProductList = await this.orderproductSve.getMerchantLiveProduct({merchant_id: merchantId});
if (!orderProductList || orderProductList.length == 0) { if (!orderProductList || orderProductList.length == 0) {
return system.getResult(1002001, "暂无可用订单,请先下单"); return system.getResultFail(1002001, "暂无可用订单,请先下单");
} }
let productIds = []; let productIds = [];
...@@ -31,7 +31,7 @@ class OrderService extends ServiceBase { ...@@ -31,7 +31,7 @@ class OrderService extends ServiceBase {
} }
} }
if (!orderProduct) { if (!orderProduct) {
return system.getResult(1002002, "订单未设置该产品"); return system.getResultFail(1002002, "订单未设置该产品");
} }
return system.getResultSuccess(orderProduct); 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 { ...@@ -8,71 +8,158 @@ class AuthService extends ServiceBase {
this.feeSve = system.getObject("service.fee.feeSve"); this.feeSve = system.getObject("service.fee.feeSve");
this.orderSve = system.getObject("service.order.orderSve"); 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"); this.tradelogDao = system.getObject("db.common.tradelogDao");
} }
async nameTwo(params) { async nameTwo(params) {
try { try {
// 通过应用id查询商户订单信息,确定产品认证接口 let idName = this.trim(params.idName);
let app = params.app; let idNo = this.trim(params.idNo).toUpperCase();
let merchantId = app.merchant_id; if (!idName) {
return system.getResultFail(1000000, "姓名错误");
// 获取订单产品 }
let orderProduct = await this.orderSve.getMerchantOrderProduct(merchantId, "nameTwo"); if (!idNo) {
if (orderProduct.status !== 0) { return system.getResultFail(1000000, "身份证错误");
return orderProduct;
} }
params.orderProduct = orderProduct.data; params.apiName = "nameTwo";
return this.doAuth(params); 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) { } catch (error) {
console.log(error); console.log(error);
return system.getResult(null, `系统错误 错误信息 ${error}`); return system.getResultFail(500, `系统错误 错误信息 ${error}`);
} }
} }
async bankThree(params) { async bankThree(params) {
try { 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) { } catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`); return system.getResult(null, `系统错误 错误信息 ${error}`);
} }
} }
async bankFour(params) { async bankFour(params) {
try { 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) { } catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`); return system.getResult(null, `系统错误 错误信息 ${error}`);
} }
} }
async doAuth(params) { async authentication(params, validMethod) {
let orderProduct = params.orderProduct; 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) { if (tres.status !== 0) {
return tres; return tres;
} }
let tradeLog = tres.data.tradeLog; let tradeLog = tres.data.tradeLog;
let trade = tres.data.trade; 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. 返回认证结果 // 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({ let tradeLog = await this.tradelogDao.create({
requestid: params.requestid, requestid: params.requestid,
merchant_id: orderProduct.merchant_id, merchant_id: orderProduct.merchant_id,
product_id: orderProduct.product_id, product_id: orderProduct.product_id,
product_specifications: orderProduct.product_specifications, trade_amt: trade_amt,
result: 0, result: 0,
}); });
let tradeRes = await this.feeSve.trade({ let tradeRes = await this.feeSve.trade({
account_id: orderProduct.engine_account_id, account_id: orderProduct.engine_account_id,
trade_amt: orderProduct.product_specifications, trade_amt: trade_amt,
trade_no: tradeLog.id, trade_no: tradeLog.id,
trade_desc: "二要素验证", trade_desc: "二要素验证",
}); });
...@@ -81,10 +168,10 @@ class AuthService extends ServiceBase { ...@@ -81,10 +168,10 @@ class AuthService extends ServiceBase {
tradeLog.fee = 0; tradeLog.fee = 0;
tradeLog.fee_remark = "扣费失败," + tradeRes.msg; tradeLog.fee_remark = "扣费失败," + tradeRes.msg;
await tradeLog.save(); await tradeLog.save();
return system.getResult(1002001, "扣费失败," + tradeRes.msg); return system.getResultFail(1002001, "扣费失败," + tradeRes.msg);
} else { } else {
tradeLog.result = 1; tradeLog.result = 1;
tradeLog.fee = 1 tradeLog.fee = 1;
tradeLog.fee_remark = "扣费成功"; tradeLog.fee_remark = "扣费成功";
await tradeLog.save(); await tradeLog.save();
} }
......
...@@ -4,10 +4,35 @@ const ServiceBase = require("../../svems.base") ...@@ -4,10 +4,35 @@ const ServiceBase = require("../../svems.base")
class AuthService extends ServiceBase { class AuthService extends ServiceBase {
constructor() { constructor() {
super(); 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) { async createAccount(params) {
try { 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) { } catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`); return system.getResult(null, `系统错误 错误信息 ${error}`);
} }
...@@ -24,6 +49,92 @@ class AuthService extends ServiceBase { ...@@ -24,6 +49,92 @@ class AuthService extends ServiceBase {
return system.getResult(null, `系统错误 错误信息 ${error}`); 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; 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