Commit 92242122 by 宋毅

tj

parent a99d50c7
......@@ -5,6 +5,7 @@ const sha256 = require('sha256');
const md5 = require("MD5");
class APIBase {
constructor() {
this.execClientNew = system.getObject("util.execClientNew");
this.restClient = system.getObject("util.restClient");
this.redisClient = system.getObject("util.redisClient");
this.cacheManager = system.getObject("db.common.cacheManager");
......@@ -31,26 +32,29 @@ class APIBase {
if (cacheRes) {
return JSON.parse(cacheRes);
}
var rtn = await this[methodname](pobj, query, req);
var result = await this[methodname](pobj, query, req);
this.logCtl.createDb({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId,
op: req.classname + "/" + methodname,
content: JSON.stringify(pobj),
resultInfo: JSON.stringify(rtn),
resultInfo: JSON.stringify(result),
clientIp: req.clientIp,
agent: req.uagent,
opTitle: "api服务提供方appKey:" + settings.appKey,
});
rtn.requestId = req.requestId;
if(this.cacheMethodList.indexOf(methodname)>=0 && rtn.status && rtn.status==0){
result.requestId = req.requestId;
if (this.cacheMethodList.indexOf(methodname) >= 0 && result.status && result.status == 0) {
//保存缓存
await this.redisClient.setWithEx(shaStr, JSON.stringify(rtn), 3600);
await this.redisClient.setWithEx(shaStr, JSON.stringify(result), 3600);
}
return rtn;
result.requestId = pobj.RequestId ? pobj.RequestId : pobj.requestId || this.getUUID();
var tmpResult = pobj.actionType && pobj.actionType.indexOf("List") < 0 ? result : { status: result.status, message: result.message, requestId: result.requestId };
this.execClientNew.execLogs("reqPath:" + req.path, pobj, "center-channel-doexecMethod", tmpResult, null);
return result;
} catch (e) {
console.log(e.stack, "api调用出现异常,请联系管理员..........")
console.log(e.stack, "api调用出现异常,请联系管理员..........");
this.logCtl.createDb({
appid: req.app.id,
appkey: req.app.uappKey,
......@@ -62,16 +66,17 @@ class APIBase {
agent: req.uagent,
opTitle: "api调用出现异常,请联系管理员error,appKey:" + settings.appKey,
});
this.logCtl.error({
appid: req.app.id,
appkey: req.app.uappKey,
requestId: req.requestId,
op: req.classname + "/" + methodname,
content: e.stack,
clientIp: pobj.clientIp,
agent: req.uagent,
optitle: "api调用出现异常,请联系管理员",
});
// this.logCtl.error({
// appid: req.app.id,
// appkey: req.app.uappKey,
// requestId: req.requestId,
// op: req.classname + "/" + methodname,
// content: e.stack,
// clientIp: pobj.clientIp,
// agent: req.uagent,
// optitle: "api调用出现异常,请联系管理员",
// });
this.execClientNew.execLogs("reqPath异常:" + req.path, pobj, "center-channel-doexecMethod", tmpResult, null);
var rtnerror = system.getResultFail(-200, "出现异常,error:" + e.stack);
rtnerror.requestId = req.requestId;
return rtnerror;
......@@ -88,5 +93,18 @@ class APIBase {
var result = JSON.parse(rtn.stdout);
return result;
}
/**
* 带超时时间的post请求
* @param {*} req 请求信息
* @param {*} params 请求数据-json格式
* @param {*} url 请求地址
* @param {*} ContentType 请求头类型,默认application/json
* @param {*} headData 请求头内容-json格式,如:请求头中传递token,格式:{token:"9098902q849q0434q09439"}
* @param {*} timeOut 超时时间
*/
async execPostByTimeOut(req, params, url, ContentType, headData, timeOut = 60) {
const result = await this.execClientNew.execPostTimeOutByBusiness('sve.base', params, url, ContentType, headData, timeOut, req);
return result;
}
}
module.exports = APIBase;
......@@ -23,7 +23,7 @@ class ProductAPI extends WEBBase {
var opResult = null;
switch (action_type) {
case "getIndustryInfo":// 获取行业信息
opResult = await this.utilsUcommuneSve.getUserInfo(pobj, pobj.actionBody);
opResult = await this.utilsUcommuneSve.getUserInfo(req, pobj, pobj.actionBody);
break;
case "placeOrder":// 提交订单
opResult = await this.utilsUcommuneSve.getOrderList(pobj, pobj.actionBody);
......
......@@ -23,7 +23,7 @@ class ProductAPI extends WEBBase {
var opResult = null;
switch (action_type) {
case "getUserInfo":// 根据优客token获取用户信息,生成userPin返回前端 actionBody
opResult = await this.utilsUcommuneSve.getUserInfo(pobj, pobj.actionBody);
opResult = await this.utilsUcommuneSve.getUserInfo(req, pobj, pobj.actionBody);
break;
case "orderTotalSum":// addOrder后进入支付页面获取支付金额
opResult = await this.utilsUcommuneSve.orderTotalSum(pobj, pobj.actionBody);
......
......@@ -29,18 +29,17 @@ class AccessAuthAPI extends WEBBase {
switch (action_type) {
// sy
case "test"://测试
var rpcParam = {
accessKeyId: "LTAI4Fgz1uoUpfHpa79iq3XV",
accessKeySecret: "up8vlX0wzwCVtRAjKRXsCrFta6CHOY",
endpoint: "https://trademark.aliyuncs.com",
apiVersion: "2019-09-02"
};
opResult = await this.utilsTmAliyunSve.getAliOssInfo(null, "ATTORNEY", rpcParam);
// var rpcParam = {
// accessKeyId: "LTAI4Fgz1uoUpfHpa79iq3XV",
// accessKeySecret: "up8vlX0wzwCVtRAjKRXsCrFta6CHOY",
// endpoint: "https://trademark.aliyuncs.com",
// apiVersion: "2019-09-02"
// };
// opResult = await this.utilsTmAliyunSve.getAliOssInfo(null, "ATTORNEY", rpcParam);
// opResult = system.getResultSuccess(null, "测试成功");
opResult = system.getResultSuccess(null, "测试成功");
break;
case "getTokenInfo"://渠道通过账户进行登录,有则返回用户信息,没有则创建用户
opResult = system.getResultSuccess({
app_code: pobj.appInfo.app_code,
app_hosts: pobj.appInfo.app_hosts,
......@@ -48,10 +47,9 @@ class AccessAuthAPI extends WEBBase {
uapp_key: pobj.appInfo.uapp_key,
id: pobj.appInfo.id
})
break;
case "getNeedUserPinByChannelUserId"://渠道通过账户进行登录,有则返回用户信息,没有则创建用户
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(req, pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
......@@ -70,7 +68,7 @@ class AccessAuthAPI extends WEBBase {
opResult.data.typeCode = needResult.data.typeCode
break;
case "getLoginByUserName"://渠道通过账户进行登录,有则返回用户信息,没有则创建用户
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(req, pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
......@@ -80,16 +78,16 @@ class AccessAuthAPI extends WEBBase {
opResult.data.userpin = tmpOpResult.data.userpin;
}
break;
case "getVerifyCode"://获取默认模板的手机验证码
opResult = await this.utilsAuthSve.getVerifyCodeByMoblie(pobj, pobj.actionBody);
case "getVerifyCode"://获取默认模板的手机验证码---已优化
opResult = await this.utilsAuthSve.getVerifyCodeByMoblie(req, pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess()
}
break;
case "userPinByLgoin"://通过账户和密码登录
opResult = await this.utilsAuthSve.getReqUserPinByLgoin(pobj, pobj.actionBody);
case "userPinByLgoin"://通过账户和密码登录---已优化
opResult = await this.utilsAuthSve.getReqUserPinByLgoin(req, pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess({ userpin: pobj.actionBody.userpin })
return opResult;
}
break;
case "userTestLogin": // 假登陆
......@@ -98,30 +96,30 @@ class AccessAuthAPI extends WEBBase {
} else {
return system.getResultFail(-1, '用户名或密码错误')
}
case "userPinByLgoinVcode"://通过短信登录信息
case "userPinByLgoinVcode"://通过短信登录信息---已优化
pobj.actionBody.reqType = "login";
opResult = await this.utilsAuthSve.getReqUserPinByLgoinVcode(pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess({ userpin: pobj.actionBody.userpin })
}
break;
case "userPinByRegister"://通过短信注册信息
case "userPinByRegister"://通过短信注册信息---已优化
pobj.actionBody.reqType = "reg";
opResult = await this.utilsAuthSve.getReqUserPinByLgoinVcode(pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess({ userpin: pobj.actionBody.userpin })
}
break;
case "putUserPwdByMobile"://通过手机验证码修改用户密码
case "putUserPwdByMobile"://通过手机验证码修改用户密码---已优化
opResult = await this.utilsAuthSve.putUserPwdByMobile(pobj, pobj.actionBody);
break;
case "getLoginInfo"://通过userpin获取用户登录信息
case "getLoginInfo"://通过userpin获取用户登录信息--已经废弃,在路由中处理了
opResult = await this.utilsAuthSve.getLoginInfo(pobj, pobj.actionBody);
break;
case "channelUserLogin":
opResult = await this.utilsAuthSve.channelUserLogin(pobj,pobj.actionBody,req);
opResult = await this.utilsAuthSve.channelUserLogin(pobj, pobj.actionBody, req);
break;
case "logout"://用户退出
case "logout"://用户退出--已经废弃,前端自己进行移除userpin信息
opResult = await this.utilsAuthSve.userLogout(pobj, pobj.actionBody);
break;
default:
......@@ -140,11 +138,8 @@ class AccessAuthAPI extends WEBBase {
var token = this.getUUID();
pobj.actionBody.reqType = "hosts";
var opResult = await this.utilsAuthSve.getReqTokenByHosts(pobj.actionBody, token);
if (opResult.status != 0) {
return opResult;
}
return system.getResultSuccess({ token: token })
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
......@@ -153,10 +148,7 @@ class AccessAuthAPI extends WEBBase {
var token = this.getUUID();
pobj.actionBody.reqType = "appkey";
var opResult = await this.utilsAuthSve.getReqTokenByHosts(pobj.actionBody, token);
if (opResult.status != 0) {
return opResult;
}
return system.getResultSuccess({ token: token })
}
}
module.exports = AccessAuthAPI;
\ No newline at end of file
......@@ -42,7 +42,7 @@ class ChannelAccessAuthAPI extends WEBBase {
pobj.actionBody.channelUserId = aliUserResult.data.channelUserId;
pobj.actionBody.isAdmin = aliUserResult.data.isAdmin;
pobj.actionBody.isSuper = aliUserResult.data.isSuper;
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(req, pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
......
......@@ -32,7 +32,7 @@ class AccessAuthAPI extends APIBase {
opResult = system.getResultSuccess(null, "测试成功");
break;
case "getLoginByUserName"://渠道通过账户进行登录,有则返回用户信息,没有则创建用户
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(req, pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
......@@ -43,15 +43,15 @@ class AccessAuthAPI extends APIBase {
}
break;
case "getVerifyCode"://获取默认模板的手机验证码
opResult = await this.utilsAuthSve.getVerifyCodeByMoblie(pobj, pobj.actionBody);
opResult = await this.utilsAuthSve.getVerifyCodeByMoblie(req, pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess()
}
break;
case "userPinByLgoin"://通过账户和密码登录
opResult = await this.utilsAuthSve.getReqUserPinByLgoin(pobj, pobj.actionBody);
opResult = await this.utilsAuthSve.getReqUserPinByLgoin(req, pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess({ userpin: pobj.actionBody.userpin })
return opResult;
}
break;
case "userPinByLgoinVcode"://通过短信登录信息
......
......@@ -26,15 +26,15 @@ class edi extends APIBase {
var opResult = null;
switch (action_type) {
case "submitNeedAliEsp":
opResult = await this.utilsNeedSve.submitNeedAliEsp(pobj,pobj.actionBody);
opResult = await this.utilsNeedSve.submitNeedAliEsp(pobj, pobj.actionBody);
break;
case "needCloseAliEsp":
opResult = await this.utilsNeedSve.needCloseAliEsp(pobj,pobj.actionBody);
opResult = await this.utilsNeedSve.needCloseAliEsp(pobj, pobj.actionBody);
break;
case "produceNoticeAliEsp":
opResult = await this.utilsNeedSve.ediNotify(pobj, pobj.actionBody);
if (opResult.status == 0) {
opResult = await this.utilsNeedSve.produceNoticeAliEsp(pobj,pobj.actionBody);
opResult = await this.utilsNeedSve.produceNoticeAliEsp(req, pobj, pobj.actionBody);
}
break;
case "soulutionFeebackAliEsp":
......
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class AppTokenByHostsCache extends CacheBase {
class AppTokenByHostsCache extends CacheBase {//----废弃--sy-2020-10-21
constructor() {
super();
this.restClient = system.getObject("util.restClient");
......@@ -16,7 +16,7 @@ class AppTokenByHostsCache extends CacheBase {
var actionBody = val;
var acckapp = await this.restClient.execPost(actionBody, settings.centerAppUrl() + "auth/accessAuth/getTokenByHosts");
var result = acckapp.stdout;
console.log(acckapp.stdout, "AppTokenByHostsCache............. acckapp.stdout..........");
// console.log(acckapp.stdout, "AppTokenByHostsCache............. acckapp.stdout..........");
if (result) {
var tmp = JSON.parse(result);
return tmp;
......
......@@ -3,10 +3,13 @@ const moment = require('moment')
const settings = require("../../config/settings");
const md5 = require("MD5");
const uuidv4 = require('uuid/v4');
const cryptoJS = require('crypto-js');
class AppServiceBase {
constructor() {
this.restClient = system.getObject("util.restClient");
this.execClient = system.getObject("util.execClient");
this.execClientNew = system.getObject("util.execClientNew");
this.execClient = system.getObject('util.execClient');
this.cacheManager = system.getObject("db.common.cacheManager");
this.pushlogSve = system.getObject("service.common.pushlogSve");
this.pushlogFailType = { OLDRPC: 1, NEWRPC: 2, FAILLOG: 3, FQ: 4 };
......@@ -365,7 +368,7 @@ class AppServiceBase {
返回20位业务订单号
prefix:业务前缀
*/
async getBusUid(prefix) {
async getBusUid(prefix) {
prefix = (prefix || "");
if (prefix) {
prefix = prefix.toUpperCase();
......@@ -383,7 +386,7 @@ class AppServiceBase {
len:返回长度
radix:参与计算的长度,最大为62
*/
async getUidInfo(len, radix) {
async getUidInfo(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36
var uuid = [], i;
radix = radix || chars.length;
......@@ -407,5 +410,58 @@ class AppServiceBase {
var u = uuid.replace(/\-/g, "");
return u;
}
/**
* 加密信息
* @param {*} encrypt_key
* @param {*} encrypt_secret
* @param {*} opStr
*/
async encryptStr(encrypt_key, encrypt_secret, opStr) {
if (!opStr) {
return system.getResult(null, "opStr is empty");
}
let keyHex = cryptoJS.enc.Utf8.parse(encrypt_key);
let ivHex = cryptoJS.enc.Utf8.parse(encrypt_secret.substring(0, 8));
var cipherStr = cryptoJS.TripleDES.encrypt(opStr, keyHex, { iv: ivHex }).toString();
return cipherStr;
}
/**
* 解密信息
* @param {*} encrypt_key
* @param {*} encrypt_secret
* @param {*} opStr
*/
async decryptStr(encrypt_key, encrypt_secret, opStr) {
if (!opStr) {
return system.getResult(null, "opStr is empty");
}
try {
let keyHex = cryptoJS.enc.Utf8.parse(encrypt_key);
let ivHex = cryptoJS.enc.Utf8.parse(encrypt_secret.substring(0, 8));
var bytes = cryptoJS.TripleDES.decrypt(opStr, keyHex, {
iv: ivHex
});
var plaintext = bytes.toString(cryptoJS.enc.Utf8);
if (!plaintext) {
return system.getResult(null, "解密失败" + opStr);
}
return system.getResultSuccess(plaintext);
} catch (error) {
return system.getResultFail(-200, "解密异常:" + opStr);
}
}
/**
* 带超时时间的post请求
* @param {*} req 请求信息
* @param {*} params 请求数据-json格式
* @param {*} url 请求地址
* @param {*} ContentType 请求头类型,默认application/json
* @param {*} headData 请求头内容-json格式,如:请求头中传递token,格式:{token:"9098902q849q0434q09439"}
* @param {*} timeOut 超时时间
*/
async execPostByTimeOut(req, params, url, ContentType, headData, timeOut = 60) {
const result = await this.execClientNew.execPostTimeOutByBusiness('sve.base', params, url, ContentType, headData, timeOut, req);
return result;
}
}
module.exports = AppServiceBase;
var system = require("../../../system");
var settings = require("../../../../config/settings");
const system = require("../../../system");
const settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
const logCtl = system.getObject("service.common.oplogSve");
const jwt = require('jsonwebtoken');
const { PDICT } = require("../../../../config/businessConfig");
//用户权限操作
class UtilsAuthService extends AppServiceBase {
constructor() {
......@@ -10,7 +11,15 @@ class UtilsAuthService extends AppServiceBase {
}
//---------------登录-----------------------------------------------------
async getReqTokenByHosts(actionBody, tokenValue) { //获取token
/**
* 解密信息
* @param {*} encryptStr 加密字符串
*/
async decryptInfo(encryptStr) {
var result = await this.decryptStr(PDICT.encrypt_key, PDICT.encrypt_secret, encryptStr);
return result;
}
async getReqTokenByHosts(actionBody, req) { //获取token----改成jwt方式--sy-2020-10-21
if (["hosts", "appkey"].indexOf(actionBody.reqType) < 0) {
return system.getResult(null, "actionBody.reqType is error");
}
......@@ -27,46 +36,94 @@ class UtilsAuthService extends AppServiceBase {
return system.getResult(null, "actionBody.secret can not be empty");
}
}
var result = await this.cacheManager["AppTokenByHostsCache"].cache(tokenValue, actionBody, system.exTime);
return result;
var tmpResult = await this.execPostByTimeOut(req, actionBody, settings.centerAppUrl() + "auth/accessAuth/getTokenByHosts");
if (!tmpResult || tmpResult.status != 0) {
return system.getResult(null, "data is empty");
}
if (!tmpResult.data || tmpResult.data.status != 0) {
return system.getResult(null, "data is empty!");
}
let encrypt_info = await this.encryptStr(PDICT.encrypt_key, PDICT.encrypt_secret, JSON.stringify(tmpResult.data.data));
let bodyInfo = {
env: settings.env,
id: tmpResult.data.data.id,
uapp_id: tmpResult.data.data.uapp_id,
token_secret: encrypt_info
};
const tokenSecret = settings.env == "localhost" || settings.env == "dev" ? PDICT.token_secret_dev : PDICT.token_secret_prod;
//生成tokenid
const tokenid = jwt.sign(bodyInfo, tokenSecret, { // expiresIn:过期时间单位是秒
expiresIn: 60 * 60 * 4 //单位秒,4小时
});
return system.getResultSuccess({ token: tokenid });
}
/**
* 渠道通过账户进行登录,有则返回用户信息,没有则创建用户
* @param {*} pobj
* @param {*} actionBody {channelUserId:XX}
*/
async getLoginByUserName(pobj, actionBody) {//渠道通过账户进行登录,有则返回用户信息,没有则创建用户---actionBody.channelUserId
async getLoginByUserName(req, pobj, actionBody) {//渠道通过账户进行登录,有则返回用户信息,没有则创建用户---actionBody.channelUserId
if (!actionBody.channelUserId) {
return system.getResult(null, "actionBody.channelUserId can not be empty");
}
var acckapp = await this.restClient.execPost(pobj, settings.centerAppUrl() + "auth/accessAuth/getLoginByUserName");
var result = acckapp.stdout;
if (result) {
var tmp = JSON.parse(result);
return tmp;
}
var tmpResult = await this.execPostByTimeOut(req, pobj, settings.centerAppUrl() + "auth/accessAuth/getLoginByUserName");
if (!tmpResult || tmpResult.status != 0) {
return system.getResult(null, "data is empty");
}
if (!tmpResult.data || tmpResult.data.status != 0) {
return system.getResult(null, "data is empty!");
}
let encrypt_info = await this.encryptStr(PDICT.encrypt_key, PDICT.encrypt_secret, JSON.stringify(tmpResult.data.data));
let bodyInfo = {
env: settings.env,
user_id: tmpResult.data.data.id,
uapp_id: tmpResult.data.data.uapp_id,
userpin_secret: encrypt_info
};
const tokenSecret = settings.env == "localhost" || settings.env == "dev" ? PDICT.token_secret_dev : PDICT.token_secret_prod;
//生成tokenid
const tokenid = jwt.sign(bodyInfo, tokenSecret, { // expiresIn:过期时间单位是秒
expiresIn: 60 * 60 * 4 //单位秒,4小时
});
return system.getResultSuccess({ userpin: tokenid });
}
/**
* 通过账户和密码登录
* @param {*} req
* @param {*} pobj
* @param {*} actionBody {userName:XX,password:XXX}
*/
async getReqUserPinByLgoin(pobj, actionBody) {
async getReqUserPinByLgoin(req, pobj, actionBody) {
if (!actionBody.userName) {
return system.getResult(null, "actionBody.userName can not be empty");
return system.getResult(null, "用户名不能为空");
}
if (!actionBody.password) {
return system.getResult(null, "actionBody.password can not be empty");
}
var acckapp = await this.restClient.execPost(pobj, settings.centerAppUrl() + "auth/accessAuth/login");
var result = acckapp.stdout;
if (result) {
var tmp = JSON.parse(result);
return tmp;
}
return system.getResult(null, "data is empty");
return system.getResult(null, "密码不能为空");
}
var tmpResult = await this.execPostByTimeOut(req, pobj, settings.centerAppUrl() + "auth/accessAuth/login");
if (!tmpResult || tmpResult.status != 0) {
return system.getResult(null, "用户名或密码错误");
}
if (!tmpResult.data || tmpResult.data.status != 0) {
return system.getResult(null, "用户名或密码错误!");
}
let encrypt_info = await this.encryptStr(PDICT.encrypt_key, PDICT.encrypt_secret, JSON.stringify(tmpResult.data.data));
let bodyInfo = {
env: settings.env,
user_id: tmpResult.data.data.id,
uapp_id: tmpResult.data.data.uapp_id,
userpin_secret: encrypt_info
};
const tokenSecret = settings.env == "localhost" || settings.env == "dev" ? PDICT.token_secret_dev : PDICT.token_secret_prod;
//生成tokenid
const tokenid = jwt.sign(bodyInfo, tokenSecret, { // expiresIn:过期时间单位是秒
expiresIn: 60 * 60 * 4 //单位秒,4小时
});
return system.getResultSuccess({ userpin: tokenid });
}
/**
* 通过短信登录或注册信息
......@@ -75,35 +132,45 @@ class UtilsAuthService extends AppServiceBase {
*/
async getReqUserPinByLgoinVcode(pobj, actionBody) {
if (!actionBody.mobile) {
return system.getResult(null, "actionBody.mobile can not be empty");
return system.getResult(null, "电话号码不能为空");
}
if (!actionBody.vcode) {
return system.getResult(null, "actionBody.vcode can not be empty");
return system.getResult(null, "验证码不能为空");
}
if (actionBody.reqType == "reg") {
if (!actionBody.password) {
return system.getResult(null, "actionBody.password can not be empty");
}
}
var acckapp = await this.restClient.execPost(pobj, settings.centerAppUrl() + "auth/accessAuth/loginByVerifyCode");
var result = acckapp.stdout;
if (result) {
var tmp = JSON.parse(result);
return tmp;
const result = await this.execPostByTimeOut(req, pobj, this.centerAppUrl + "auth/accessAuth/loginByVerifyCode", null, null);
if (result.status === 0 && result.data.status != 0) {
return result.data;
}
// var acckapp = await this.restClient.execPost(pobj, settings.centerAppUrl() + "auth/accessAuth/loginByVerifyCode");
// var result = acckapp.stdout;
// if (result) {
// var tmp = JSON.parse(result);
// return tmp;
// }
return system.getResult(null, "data is empty");
}
/**
* 获取默认模板的手机验证码
* @param {*} req
* @param {*} pobj
* @param {*} actionBody {mobile:XXX}
*/
async getVerifyCodeByMoblie(pobj, actionBody) {
async getVerifyCodeByMoblie(req, pobj, actionBody) {
if (!actionBody.mobile) {
return system.getResult(null, "actionBody.mobile can not be empty !");
}
return await this.restPostUrl(pobj, this.centerAppUrl + "auth/accessAuth/getVerifyCodeByMoblie");
const result = await this.execPostByTimeOut(req, pobj, this.centerAppUrl + "auth/accessAuth/getVerifyCodeByMoblie", null, null);
if (result.status === 0 && result.data.status != 0) {
return result.data;
}
return system.getResultSuccess();
}
/**
......@@ -166,23 +233,23 @@ class UtilsAuthService extends AppServiceBase {
* @param req
* @returns {Promise<void>}
*/
async channelUserLogin(pobj,actionBody,req){
async channelUserLogin(pobj, actionBody, req) {
//360登录地址
let skipUrl = '';
let opResult = system.getResult(null, "req Failure");
//----通过Authorization 获取用户信息
let Authorization = req.headers["authorization"] || "";
if(!Authorization){
if (!Authorization) {
opResult.data.redirectUrl = skipUrl;
opResult =system.getResultFail(-99,'用户未登录',{redirectUrl:'skipUrl'});
opResult = system.getResultFail(-99, '用户未登录', { redirectUrl: 'skipUrl' });
return opResult;
}
let icCompanyUrl = '';
let subData = {
Authorization:Authorization
Authorization: Authorization
}
let rtn = await this.execClient.execFqGet(subData,icCompanyUrl);
let rtn = await this.execClient.execFqGet(subData, icCompanyUrl);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPost data is empty");
}
......@@ -191,11 +258,11 @@ class UtilsAuthService extends AppServiceBase {
//---渠道用户登录,有则返回userpin ,没有则注册用户并返回userpin
let channelUserId = userInfo.mobile;
actionBody.channelUserId = channelUserId;
let loginRt = await this.getLoginByUserName(pobj,actionBody);
let loginRt = await this.getLoginByUserName(req, pobj, actionBody);
if (loginRt.status != 0 && loginRt.status != 2060) {
return loginRt;
}
opResult.data={ userpin: pobj.actionBody.userpin }
opResult.data = { userpin: pobj.actionBody.userpin }
if (loginRt.status == 2060) {
opResult.msg = loginRt.msg;
opResult.data.userpin = loginRt.data.userpin;
......
......@@ -5,14 +5,14 @@ const uuidv4 = require('uuid/v4');
/**
* 飞书小程序相关接口
*/
class UtilsFeishuService{
class UtilsFeishuService {
constructor() {
this.execClient = system.getObject("util.execClient");
this.cacheManager = system.getObject("db.common.cacheManager");
this.utilsAuthSve = system.getObject("service.utilsSve.utilsAuthSve");
this.appConfig={
app_id:"cli_9e28dcb1d637100d",
app_secret:"zL1uRrWFzwhFbLWZrmSuCh72JGjJXQg0"
this.appConfig = {
app_id: "cli_9e28dcb1d637100d",
app_secret: "zL1uRrWFzwhFbLWZrmSuCh72JGjJXQg0"
}
};
//飞书事件消息通知解密
......@@ -23,37 +23,37 @@ class UtilsFeishuService{
// return pobj;
// }
//飞书通知
async notify(pobj){
if(!pobj || !pobj.type){
async notify(pobj) {
if (!pobj || !pobj.type) {
return system.getResultFail("参数错误");
}
if(pobj.type=="url_verification"){//表示这是一个验证请求
if (pobj.type == "url_verification") {//表示这是一个验证请求
return this.subscribeVerification(pobj);
}
if(pobj.type=="event_callback"){//事件回调
if(!pobj.event){
if (pobj.type == "event_callback") {//事件回调
if (!pobj.event) {
return system.getResultFail("event参数错误");
}
var event = pobj.event;
if(event.type=="app_ticket"){//app_ticket 事件
if (event.type == "app_ticket") {//app_ticket 事件
return this.receiveAppTicket(pobj);
}else{
} else {
return system.getResultFail("未知事件");
}
}
return system.getResultFail("未知事件");
}
//订阅验证
async subscribeVerification(pobj){
if(pobj && pobj.challenge){
return {"challenge":pobj.challenge};
}else{
async subscribeVerification(pobj) {
if (pobj && pobj.challenge) {
return { "challenge": pobj.challenge };
} else {
return {};
}
}
//接收app_ticket
async receiveAppTicket(pobj){
if(pobj && pobj.event && pobj.event.app_ticket && pobj.event.type && pobj.event.type=="app_ticket"){
async receiveAppTicket(pobj) {
if (pobj && pobj.event && pobj.event.app_ticket && pobj.event.type && pobj.event.type == "app_ticket") {
//将app_ticket保存到缓存
await this.cacheManager["feishuAppTicketCache"].set(pobj.event.app_ticket);
return system.getResultSuccess();
......@@ -61,47 +61,47 @@ class UtilsFeishuService{
return system.getResultFail();
}
//重新推送app_ticket(主动触发)
async resendAppTicket(){
async resendAppTicket() {
var url = "https://open.feishu.cn/open-apis/auth/v3/app_ticket/resend";
var pobj = {
app_id:this.appConfig.app_id,//应用唯一标识,创建应用后获得
app_secret:this.appConfig.app_secret//应用秘钥,创建应用后获得
app_id: this.appConfig.app_id,//应用唯一标识,创建应用后获得
app_secret: this.appConfig.app_secret//应用秘钥,创建应用后获得
};
var rtn = await this.execClient.execPost(pobj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPost data is empty");
}
var result = JSON.parse(rtn.stdout);
if(result.code==0){
if (result.code == 0) {
return system.getResultSuccess();
}
return system.getResult(null, "execPost data is empty.错误码:"+result.code);
return system.getResult(null, "execPost data is empty.错误码:" + result.code);
}
//获取app_access_token(应用商店应用)
async getAppAccessToken(){
async getAppAccessToken() {
var appAccessToken = await this.cacheManager["feishuAppAccessTokenCache"].get();
if(appAccessToken){
if (appAccessToken) {
return system.getResultSuccess(appAccessToken);
}
var app_ticket = await this.cacheManager["feishuAppTicketCache"].get();
if(!app_ticket){
if (!app_ticket) {
await this.resendAppTicket();//重新推送app_ticket
return system.getResultFail("app_ticket不存在");
}
var url = "https://open.feishu.cn/open-apis/auth/v3/app_access_token";
var obj = {
app_id:this.appConfig.app_id,//应用唯一标识,创建应用后获得
app_secret:this.appConfig.app_secret,//应用秘钥,创建应用后获得
app_ticket:app_ticket//平台定时推送给应用的临时凭证,通过事件监听机制获得,详见订阅事件
app_id: this.appConfig.app_id,//应用唯一标识,创建应用后获得
app_secret: this.appConfig.app_secret,//应用秘钥,创建应用后获得
app_ticket: app_ticket//平台定时推送给应用的临时凭证,通过事件监听机制获得,详见订阅事件
};
var rtn = await this.execClient.execPost(obj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPost data is empty");
}
var result = JSON.parse(rtn.stdout);
if(result.code==0 && result.app_access_token){
if (result.code == 0 && result.app_access_token) {
//缓存AppAccessToken
await this.cacheManager["feishuAppAccessTokenCache"].set(result.app_access_token,result.expire);
await this.cacheManager["feishuAppAccessTokenCache"].set(result.app_access_token, result.expire);
return system.getResultSuccess(result.app_access_token);
}
return system.getResultFail("获取appAccessToken失败");
......@@ -110,55 +110,55 @@ class UtilsFeishuService{
//------------------------飞书网页开发---------------------------------------------------------------
//获取登录用户身份
async getUserAccessToken(obj){
async getUserAccessToken(obj) {
var resData = {};
if(obj.open_id){
if (obj.open_id) {
//缓存中获取登录用户身份
resData = await this.cacheManager["feishuUserAccessTokenCache"].get(obj.open_id);
}
//缓存中存在 直接返回
if(resData && resData.access_token){
if (resData && resData.access_token) {
return system.getResultSuccess(resData);
}
if(!obj.code){
if (!obj.code) {
return system.getResultFail("code参数不能为空");
}
if(!obj.app_access_token){
if (!obj.app_access_token) {
return system.getResultFail("app_access_token参数不能为空");
}
var url = "https://open.feishu.cn/open-apis/authen/v1/access_token";
var fsObj={
app_access_token:obj.app_access_token,//应用的 app_access_token,必须与请求身份验证中的应用保持一致
grant_type:"authorization_code",//在本流程中,此值为 authorization_code
code:obj.code //来自请求身份验证(新)流程,用户扫码登录后会自动302到redirect_uri并带上此参数
var fsObj = {
app_access_token: obj.app_access_token,//应用的 app_access_token,必须与请求身份验证中的应用保持一致
grant_type: "authorization_code",//在本流程中,此值为 authorization_code
code: obj.code //来自请求身份验证(新)流程,用户扫码登录后会自动302到redirect_uri并带上此参数
};
var rtn = await this.execClient.execPost(fsObj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPost data is empty");
}
var result = JSON.parse(rtn.stdout);
if(result.code==0 && result.data){
if (result.code == 0 && result.data) {
//缓存AppAccessToken
await this.cacheManager["feishuUserAccessTokenCache"].set(result.data,result.data.open_id);
await this.cacheManager["feishuUserAccessTokenCache"].set(result.data, result.data.open_id);
return system.getResultSuccess(result.data);
}
return system.getResult(null, "获取飞书登录用户身份失败");
}
//获取用户信息
async getUserInfo(pobj){
if(!pobj.user_access_token){
async getUserInfo(pobj) {
if (!pobj.user_access_token) {
return system.getResultFail("user_access_token参数不能为空")
}
var url = "https://open.feishu.cn/open-apis/authen/v1/user_info";
var obj = {
user_access_token:pobj.user_access_token
user_access_token: pobj.user_access_token
};
var rtn = await this.execClient.execFeishuGet(obj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPost data is empty");
}
var result = JSON.parse(rtn.stdout);
if(result.code==0 && result.data){
if (result.code == 0 && result.data) {
return system.getResultSuccess(result.data);
}
return system.getResult(null, "获取飞书用户信息失败");
......@@ -166,35 +166,35 @@ class UtilsFeishuService{
//------------------------飞书网页开发-------结束--------------------------------------------------------
//------------------------飞书小程序开发---------------------------------------------------------------
//获取登录用户身份 session_key 和 openId
async tokenLoginValidate(obj){
async tokenLoginValidate(obj) {
var resData = {};
if(obj.open_id){
if (obj.open_id) {
//缓存中获取登录用户身份
resData = await this.cacheManager["feishuUserAccessTokenCache"].get(obj.open_id);
}
//缓存中存在 直接返回
if(resData && resData.access_token){
if (resData && resData.access_token) {
return system.getResultSuccess(resData);
}
if(!obj.code){
if (!obj.code) {
return system.getResultFail("code参数不能为空");
}
if(!obj.app_access_token){
if (!obj.app_access_token) {
return system.getResultFail("app_access_token参数不能为空");
}
var url = "https://open.feishu.cn/open-apis/mina/v2/tokenLoginValidate";
var fsObj={
token:obj.app_access_token,//应用的 app_access_token,必须与请求身份验证中的应用保持一致
code:obj.code //来自请求身份验证(新)流程,用户扫码登录后会自动302到redirect_uri并带上此参数
var fsObj = {
token: obj.app_access_token,//应用的 app_access_token,必须与请求身份验证中的应用保持一致
code: obj.code //来自请求身份验证(新)流程,用户扫码登录后会自动302到redirect_uri并带上此参数
};
var rtn = await this.execClient.execFeishuPost(fsObj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPost data is empty");
}
var result = JSON.parse(rtn.stdout);
if(result.code==0 && result.data){
if (result.code == 0 && result.data) {
//缓存AppAccessToken
await this.cacheManager["feishuUserAccessTokenCache"].set(result.data,result.data.open_id);
await this.cacheManager["feishuUserAccessTokenCache"].set(result.data, result.data.open_id);
return system.getResultSuccess(result.data);
}
return system.getResult(null, "获取飞书登录用户身份失败");
......@@ -207,56 +207,56 @@ class UtilsFeishuService{
return u;
}
//用户登录/获取userpin
async checkAndLogin(pobj){
async checkAndLogin(req, pobj) {
// return system.getResultSuccess(null,"测试");
try {
if(!pobj.code){
if (!pobj.code) {
return system.getResultFail(-100, "code参数不能为空");
}
//获取 app_access_token(应用商店应用)
var appAccessTokenRes = await this.getAppAccessToken();
if(appAccessTokenRes.status!=0){
if (appAccessTokenRes.status != 0) {
return appAccessTokenRes;
}
var app_access_token = appAccessTokenRes.data;
//获取飞书登录用户身份
var userAccessTokenParams = {
"code":pobj.code,"app_access_token":app_access_token,"open_id":pobj.open_id || ""
"code": pobj.code, "app_access_token": app_access_token, "open_id": pobj.open_id || ""
};
// var userAccessTokenRes = await this.getUserAccessToken(userAccessTokenParams);
var userAccessTokenRes = await this.tokenLoginValidate(userAccessTokenParams);
if(userAccessTokenRes.status!=0){
if (userAccessTokenRes.status != 0) {
return userAccessTokenRes;
}
var userAccessTokenObj = userAccessTokenRes.data;
//获取飞书用户信息
var userInfoParams={
user_access_token:userAccessTokenObj.access_token
var userInfoParams = {
user_access_token: userAccessTokenObj.access_token
};
var userInfoRes = await this.getUserInfo(userInfoParams);
if(userInfoRes.status!=0){
if (userInfoRes.status != 0) {
return userInfoRes;
}
var userInfoObj = userInfoRes.data;
//帐号登录---若用户信息已存在 则返回userpin 不存在则返回空
var loginByUserNameParams={
"appInfo":pobj.appInfo,
var loginByUserNameParams = {
"appInfo": pobj.appInfo,
"actionType": "getLoginByUserName",
"actionBody": {
"openId":userAccessTokenObj.open_id,
"channelUserId":userAccessTokenObj.open_id,// Y 渠道用户ID
"channelUserName":userInfoObj.name,// N 渠道用户名
"nickName":userInfoObj.name, // N 用户昵称
"head_url":userInfoObj.avatar_url //头像
"openId": userAccessTokenObj.open_id,
"channelUserId": userAccessTokenObj.open_id,// Y 渠道用户ID
"channelUserName": userInfoObj.name,// N 渠道用户名
"nickName": userInfoObj.name, // N 用户昵称
"head_url": userInfoObj.avatar_url //头像
}
};
var loginByUserNameRes = await this.getLoginByUserName(loginByUserNameParams);
if(loginByUserNameRes && loginByUserNameRes.status==0){
var loginByUserNameRes = await this.getLoginByUserName(req, loginByUserNameParams);
if (loginByUserNameRes && loginByUserNameRes.status == 0) {
loginByUserNameRes.data.open_id = userAccessTokenObj.open_id;
// loginByUserNameRes.data.session_key = userAccessTokenObj.session_key;
return loginByUserNameRes;//获取userpin直接返回
......@@ -272,15 +272,15 @@ class UtilsFeishuService{
// var userInfoObj = userInfoRes.data;
} catch (e) {
return system.getResultFail(-200,e.stack);
return system.getResultFail(-200, e.stack);
}
return system.getResultFail(-100,"获取userpin失败");
return system.getResultFail(-100, "获取userpin失败");
}
//渠道通过账户进行登录,有则返回用户信息,没有则创建用户------>供后端调用
async getLoginByUserName(pobj){
async getLoginByUserName(req, pobj) {
pobj.actionBody.userpin = this.getUUID();
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(req, pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
......
......@@ -26,7 +26,7 @@ class UtilsNeedService extends AppServiceBase {
* @param {*} actionBody
*/
async submitNeed(pobj, actionBody) {
if(actionBody.type == "esp.wangwen" || actionBody.type == "esp.food") {
if (actionBody.type == "esp.wangwen" || actionBody.type == "esp.food") {
actionBody.area = this.wangwenAreaChange(actionBody.area)
}
if (!actionBody.intentionBizId) {
......@@ -70,7 +70,7 @@ class UtilsNeedService extends AppServiceBase {
}
}
if(pobj.actionBody.phone=="17319425791"){
if (pobj.actionBody.phone == "17319425791") {
pobj.actionBody.level = "F";
}
......@@ -362,7 +362,7 @@ class UtilsNeedService extends AppServiceBase {
}
actionBody.newuserOtherList = newuserOtherList;
}
if (actionBody.isDirectBuy&&(actionBody.status == 1||actionBody.status == 0)) {//已支付直购不调用
if (actionBody.isDirectBuy && (actionBody.status == 1 || actionBody.status == 0)) {//已支付直购不调用
return system.getResultSuccess();
}
pobj.actionType = "receiveIcpStatusNotify";
......@@ -373,7 +373,7 @@ class UtilsNeedService extends AppServiceBase {
actionBody: {
orderNo: rtn.data.orderNo,//pobj.actionBody.channelOrder.channelOrderNo,
needsolution: rtn.data.solutionContent,
channelNeedNo: rtn.data.channelNeedNo||"",
channelNeedNo: rtn.data.channelNeedNo || "",
channelSolutionNo: rtn.data.channelSolutionNo,
servicer: {
code: 'gsb',
......@@ -491,7 +491,7 @@ class UtilsNeedService extends AppServiceBase {
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
var res = await self.aliclient.reqbyget({ action: "WriteCommunicationLog", reqbody: { BizId: pobj.actionBody.intentionBizId, Note: pobj.actionBody.note }, apiVersion: "2019-05-08" });
console.log("res",res)
console.log("res", res)
//推送交付系统
var reqParams = {
actionBody: {
......@@ -660,14 +660,14 @@ class UtilsNeedService extends AppServiceBase {
}
// 2020 0914 lin 新增 刷单一条龙服务
async needBatchUpload(pobj,actionBody) {
var BizIds="";
async needBatchUpload(pobj, actionBody) {
var BizIds = "";
var demands = [];
// 声明两个数组 用来走后四步用
var npobj = [];
var spobj = [];
// 遍历生成阿里需求 并把bizId 填充进数组
for(var i = 0;i < actionBody.demands.length;i++) {
for (var i = 0; i < actionBody.demands.length; i++) {
// 第一步
// 地区转换
var area = this.areaChange(actionBody.demands[i].area)
......@@ -676,58 +676,58 @@ class UtilsNeedService extends AppServiceBase {
// 声明调用4.1需要的参数
var obj = {
Mobile: actionBody.demands[i].contactMobile,// 手机号
UserName:actionBody.demands[i].contactName,// 用户名
Description:actionBody.demands[i].description,
Area:area,
BizType:bizType,
Channel:"gsb",
Token:"gsb",
UserName: actionBody.demands[i].contactName,// 用户名
Description: actionBody.demands[i].description,
Area: area,
BizType: bizType,
Channel: "gsb",
Token: "gsb",
}
// 4.1 提交阿里需求
// 2020 0924 lin 修改 reqbyget 为 reqbyLTget
var aliResult = await this.aliclient.reqbyLTget({ action: "SubmitIcpIntention", reqbody: obj, apiVersion: "2019-05-08" });
console.log("needBatchUpload-aliResult",aliResult)
console.log("needBatchUpload-aliResult", aliResult)
// 整合前端需要的数据1
BizIds += aliResult.data.BizId + ",";
npobj.push({
"intentionBizId": aliResult.data.BizId,
"type": this.bizTypeChange(actionBody.demands[i].type),
"description":actionBody.demands[i].description,
"mobile":actionBody.demands[i].contactMobile
"description": actionBody.demands[i].description,
"mobile": actionBody.demands[i].contactMobile
})
spobj.push({
"needNo": aliResult.data.BizId,//渠道需求号
"solutionContent":{
"solutionContent": {
// submitIcpProgramme需要的类型转换 ICP许可证 = icpsq/EDI许可证 = edisq
"bizType":actionBody.demands[i].type,//产品类型 icpsq edisq
"solution":{
"bizType": actionBody.demands[i].type,//产品类型 icpsq edisq
"solution": {
// "IcpType":1,//方案类型 不传默认1 1:icp 2: edi 参数无效
"CompanyName":actionBody.demands[i].companyName,
"CompanyAddress":actionBody.demands[i].companyAddress,
"Area":actionBody.demands[i].area + "(渠道)",
"Note":actionBody.demands[i].description
"CompanyName": actionBody.demands[i].companyName,
"CompanyAddress": actionBody.demands[i].companyAddress,
"Area": actionBody.demands[i].area + "(渠道)",
"Note": actionBody.demands[i].description
}
}
})
if(aliResult.status != 0) {
if (aliResult.status != 0) {
// 统计失败次数
}
}
// 判断数据是否符合 执行后四步 的条件
if(npobj.length != actionBody.demands.length || spobj.length != actionBody.demands.length) {
return system.getResultFail(-5018,"提交阿里需求失败");
if (npobj.length != actionBody.demands.length || spobj.length != actionBody.demands.length) {
return system.getResultFail(-5018, "提交阿里需求失败");
}
// 睡3秒 意义:等待阿里异步分配成功。如果不等待则提交方案会失败 无法生成支付链接,需求状态错误
await this.sleep(3000)
// 遍历 执行后面步骤 创建企服需求单(提交方案需要)。提交方案。需求沟通提交
for(var i = 0;i < actionBody.demands.length;i++) {
for (var i = 0; i < actionBody.demands.length; i++) {
// 第二步
// 创建企服通需求单
var objString1 = JSON.stringify(pobj);
var obj1 = JSON.parse(objString1);
obj1.actionBody = npobj[i];
var opResult = await this.submitNeed(obj1, obj1.actionBody);
console.log("needBatchUpload-opResult",opResult)
console.log("needBatchUpload-opResult", opResult)
// 第三步
// 提交Icp注册方案
// 程序执行比异步分配需求快,所以写成两个循环
......@@ -737,15 +737,15 @@ class UtilsNeedService extends AppServiceBase {
obj2.actionBody = spobj[i];
var subRes = await this.qcCenterOrderSve.submitIcpProgramme(obj2);
console.log("----------------------------------start");
console.log("needBatchUpload-res",subRes)
console.log("needBatchUpload-res", subRes)
console.log("----------------------------------end");
// 第四步
// 需求沟通记录接口
var writeRes = await this.writeCommunicationLog({actionBody:{intentionBizId:npobj[i].intentionBizId,note:"测试反馈"}});
console.log("needBatchUpload-writeRes",writeRes)
var writeRes = await this.writeCommunicationLog({ actionBody: { intentionBizId: npobj[i].intentionBizId, note: "测试反馈" } });
console.log("needBatchUpload-writeRes", writeRes)
// 整合前端需要的数据2
demands.push({
uniqueCode:actionBody.demands[i].uniqueCode,
uniqueCode: actionBody.demands[i].uniqueCode,
demandCode: npobj[i].intentionBizId
})
}
......@@ -753,16 +753,16 @@ class UtilsNeedService extends AppServiceBase {
// 首先切割掉BizId最后一位 是,
BizIds = BizIds.substr(0, BizIds.length - 1);
// 2020 0924 lin 修改 reqbyget 为 reqbyLTget
var aliConfirmResult = await this.aliclient.reqbyLTget({ action: "ConfirmIcpIntention", reqbody: {BizIds:BizIds}, apiVersion: "2019-05-08" });
console.log("needBatchUpload-aliConfirmResult",aliConfirmResult)
var aliConfirmResult = await this.aliclient.reqbyLTget({ action: "ConfirmIcpIntention", reqbody: { BizIds: BizIds }, apiVersion: "2019-05-08" });
console.log("needBatchUpload-aliConfirmResult", aliConfirmResult)
// 获取链接失败
if(aliConfirmResult.status != 0) {
return system.getResultFail(-5018,"confirmIcpIntention fail");
if (aliConfirmResult.status != 0) {
return system.getResultFail(-5018, "confirmIcpIntention fail");
}
var res = {
paymentLink:aliConfirmResult.data.ConfirmUrl,
batchNumber:actionBody.batchNumber,
demands:demands
paymentLink: aliConfirmResult.data.ConfirmUrl,
batchNumber: actionBody.batchNumber,
demands: demands
}
// 2020 0916 lin 新增返回格式 成功status为1 因为queue判断成功请求的条件为status1
return system.getResultRedisQueueSuccess(res);
......@@ -928,7 +928,7 @@ class UtilsNeedService extends AppServiceBase {
}
}
bizTypeChange(bizType) {
switch(bizType) {
switch (bizType) {
case "ICP许可证":
return "5"
case "EDI许可证":
......@@ -936,7 +936,7 @@ class UtilsNeedService extends AppServiceBase {
}
}
needBizTypeChange(type) {
switch(type) {
switch (type) {
case "ICP许可证":
return "icpsq"
case "EDI许可证":
......@@ -978,11 +978,11 @@ class UtilsNeedService extends AppServiceBase {
var obj = {
"intentionBizId": actionBody.intentionBizId,
"type": actionBody.type,
"description":actionBody.description,
"mobile":actionBody.mobile
"description": actionBody.description,
"mobile": actionBody.mobile
}
var res = await this.submitNeed(pobj,obj);
if(res.status == 0) {
var res = await this.submitNeed(pobj, obj);
if (res.status == 0) {
return system.getResultSuccess(res.data);
}
return system.getResult(null, res)
......@@ -996,11 +996,11 @@ class UtilsNeedService extends AppServiceBase {
async needCloseAliEsp(pobj, actionBody) {
var obj = {
"intentionBizId": actionBody.intentionBizId,
"mobile":actionBody.mobile
"mobile": actionBody.mobile
}
pobj.actionType = "needClose";
var res = await this.needClose(pobj,obj);
if(res.status == 0) {
var res = await this.needClose(pobj, obj);
if (res.status == 0) {
return system.getResultSuccess(res.data);
}
return system.getResult(null, res)
......@@ -1011,7 +1011,7 @@ class UtilsNeedService extends AppServiceBase {
* @param {*} pobj
* @param {*} actionBody
*/
async produceNoticeAliEsp(pobj, actionBody) {
async produceNoticeAliEsp(req, pobj, actionBody) {
// 如果状态为USER_UPLOAD_PRODUCE需要转换url
// if(actionBody.operationType == "USER_UPLOAD_PRODUCE" ) {
// if(actionBody.extInfo) {
......@@ -1045,7 +1045,7 @@ class UtilsNeedService extends AppServiceBase {
pobj.actionType = "getItemByChannelNeedNo";
var url = this.centerOrderUrl + "action/need/springBoard";
var needInfoResult = await this.restPostUrl(pobj, url);
if(needInfoResult.status != 0) {
if (needInfoResult.status != 0) {
return system.getResult(null, "needInfo is empty");
}
// 第二部 询价
......@@ -1076,7 +1076,7 @@ class UtilsNeedService extends AppServiceBase {
pobj.actionType = "getProductPrice";
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
var productPriceResult = await this.restPostUrl(pobj, url);
if(productPriceResult.status != 0) {
if (productPriceResult.status != 0) {
return system.getResult(null, "productPrice is empty");
}
// 获取userpin 为什么在这里获取?原因:getWay获取不到手机号 再去调用其他接口浪费资源
......@@ -1085,7 +1085,7 @@ class UtilsNeedService extends AppServiceBase {
pobj.actionBody.userName = needInfoResult.data.publishMobile;
pobj.actionBody.mobile = needInfoResult.data.publishMobile;
pobj.actionBody.userpin = pobj.actionBody.userpin || this.getUUID();
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(req, pobj, pobj.actionBody);
pobj.userInfo = tmpOpResult.data
// 第三步 走addOrder流程
// var pobjStr = JSON.stringify(pobj);
......@@ -1178,7 +1178,7 @@ class UtilsNeedService extends AppServiceBase {
orderPrice: Number(pobj.actionBody.orderPrice / 100),
phone: needInfoResult.data.publishMobile,
needId: solutiondata.data.channelNeedNo,
companyName:solutiondata.data.solutionContent.solution.CompanyName || ''//1
companyName: solutiondata.data.solutionContent.solution.CompanyName || ''//1
},
appInfo: pobj.appInfo
}
......@@ -1216,23 +1216,23 @@ class UtilsNeedService extends AppServiceBase {
}
// 2020 0927 lin 新增 edi状态更新
async ediNotify(pobj,actionBody) {
if(actionBody.operationType == "USER_UPLOAD_PRODUCE" ) {
if(actionBody.extInfo) {
async ediNotify(pobj, actionBody) {
if (actionBody.operationType == "USER_UPLOAD_PRODUCE") {
if (actionBody.extInfo) {
// businessLicense:['business_license/12195411 61213057/1599115976393/p08xo9frgzj.png']
// idCardList:[' ["card/1219541161213057/1599115980036/s1nn3sozulo.png"] ']
// 注意idCardList 是二维数组 需要再转换一下 不知道为什么
var extJson = JSON.parse(actionBody.extInfo);
var businessLicenseArr = [];
if(extJson.idCardList) {
if (extJson.idCardList) {
// 抽出数组
var idCardListA = extJson.idCardList;
var idCardListArr = [];
for(var i = 0; i < idCardListA.length; i++) {
for (var i = 0; i < idCardListA.length; i++) {
idCardListArr.push(await this.opDownFileInfo(idCardListA[i]));
}
}
for(var i = 0; i < extJson.businessLicense.length; i++) {
for (var i = 0; i < extJson.businessLicense.length; i++) {
businessLicenseArr.push(await this.opDownFileInfo(extJson.businessLicense[i]));
}
actionBody.extInfo = {
......@@ -1250,7 +1250,7 @@ class UtilsNeedService extends AppServiceBase {
pobj.actionType = "receiveEdiStatusNotify";
var url = settings.centerOrderUrl() + "action/ediApi/springBoard";
var rtn = await this.restPostUrl(pobj, url);
if(rtn.status) {
if (rtn.status) {
return rtn;
}
// 只有上传材料才在这里推送,produceNoticeAliEsp不做关于材料上传的推送
......@@ -1309,7 +1309,7 @@ class UtilsNeedService extends AppServiceBase {
// 待定
// solutionBizId
// note
if(actionBody.operateType == "INVALID") {
if (actionBody.operateType == "INVALID") {
var url = settings.centerOrderUrl() + "action/ediApi/springBoard";
var rtn = await this.restPostUrl(pobj, url);
}
......
......@@ -22,10 +22,11 @@ class UtilsUcommuneService extends AppServiceBase {
/**
* 根据优客token获取用户信息,生成userPin返回前端
* @param {*} req
* @param {*} pobj
* @param {*} actionBody userToken 为优客工厂的userToken
*/
async getUserInfo(pobj, actionBody) {
async getUserInfo(req, pobj, actionBody) {
this.logCtl.info({
optitle: "优客免登接口",
op: "center-app/app/base/service/impl/utilsSve/utilsUcommuneSve.js/getUserInfo",
......@@ -46,7 +47,7 @@ class UtilsUcommuneService extends AppServiceBase {
pobj.actionBody.mobile = result.data.mobile;
pobj.actionBody.headUrl = result.data.headImg;
pobj.actionBody.userpin = pobj.actionBody.userpin || this.getUUID();
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(req, pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
......
const childproc = require('child_process');
const system = require("../system");
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const settings = require("../../../app/config/settings");
const axios = require('axios');
const moment = require('moment');
const uuid = require('uuid');
class ExecClientNew {
constructor() {
this.cmdGetPattern = "curl -G -X GET '{url}'";
this.cmdPostPattern = "curl -k -H 'Content-type: application/json' -d '{data}' {url}";
// this.cmdPushDataPostPattern = "curl -k -H 'Content-type: application/json' -H 'token:{tk}' -H 'appkey:{appkey}' -d '{data}' {url}";
}
/**
* 带超时时间的post请求
* @param {*} execFile 执行文件
* @param {*} params 请求数据-json格式
* @param {*} url 请求地址
* @param {*} ContentType 请求头类型,默认application/json
* @param {*} headData 请求头内容-json格式,如:请求头中传递token,格式:{token:"9098902q849q0434q09439"}
* @param {*} timeOut 超时时间设置,单位秒
* @param {*} req 请求信息
*/
async execPostTimeOutByBusiness(execFile, params, url, ContentType, headData, timeOut = 60, req) {
var rtn = null;
var reqResult = null;
var requestId = null;
if (req && req.body && (req.body.RequestId || req.body.requestId)) {
requestId = req.body.RequestId || req.body.requestId;
} else {
if (req && req.query && (req.query.RequestId || req.query.requestId)) {
requestId = req.query.RequestId || req.query.requestId;
}
}
try {
if (settings.env === "localhost" || settings.env === "dev") {
var headers = {
'Content-type': 'application/json'
}
if (headData) {
var headDataKeys = Object.keys(headData);
if (headDataKeys.length > 0) {
for (let index = 0; index < headDataKeys.length; index++) {
const indexKey = headDataKeys[index];
var headValue = headData[indexKey];
if (indexKey && headValue) {
headers[indexKey] = headValue;
}
}
}
}
axios.default.timeout = timeOut;
let result = await axios({
// headers: {'Content-Type': 'application/x-www-form-urlencoded'},
headers: headers,
method: 'POST',
url: url,
data: JSON.stringify(params)
});
if (result.status == 200) {
reqResult = system.getResultSuccess(result.data);
} else {
reqResult = system.getResult(null, "执行execPostTimeOutByBusiness存在错误");
}
reqResult.requestId = requestId || uuid.v1();
if (result.headers) {
delete result["headers"];
}
if (result.request) {
delete result["request"];
}
if (result.config) {
delete result["config"];
}
params.reqUrl = url;
this.execLogs(execFile + "执行execPostTimeOutByBusiness,errorInfo信息为请求的返回结果", params, params.identifyCode, reqResult, result);
return reqResult;
}
//方式二
rtn = await this.execPostTimeOut(params, url, ContentType, headData, timeOut);
params.reqUrl = url;
if (!rtn || !rtn.stdout) {
this.execLogs(execFile + "执行execPostTimeOutByBusiness返回的数据为空", params, params.identifyCode, null, null);
reqResult = system.getResult(null, "execPostTimeOut data is empty");
} else {
var result = JSON.parse(rtn.stdout);
reqResult = system.getResultSuccess(result);
}
reqResult.requestId = requestId || uuid.v1();
this.execLogs(execFile + "执行execPostTimeOutByBusiness,errorInfo信息为请求的返回结果", params, params.identifyCode, reqResult, rtn);
return reqResult;
} catch (error) {
reqResult = system.getResultFail(-200, execFile + "执行execPostByTimeOut存在异常");
reqResult.requestId = requestId || uuid.v1();
this.execLogs(execFile + "执行execPostByTimeOut存在异常", params, params.identifyCode, reqResult, error.stack);
return reqResult;
}
}
/**
* 记录日志信息
* @param {*} opTitle 操作的标题
* @param {*} params 参数
* @param {*} identifyCode 业务标识
* @param {*} resultInfo 返回结果
* @param {*} errorInfo 错误信息
*/
async execLogs(opTitle, params, identifyCode, resultInfo, errorInfo) {
var reqUrl = settings.opNewLogUrl();
params = typeof params === 'object' ? JSON.stringify(params) : params || "";
resultInfo = typeof resultInfo === 'object' ? JSON.stringify(resultInfo) : resultInfo || "";
errorInfo = typeof errorInfo === 'object' ? JSON.stringify(errorInfo) : errorInfo || "";
var tmpParams = {
opTitle: opTitle || "",
identifyCode: identifyCode || "",
messageBody: params,
resultInfo: resultInfo || "",
errorInfo: errorInfo || "",
requestId: resultInfo ? resultInfo.requestId || "" : "",
created_at: moment().format("YYYY-MM-DD HH:mm:ss:SSS"),
timestamp: Date.now()
}
this.execPostTimeOut(tmpParams, reqUrl, 'application/json', null, 20);
}
/**
* get请求
* @param {*} params 提交的数据-格式JSON
* @param {*} url
* @param {*} headData 请求信息,JSON格式
*/
async execGet(params, url, headData) {
let cmd = this.FetchGetCmd(params, url, headData);
var result = await this.exec(cmd);
return result;
}
/**
*
* @param {*} params 提交的数据JSON格式
* @param {*} url
* @param {*} headData 请求信息,JSON格式
* @param {*} timeOut 超时时间
*/
async execGetTimeOut(params, url, headData, timeOut = 5000) {
//timeOut,单位是毫秒
let cmd = this.FetchGetCmd(params, url, headData);
var options = {
timeout: timeOut,
};
const { stdout, stderr } = await exec(cmd, options);
return { stdout, stderr };
}
/**
* 带超时时间的post请求
* @param {*} params 请求数据-json格式
* @param {*} url 请求地址
* @param {*} ContentType 请求头类型,默认application/json
* @param {*} headData 请求头内容-json格式,如:请求头中传递token,格式:{token:"9098902q849q0434q09439"}
*/
async execPost(params, url, ContentType, headData) {
if (!ContentType) {
ContentType = "application/json";
}
let cmd = this.FetchPostCmd(params, url, ContentType, headData);
var options = {
maxBuffer: 1024 * 1024 * 15
};
var result = await this.exec(cmd, options, headData);
return result;
}
/**
* 带超时时间的post请求
* @param {*} params 请求数据-json格式
* @param {*} url 请求地址
* @param {*} ContentType 请求头类型,默认application/json
* @param {*} headData 请求头内容-json格式,如:请求头中传递token,格式:{token:"9098902q849q0434q09439"}
* @param {*} timeOut 超时时间设置,单位秒
*/
async execPostTimeOut(params, url, ContentType, headData, timeOut = 5000) {
if (!ContentType) {
ContentType = "application/json";
}
let cmd = this.FetchPostCmd(params, url, ContentType, headData);
var options = {
timeout: timeOut,
maxBuffer: 1024 * 1024 * 15
};
var result = await this.exec(cmd, options);
return result;
}
//--------------------------------------------------辅助方法start-----------------
async exec(cmd) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
const { stdout, stderr } = await exec(cmd);
return { stdout, stderr };
}
FetchGetCmd(params, url, headData) {
var cmd = this.cmdGetPattern.replace(
/\{data\}/g, params).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd(params, url, ContentType, headData) {
if (!ContentType) {
ContentType = "application/json";
}
var data = null;
if (typeof params === 'object') {
// 声明cache变量,便于匹配是否有循环引用的情况
var cache = [];
data = JSON.stringify(params, function (key, value) {
if (typeof value === 'object' && value !== null) {
if (cache.indexOf(value) !== -1) {
// 移除
return;
}
// 收集所有的值
cache.push(value);
}
return value;
});
cache = null; // 清空变量,便于垃圾回收机制回收
} else {
data = params;
}
var cmdStr = "curl --user admines:adminGSBes. -k -H 'Content-type:" + ContentType + "'";
if (headData) {
var headDataKeys = Object.keys(headData);
if (headDataKeys.length > 0) {
for (let index = 0; index < headDataKeys.length; index++) {
const indexKey = headDataKeys[index];
var headValue = headData[indexKey];
if (indexKey && headValue) {
cmdStr = cmdStr + " -H '" + indexKey + ":" + headValue + "'";
}
}
}
}
cmdStr = cmdStr + " -d '" + data + "' " + url;
console.log(cmdStr, ":cmdStr.................");
return cmdStr;
}
/**
* 返回20位业务订单号
* @param {*} prefix 业务前缀
*/
async getBusUid(prefix) {
prefix = (prefix || "");
if (prefix) {
prefix = prefix.toUpperCase();
}
var prefixlength = prefix.length;
var subLen = 8 - prefixlength;
var uidStr = "";
if (subLen > 0) {
uidStr = await this.getUidInfo(subLen, 60);
}
var timStr = moment().format("YYYYMMDDHHmm");
return prefix + timStr + uidStr;
}
/**
* 返回指定长度的字符串
* @param {*} len 返回长度
* @param {*} radix 参与计算的长度,最大为62
*/
async getUidInfo(len, radix) {
var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');//长度62,到yz长度为长36
var uuid = [], i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random() * 16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
//--------------------------------------------------辅助方法end-----------------
}
module.exports = ExecClientNew;
module.exports = {
PDICT: {
encrypt_key: "202006242013DDD90880",
encrypt_secret: "25455136E3BCA24335C3142C72D90990",
secret_prefix: "CENTERAPP",
token_secret_dev: "1E15FB63A004635A9BFB66BFA0637E99",//dev
token_secret_prod: "25455136E3BCA24335C3142C72D88990",//prod
webMustUserpinList: ["serviceProviderSubmitMaterial", "closeOrderDelivery", "serviceProviderNotification", "tmConfirm", "getNeedSolutionDetailByUser",
"getProgrammeInfoByChannelNeedNo", "submitIcpProgramme", "submitIcpMaterial", "acceptIcpPartnerNotification", "abolishIcpProgramme",
"addOrder", "getH5PayUrl", "getOrderQrCode", "queryOrderStatus", "getOrderInfo", "getOrderDeliveryInfo", "getOrderDetails",
"getOrderDeliveryFlowInfo", "getOrderDeliveryFlowList", "getOrderLogInfo", "updateContacts", "updateTmOrder", "delOrder", "submitProgramme",
"getProgrammeListByUser", "getProgrammeInfoByNeedNo", "abolishProgramme", "getAliPayInfo", "getPaidLogoListByUser", "getCollectibleLogoListByUser",
"collectLogo", "getLogoMaterial", "cancelCollectLogo", "icpNotify", "createName", "getNameDetail", "orderConfirm",
"orderTotalSum", "collect", "reg", "orderCheck", "getReOrderList", "getOfficalList", "addReviewList", "opSubmitNeed", "opNeedClose", "opNeedList",
"getItemByNeedNo", "opNeedDetailByChannelNo", "getNeedListUser", "manualEvaluation", "diagnosisInfo", "check", "enterpriseInfo", "diagnosisDetail",
"submitIcpIntention", "queryIntentionList", "confirmIcpIntention", "tmAccept", "tmStatus", "needBatchUpload",
"serviceSubmitOption", "submitWangwenSolution", "closeNeed", "recordLog", "recordLogList", "foodServiceSubmitOption", "submitFoodSolution",
"foodCloseNeed", "foodRecordLog", "foodRecordLogList", "getParamsFor360", "addOrderWeb", "getPayRecords", "getLoginInfo"
],
apiMustUserpinList: ["submitNeed", "paySuccess", "icpNotify", "getLoginInfo"]
}
}
......@@ -3,7 +3,7 @@ var settings = {
host: "121.36.3.35",
port: 8967,
password: "Gongsibao2018",
db: 5,
db: 4,
},
database: {
dbname: "igirl_api",
......
var url = require("url");
var system = require("../../base/system");
const system = require("../../base/system");
const utilsAuthSve = system.getObject("service.utilsSve.utilsAuthSve");
const logCtl = system.getObject("service.common.oplogSve");
const utilsOrderSve = system.getObject("service.utilsSve.utilsOrderSve");
const utilsFeishuSve = system.getObject("service.utilsSve.utilsFeishuSve");
var md5 = require('md5');
var xml2js = require('xml2js');
const xml2js = require('xml2js');
const jwt = require('jsonwebtoken');
const { PDICT } = require("../../config/businessConfig");
const settings = require("../../config/settings");
module.exports = function (app) {
//-----------------------新的模式---------web---------开始
......@@ -120,7 +121,7 @@ module.exports = function (app) {
return;
}
pobj.appInfo = result.data;
result = await utilsFeishuSve.checkAndLogin(pobj);
result = await utilsFeishuSve.checkAndLogin(req, pobj);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "飞书小程序记录回调处理结果,method=login",
op: "app/config/routes/api.js/feishu/notify",
......@@ -224,6 +225,7 @@ module.exports = function (app) {
app.all("/web/*", async function (req, res, next) {
const self = this;
var result = system.getResult(null, "req method must is post");
if (req.method != "POST") {
res.end(JSON.stringify(result));
......@@ -241,9 +243,9 @@ module.exports = function (app) {
return;
}
if (req.originalUrl.indexOf("/action/tmQuery") >= 0 || req.originalUrl.indexOf("/action/tmTools") >= 0) {
req.body.actionProcess="test-code";
req.body.actionProcess = "test-code";
req.body.actionBody.appHosts = req.host;
req.body.appInfo ={id:1}
req.body.appInfo = { id: 1 }
next();
return;
}
......@@ -259,33 +261,34 @@ module.exports = function (app) {
res.end(JSON.stringify(result));
return;
}
var cacheManager = system.getObject("db.common.cacheManager");
var result = await cacheManager["AppTokenByHostsCache"].getCache(token, system.exTime);
if (result.status != 0) {
res.end(JSON.stringify(result));
return;
//校验jwt产生的token
const tokenSecret = settings.env == "localhost" || settings.env == "dev" ? PDICT.token_secret_dev : PDICT.token_secret_prod;
let token_secret_str = null;
jwt.verify(token, tokenSecret, function (err, decoded) { // decoded:指的是token解码后用户信息
if (err) { //如果token过期则会执行err的代码块
return res.send(system.getResultFail(-88, "Failed to authenticate token,error:" + err));
} else {
token_secret_str = decoded.token_secret;
}
req.body.appInfo = result.data;
req.body.actionProcess = result.data.app_code;
var lst = ["serviceProviderSubmitMaterial", "closeOrderDelivery", "serviceProviderNotification",
"tmConfirm", "getNeedSolutionDetailByUser", "getProgrammeInfoByChannelNeedNo",
"submitIcpProgramme", "submitIcpMaterial", "acceptIcpPartnerNotification", "abolishIcpProgramme",
"addOrder", "getH5PayUrl", "getOrderQrCode", "queryOrderStatus", "getOrderInfo", "getOrderDeliveryInfo", "getOrderDetails",
"getOrderDeliveryFlowInfo", "getOrderDeliveryFlowList", "getOrderLogInfo", "updateContacts", "updateTmOrder", "delOrder",
"submitProgramme", "getProgrammeListByUser", "getProgrammeInfoByNeedNo", "abolishProgramme", "getAliPayInfo",
"getPaidLogoListByUser", "getCollectibleLogoListByUser", "collectLogo", "getLogoMaterial", "cancelCollectLogo", "icpNotify", "createName", "getNameDetail", "orderConfirm",
"orderTotalSum", "collect", "reg", "orderCheck", "getReOrderList", "getOfficalList", "addReviewList", "opSubmitNeed", "opNeedClose", "opNeedList", "getItemByNeedNo", "opNeedDetailByChannelNo",
"getNeedListUser",
"manualEvaluation", "diagnosisInfo", "check", "enterpriseInfo", "diagnosisDetail",
"submitIcpIntention", "queryIntentionList", "confirmIcpIntention",
"tmAccept", "tmStatus",
"needBatchUpload",
"serviceSubmitOption","submitWangwenSolution","closeNeed","recordLog","recordLogList",
"foodServiceSubmitOption","submitFoodSolution","foodCloseNeed","foodRecordLog","foodRecordLogList",
"getParamsFor360","addOrderWeb","getPayRecords",
});
let decryptResult = await utilsAuthSve.decryptInfo(token_secret_str);
if (decryptResult.status != 0) {
return res.send(system.getResultFail(-88, "Failed to authenticate token,fail:" + decryptResult.msg));
}
let tmpAppInfo = JSON.parse(decryptResult.data);
req.body.appInfo = tmpAppInfo;
req.body.actionProcess = tmpAppInfo.app_code;
];
if (lst.indexOf(req.body.actionType) >= 0) {
//去除缓存,改用jwt模式
// var cacheManager = system.getObject("db.common.cacheManager");
// var result = await cacheManager["AppTokenByHostsCache"].getCache(token, system.exTime);
// if (result.status != 0) {
// res.end(JSON.stringify(result));
// return;
// }
// req.body.appInfo = result.data;
// req.body.actionProcess = result.data.app_code;
if (PDICT.webMustUserpinList.indexOf(req.body.actionType) >= 0) {
var userpin = req.headers["userpin"] || "";
if (!userpin) {
result.status = system.noLogin;
......@@ -293,23 +296,42 @@ module.exports = function (app) {
result.data = null;
res.end(JSON.stringify(result));
return;
}
let userpin_secret_str = null;
jwt.verify(userpin, tokenSecret, function (err, decoded) { // decoded:指的是token解码后用户信息
if (err) { //如果token过期则会执行err的代码块
return res.send(system.getResultFail(system.noLogin, "Failed to authenticate userpin,error:" + err));
} else {
var params = {
"appInfo": req.body.appInfo,
"actionType": "getLoginInfo",
"actionBody": {
"userpin": userpin
userpin_secret_str = decoded.userpin_secret;
}
});
let userDecryptResult = await utilsAuthSve.decryptInfo(userpin_secret_str);
if (userDecryptResult.status != 0) {
return res.send(system.getResultFail(system.noLogin, "Failed to authenticate userpin,fail:" + userDecryptResult.msg));
}
result = await utilsAuthSve.getLoginInfo(params, params.actionBody);
if (result.status != 0) {
result.status = system.noLogin;
result.msg = "user login is invalidation";
let tmpUserInfo = JSON.parse(userDecryptResult.data);
req.body.userInfo = tmpUserInfo;
if (req.body.actionType === "getLoginInfo") {
result = system.getResultSuccess(tmpUserInfo);
res.end(JSON.stringify(result));
return;
}
req.body.userInfo = result.data;
}
// var params = {
// "appInfo": req.body.appInfo,
// "actionType": "getLoginInfo",
// "actionBody": {
// "userpin": userpin
// }
// }
// result = await utilsAuthSve.getLoginInfo(params, params.actionBody);
// if (result.status != 0) {
// result.status = system.noLogin;
// result.msg = "user login is invalidation";
// res.end(JSON.stringify(result));
// return;
// }
// req.body.userInfo = result.data;
}//需要用户登录
next();
});
......@@ -398,18 +420,32 @@ module.exports = function (app) {
res.end(JSON.stringify(result));
return;
}
var cacheManager = system.getObject("db.common.cacheManager");
var result = await cacheManager["AppTokenByHostsCache"].getCache(token, system.exTime);
if (result.status != 0) {
res.end(JSON.stringify(result));
return;
}
req.body.appInfo = result.data;
req.body.actionProcess = result.data.app_code;
var lst = [
"submitNeed", "paySuccess", "icpNotify"
];
if (lst.indexOf(req.body.actionType) >= 0) {
//校验jwt产生的token
const tokenSecret = settings.env == "localhost" || settings.env == "dev" ? PDICT.token_secret_dev : PDICT.token_secret_prod;
let token_secret_str = null;
jwt.verify(token, tokenSecret, function (err, decoded) { // decoded:指的是token解码后用户信息
if (err) { //如果token过期则会执行err的代码块
return res.send(system.getResultFail(-88, "Failed to authenticate token,error:" + err));
} else {
token_secret_str = decoded.token_secret;
}
});
let decryptResult = await utilsAuthSve.decryptInfo(token_secret_str);
if (decryptResult.status != 0) {
return res.send(system.getResultFail(-88, "Failed to authenticate token,fail:" + decryptResult.msg));
}
let tmpAppInfo = JSON.parse(decryptResult.data);
req.body.appInfo = tmpAppInfo;
req.body.actionProcess = tmpAppInfo.app_code;
// var cacheManager = system.getObject("db.common.cacheManager");
// var result = await cacheManager["AppTokenByHostsCache"].getCache(token, system.exTime);
// if (result.status != 0) {
// res.end(JSON.stringify(result));
// return;
// }
// req.body.appInfo = result.data;
// req.body.actionProcess = result.data.app_code;
if (PDICT.apiMustUserpinList.indexOf(req.body.actionType) >= 0) {
var userpin = req.headers["userpin"] || "";
if (!userpin) {
result.status = system.noLogin;
......@@ -417,23 +453,40 @@ module.exports = function (app) {
result.data = null;
res.end(JSON.stringify(result));
return;
}
// var params = {
// "appInfo": req.body.appInfo,
// "actionType": "getLoginInfo",
// "actionBody": {
// "userpin": userpin
// }
// }
// result = await utilsAuthSve.getLoginInfo(params, params.actionBody);
// if (result.status != 0) {
// result.status = system.noLogin;
// result.msg = "user login is invalidation";
// res.end(JSON.stringify(result));
// return;
// }
let userpin_secret_str = null;
jwt.verify(userpin, tokenSecret, function (err, decoded) { // decoded:指的是token解码后用户信息
if (err) { //如果token过期则会执行err的代码块
return res.send(system.getResultFail(system.noLogin, "Failed to authenticate userpin,error:" + err));
} else {
var params = {
"appInfo": req.body.appInfo,
"actionType": "getLoginInfo",
"actionBody": {
"userpin": userpin
userpin_secret_str = decoded.userpin_secret;
}
});
let userDecryptResult = await utilsAuthSve.decryptInfo(userpin_secret_str);
if (userDecryptResult.status != 0) {
return res.send(system.getResultFail(system.noLogin, "Failed to authenticate userpin,fail:" + userDecryptResult.msg));
}
result = await utilsAuthSve.getLoginInfo(params, params.actionBody);
if (result.status != 0) {
result.status = system.noLogin;
result.msg = "user login is invalidation";
let tmpUserInfo = JSON.parse(userDecryptResult.data);
req.body.userInfo = tmpUserInfo;
if (req.body.actionType === "getLoginInfo") {
result = system.getResultSuccess(tmpUserInfo);
res.end(JSON.stringify(result));
return;
}
req.body.userInfo = result.data;
}
}//需要用户登录
next();
});
......
......@@ -23,6 +23,13 @@ var settings = {
usertimeout: 3600,//单位秒
basepath: path.normalize(path.join(__dirname, '../..')),
port: process.env.NODE_PORT || 4012,
//记录日志地址
opNewLogUrl() {
if (this.env == 'dev') {
return 'http://192.168.18.101:4019/api/queueAction/producer/springBoard';
}
return 'http://logs-sytxpublic-msgq-service/api/queueAction/producer/springBoard';
},
fbQueryUrl: function () {
if (this.env == 'dev' || this.env == 'test') {
return 'http://43.247.184.92:15505'
......@@ -163,24 +170,24 @@ var settings = {
return "http://center-order-service/";
}
},
igirlWeburl: function(){
igirlWeburl: function () {
if (this.env == "dev") {
return "http://127.0.0.1:3000/";
} else {
return "http://igirl-service/";
}
},
centerCacheUrl:function(){
if(this.env=='dev'){
centerCacheUrl: function () {
if (this.env == 'dev') {
return "http://123.57.217.203:30005/";
}else{
} else {
return "http://specialprofile-service/"
}
},
fileDealUrl:function(){
if(this.env=='dev'){
fileDealUrl: function () {
if (this.env == 'dev') {
return "http://43.247.184.92:15503";
}else{
} else {
return "http://43.247.184.92:15503"
}
},
......@@ -199,7 +206,7 @@ var settings = {
return "http://43.247.184.94:7200/";
}
},
certificationUrl:function () {
certificationUrl: function () {
if (this.env == "dev") {
return "http://43.247.184.92:15506/";//
} else {
......@@ -293,8 +300,8 @@ var settings = {
};
}
},
alipay: function() {// 没有在使用 确定不需要后会去掉
return new AlipaySdk({
alipay: function () {// 没有在使用 确定不需要后会去掉
return new AlipaySdk({
// appId: payConfig.ali.appId,
......@@ -304,7 +311,7 @@ var settings = {
});
},
wxpay: function() {// 没有在使用 确定不需要后会去掉
wxpay: function () {// 没有在使用 确定不需要后会去掉
return WXPay({
appid: 'wx6f3ebe44defe336a',
mch_id: '1232813602',
......@@ -319,7 +326,7 @@ var settings = {
// };
// return new tenpay(config);
},
paySecret: function() {
paySecret: function () {
if (this.env == "dev") {
// return "ab53dfb909e4c32a";
return "34cdecaac35b1d8d"// 7.1之前测试环境的secret无法使用,测试/正式全部使用同一个secret
......@@ -327,7 +334,7 @@ var settings = {
return "34cdecaac35b1d8d";// 6.29lin新增 小黑给的secret
}
},
ucommuneOperatorPhone: function() {
ucommuneOperatorPhone: function () {
if (this.env == "dev") {
return "13911391996"// 7.7修改测试环境优客 辅助/担保订单推送业务员手机号
} else {
......
......@@ -36,6 +36,7 @@
"express": "^4.16.2",
"express-session": "^1.15.6",
"gm": "^1.23.1",
"jsonwebtoken": "^8.5.1",
"marked": "^0.7.0",
"method-override": "^2.3.10",
"mongoose": "^5.7.1",
......
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