Commit 7817f1e0 by linboxuan

ucommune delete

parent 6565a7e3
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/main.js"
}
]
}
\ No newline at end of file
const system = require("../system");
const settings = require("../../config/settings");
const uuidv4 = require('uuid/v4');
const md5 = require("MD5");
class APIBase {
constructor() {
this.restClient = system.getObject("util.restClient");
this.cacheManager = system.getObject("db.common.cacheManager");
this.logCtl = system.getObject("service.common.oplogSve");
this.toolSve = system.getObject("service.trademark.toolSve");
this.exTime = 6 * 3600;//缓存过期时间,6小时
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
//-----------------------新的模式------------------开始
async doexecMethod(gname, methodname, pobj, query, req) {
req.requestId = this.getUUID();
try {
var rtn = 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),
clientIp: req.clientIp,
agent: req.uagent,
opTitle: "api服务提供方appKey:" + settings.appKey,
});
rtn.requestId = req.requestId;
return rtn;
} catch (e) {
console.log(e.stack, "api调用出现异常,请联系管理员..........")
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(e.stack),
clientIp: req.clientIp,
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调用出现异常,请联系管理员",
});
var rtnerror = system.getResultFail(-200, "出现异常,error:" + e.stack);
rtnerror.requestId = req.requestId;
return rtnerror;
}
}
//-----------------------新的模式------------------结束
async restPostUrl(pobj, url) {
var rtn = await this.restClient.execPost(pobj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "restPost data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
}
}
module.exports = APIBase;
const system = require("../system");
const settings = require("../../config/settings");
const DocBase = require("./doc.base");
const uuidv4 = require('uuid/v4');
const md5 = require("MD5");
class APIBase extends DocBase {
constructor() {
super();
this.cacheManager = system.getObject("db.common.cacheManager");
this.logCtl = system.getObject("service.common.oplogSve");
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
/**
* 白名单验证
* @param {*} gname 组名
* @param {*} methodname 方法名
*/
async isCheckWhiteList(gname, methodname) {
var fullname = gname + "." + methodname;
var lst = [
"test.testApi"
];
var x = lst.indexOf(fullname);
return x >= 0;
}
async checkAcck(gname, methodname, pobj, query, req) {
var appInfo = null;
var result = system.getResultSuccess();
var ispass = await this.isCheckWhiteList(gname, methodname);
var appkey = req.headers["accesskey"];
if (ispass) {
return result;
}//在百名单里面
if (appkey) {
appInfo = await this.cacheManager["ApiAccessKeyCheckCache"].cache(appkey, { status: true }, 3000);
if (!appInfo || !appInfo.app) {
result.status = system.tokenFail;
result.msg = "请求头accesskey失效,请重新获取";
}
}//验证accesskey
else {
result.status = -1;
result.msg = "请求头没有相关访问参数,请验证后在进行请求";
}
return result;
}
async doexec(gname, methodname, pobj, query, req) {
var requestid = this.getUUID();
try {
//验证accesskey或验签
// var isPassResult = await this.checkAcck(gname, methodname, pobj, query, req);
// if (isPassResult.status != 0) {
// isPassResult.requestid = "";
// return isPassResult;
// }
var rtn = await this[methodname](pobj, query, req);
rtn.requestid = requestid;
this.logCtl.createDb({
appid: req.headers["app_id"] || "",
appkey: req.headers["accesskey"] || "",
requestId: requestid,
op: req.classname + "/" + methodname,
content: JSON.stringify(pobj),
resultInfo: JSON.stringify(rtn),
clientIp: req.clientIp,
agent: req.uagent,
opTitle: "api服务提供方appKey:" + settings.appKey,
});
return rtn;
} catch (e) {
console.log(e.stack, "api调用出现异常,请联系管理员..........")
this.logCtl.error({
appid: req.headers["app_id"] || "",
appkey: req.headers["accesskey"] || "",
requestId: requestid,
op: pobj.classname + "/" + methodname,
content: e.stack,
clientIp: pobj.clientIp,
agent: req.uagent,
optitle: "api调用出现异常,请联系管理员",
});
var rtnerror = system.getResultFail(-200, "出现异常,请联系管理员");
rtnerror.requestid = requestid;
return rtnerror;
}
}
}
module.exports = APIBase;
const system=require("../system");
const uuidv4 = require('uuid/v4');
class DocBase{
constructor(){
this.apiDoc={
group:"逻辑分组",
groupDesc:"",
name:"",
desc:"请对当前类进行描述",
exam:"概要示例",
methods:[]
};
this.initClassDoc();
}
initClassDoc(){
// this.descClass();
// this.descMethods();
}
descClass(){
var classDesc= this.classDesc();
this.apiDoc.group=classDesc.groupName;
this.apiDoc.groupDesc=classDesc.groupDesc;
this.apiDoc.name=classDesc.name;
this.apiDoc.desc=classDesc.desc;
this.apiDoc.exam=this.examHtml();
}
examHtml(){
var exam= this.exam();
exam=exam.replace(/\\/g,"<br/>");
return exam;
}
exam(){
throw new Error("请在子类中定义类操作示例");
}
classDesc(){
throw new Error(`
请重写classDesc对当前的类进行描述,返回如下数据结构
{
groupName:"auth",
groupDesc:"认证相关的包"
desc:"关于认证的类",
exam:"",
}
`);
}
descMethods(){
var methoddescs=this.methodDescs();
for(var methoddesc of methoddescs){
for(var paramdesc of methoddesc.paramdescs){
this.descMethod(methoddesc.methodDesc,methoddesc.methodName
,paramdesc.paramDesc,paramdesc.paramName,paramdesc.paramType,
paramdesc.defaultValue,methoddesc.rtnTypeDesc,methoddesc.rtnType);
}
}
}
methodDescs(){
throw new Error(`
请重写methodDescs对当前的类的所有方法进行描述,返回如下数据结构
[
{
methodDesc:"生成访问token",
methodName:"getAccessKey",
paramdescs:[
{
paramDesc:"访问appkey",
paramName:"appkey",
paramType:"string",
defaultValue:"x",
},
{
paramDesc:"访问secret",
paramName:"secret",
paramType:"string",
defaultValue:null,
}
],
rtnTypeDesc:"xxxx",
rtnType:"xxx"
}
]
`);
}
descMethod(methodDesc,methodName,paramDesc,paramName,paramType,defaultValue,rtnTypeDesc,rtnType){
var mobj=this.apiDoc.methods.filter((m)=>{
if(m.name==methodName){
return true;
}else{
return false;
}
})[0];
var param={
pname:paramName,
ptype:paramType,
pdesc:paramDesc,
pdefaultValue:defaultValue,
};
if(mobj!=null){
mobj.params.push(param);
}else{
this.apiDoc.methods.push(
{
methodDesc:methodDesc?methodDesc:"",
name:methodName,
params:[param],
rtnTypeDesc:rtnTypeDesc,
rtnType:rtnType
}
);
}
}
}
module.exports=DocBase;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
const askForSve = system.getObject("service.common.askForSve");
class askFor extends WEBBase {
constructor() {
super();
}
/**
* @description 商标 尼斯查询 收藏 注册申请
* @author liangwk
* @param {*} pobj
* @param {*} qobj
* @param {*} req
* @returns
* @memberof askFor
*/
async tradeMark (pobj, qobj, req) {
switch (pobj.actionType) {
case 'niceQuery':
const param = pobj.actionBody
const adddic = ['首位', '中位', '末位', '随机']
if (param.word_site) {
if (adddic.indexOf(param.word_site) === -1) {
return system.getResult(null, '请选择正确的位置')
}
}
if (isNaN(parseInt(param.name_size)) || parseInt(param.name_size) <= 0) {
return system.getResult(null, '字数不正确')
} else {
param.name_size = parseInt(param.name_size)
}
if (!Array.isArray(param.ncl_one_list) || param.ncl_one_list.length === 0) {
return system.getResult(null, '分类不能为空')
} else {
for (let i in param.ncl_one_list) {
if (isNaN(parseInt(param.ncl_one_list[i])) || (parseInt(param.ncl_one_list[i]) <= 0 || parseInt(param.ncl_one_list[i]) > 45)) {
return system.getResult(null, '分类选择不正确')
} else {
param.ncl_one_list[i] = parseInt(param.ncl_one_list[i])
}
}
}
let result = await askForSve.niceQuery(pobj.actionBody)
if (result.code === 200) {
return system.getResult2(result.data)
} else {
return system.getResult(null, result.message)
}
case 'collect':
if (!pobj.actionBody.type) {
let result = await askForSve.getCollect(pobj)
if (result.status === 0) {
return system.getResult2(result.data)
} else {
return system.getResult(null, result.msg)
}
} else {
let result = await askForSve.collect(pobj)
if (result.status === 0) {
return system.getResult2(result)
} else {
return system.getResult(null, result.msg)
}
}
case 'reg':
if (!pobj.actionBody.type) {
let result = await askForSve.getAskFor(pobj)
if (result.status === 0) {
return system.getResult2(result.data)
} else {
return system.getResult(null, result.msg)
}
} else {
let result = await askForSve.askFor(pobj)
if (result.status === 0) {
return system.getResult2(result.data)
} else {
return system.getResult(null, result.msg)
}
}
}
}
}
module.exports = askFor;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
class EnterpriseQueryAPI extends WEBBase {
constructor() {
super();
this.enterSve = system.getObject("service.enterprise.enterpriseSve");
}
/**
* 接口跳转-POST请求
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "gxCountByAuthor"://获取企业高薪信息数量
case "gxListByAuthor"://获取企业高薪信息列表
case "gameCountByAuthor"://获取企业游戏出版及运营数量
case "gameListByAuthor"://获取企业游戏出版及运营信息列表
case "licenseCountByAuthor"://获取企业证照信息数量
case "licenseListByAuthor"://获取企业证照信息列表
case "ipCountByAuthor"://获取企业域名信息数量
case "ipListByAuthor"://获取企业域名信息列表
case "getQccBranches"://获取企业的分支机构(从企查查获取)
case "getcountAll"://获取企业所有证照数量
opResult = await this.enterSve.opReqResult(pobj, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = EnterpriseQueryAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class IcAPI extends WEBBase {
constructor() {
super();
// this.utilsProductSve = system.getObject("service.utilsSve.utilsProductSve");
this.centerorderSve = system.getObject("service.common.centerorderSve");
// this.utilsFqAliyunSve = system.getObject("service.utilsSve.utilsFqAliyunSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
if(pobj.actionType=='getPolicyNeedList' || pobj.actionType=='submitPolicyNeedNotes' ){
if (!pobj.userInfo) {
return system.getResult(system.noLogin, "user no login!");
}
if (!pobj.appInfo) {
return system.getResult(system.noLogin, "app is null!");
}
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
// case "testPushBusinessOrder":
// opResult=await this.utilsFqAliyunSve.testPushBusinessOrder();
// break;
case "submitProgramme"://提交公司注册方案
opResult = await this.centerorderSve.submitProgramme(pobj);
break;
case "getProgrammeListByUser"://获取方案列表(获取用户所有方案)
opResult = await this.centerorderSve.reqCenterOrderApi(pobj);
break;
case "getProgrammeInfoByNeedNo"://根据需求查看方案列表
opResult = await this.centerorderSve.reqCenterOrderApi(pobj);
break;
case "receiveFeedback"://接收方案反馈信息(即方案作废)
opResult = await this.centerorderSve.reqCenterOrderApi(pobj);
break;
case "abolishProgramme"://服务商方案作废
opResult = await this.centerorderSve.abolishProgramme(pobj);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = IcAPI;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class IcpAPI extends APIBase {
constructor() {
super();
// this.utilsProductSve = system.getObject("service.utilsSve.utilsProductSve");
this.centerorderSve = system.getObject("service.common.centerorderSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
if (pobj.actionType == 'getPolicyNeedList' || pobj.actionType == 'submitPolicyNeedNotes') {
if (!pobj.userInfo) {
return system.getResult(system.noLogin, "user no login!");
}
if (!pobj.appInfo) {
return system.getResult(system.noLogin, "app is null!");
}
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
case "getNeedSolutionDetailByUser"://获取方案详情
opResult = await this.centerorderSve.reqCenterOrderApi(pobj,"action/icpapi/springBoard");
break;
case "submitIcpProgramme"://icp方案提交
opResult = await this.centerorderSve.submitIcpProgramme(pobj);
break;
case "submitIcpMaterial"://icp材料提交
opResult = await this.centerorderSve.submitIcpMaterial(pobj);
break;
case "acceptIcpPartnerNotification"://icp通知状态变更
opResult = await this.centerorderSve.acceptIcpPartnerNotification(pobj);
break;
case "abolishIcpProgramme"://服务商icp方案关闭
opResult = await this.centerorderSve.abolishIcpProgramme(pobj);
break;
case "getProgrammeInfoByChannelNeedNo"://获取需求方案列表
opResult = await this.centerorderSve.reqCenterOrderApi(pobj,"action/icpapi/springBoard");
break;
// case "updateStausByRefundOrder"://修改退款方案状态
// opResult = await this.needsolutionSve.updateStausByRefundOrder(pobj);
// break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = IcpAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
class LicenseQueryAPI extends WEBBase {
constructor() {
super();
this.liecseSve = system.getObject("service.licenses.licenseSve");
}
/**
* 接口跳转-POST请求
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "getLicenses"://根据公司得到推荐要办的证书
//opResult = await this.liecseSve.getLicenses(action_body);
opResult = await this.liecseSve.opReqResult(pobj, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = LicenseQueryAPI;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class LogoOrderAPI extends APIBase {
constructor() {
super();
this.centerorderSve = system.getObject("service.common.centerorderSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
if (pobj.actionType == 'getPolicyNeedList' || pobj.actionType == 'submitPolicyNeedNotes') {
if (!pobj.userInfo) {
return system.getResult(system.noLogin, "user no login!");
}
if (!pobj.appInfo) {
return system.getResult(system.noLogin, "app is null!");
}
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
case "singlelogo"://生成logo
opResult = await this.centerorderSve.singlelogo(pobj);
break;
case "changelogo"://换一批logo
opResult = await this.centerorderSve.changelogo(pobj);
break;
case "downloadlogoscene"://下载logo场景
opResult = await this.centerorderSve.downloadlogoscene(pobj);
break;
case "getPaidLogoListByUser"://获取已购买的logo
opResult = await this.centerorderSve.reqCenterOrderApi(pobj,"action/logoOrderApi/springBoard");
break;
case "getLogoMaterial"://下载logo素材
opResult = await this.centerorderSve.reqCenterOrderApi(pobj,"action/logoOrderApi/springBoard");
break;
case "getCollectibleLogoListByUser"://获取收藏的logo
opResult = await this.centerorderSve.reqCenterOrderApi(pobj,"action/logoOrderApi/springBoard");
break;
case "collectLogo"://收藏logo
opResult = await this.centerorderSve.reqCenterOrderApi(pobj,"action/logoOrderApi/springBoard");
break;
case "cancelCollectLogo"://取消收藏
opResult = await this.centerorderSve.reqCenterOrderApi(pobj,"action/logoOrderApi/springBoard");
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = LogoOrderAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class ProductAPI extends WEBBase {
constructor() {
super();
this.utilsUcommuneSve = system.getObject("service.utilsSve.utilsUcommuneSve");
}
/**
* 优客工厂
* 接口跳转-POST请求
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
case "getIndustryInfo":// 获取行业信息
opResult = await this.utilsUcommuneSve.getUserInfo(pobj, pobj.actionBody);
break;
case "placeOrder":// 提交订单
opResult = await this.utilsUcommuneSve.getOrderList(pobj, pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = ProductAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
const logCtl = system.getObject("service.common.oplogSve");
class opLog extends WEBBase {
constructor() {
super();
}
async info(pobj, qobj, req) {
this.logCtl.info(pobj);
}
async error(pobj, qobj, req) {
this.logCtl.error(pobj);
}
}
module.exports = opLog;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
class PatentQueryAPI extends WEBBase {
constructor() {
super();
this.patentSve = system.getObject("service.patent.patentycSve");
}
/**
* 接口跳转-POST请求
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "CommomSearchbyApplicant"://根据申请人查询聚合
case "paCountByApplicantName"://根据申请人获取专利量
case "paShortListByApplicantName"://根据申请人获取专利详情列表
case "paDetailsBypubNo"://根据公开或授权号获取专利详情列表
case "paDetailsByfilingNo"://根据申请号获取专利详情列表
case "softwareCountByAuthor"://根据公司名称得到软著量
case "softwareListByAuthor"://根据公司名称得到软著详情
case "softwareDetailsByregNum"://根据登记号获取软著详情
case "worksCountByAuthor"://根据公司名称得到著作权量
case "worksListByAuthor"://根据公司名称得到著作权详情
case "worksDetailsByregNum"://根据登记号获取著作权详情
opResult = await this.patentSve.opReqResult(pobj, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = PatentQueryAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
class PolicyAPI extends WEBBase {
constructor() {
super();
this.policySve = system.getObject("service.policy.policySve");
this.wxTokenSve = system.getObject("service.common.wxTokenSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj,pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
return result;
}
async opActionProcess(pobj,action_process, action_type, action_body, req) {
var opResult = null;
switch (action_type) {
// sy
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "policyQuery"://政策检索
opResult = await this.policySve.policyQuery(pobj);
break;
case "policyTypeQuery"://政策检索(根据政策类型检索)
opResult = this.policySve.reqPolicyApi(pobj);
break;
case "submitPolicyNeed"://政策申请提报
opResult = this.policySve.submitPolicyNeed(pobj);
break;
case "getPolicyNeedList"://政策需求列表
opResult = this.policySve.getPolicyNeedList(pobj);
break;
case "submitPolicyNeedNotes"://申请信息备注提交
opResult = this.policySve.submitPolicyNeedNotes(pobj);
break;
case "getWxSign"://获取微信签名信息
opResult = this.policySve.getWxSign(action_body.url);
break;
case "getTokenAndOpenid"://通过code换取网页授权access_token,用于政策H5 oauth授权登录
opResult = this.wxTokenSve.getTokenAndOpenid(action_body);
break;
case "submitPolicysubscribe"://提交政策订阅
opResult = this.policySve.reqPolicyApi(pobj);
break;
case "delPolicysubscribe"://取消政策订阅
opResult = this.policySve.reqPolicyApi(pobj);
break;
case "getPolicysubscribeList"://获取政策订阅列表
opResult = this.policySve.reqPolicyApi(pobj);
break;
case "policyTypeCount"://政策类型统计计数
opResult = this.policySve.reqPolicyApi(pobj);
break;
case "policySubscribeQuery"://政策订阅检索列表(通过订阅信息查询订阅的政策信息)
opResult = this.policySve.reqPolicyApi(pobj);
break;
case "getPolicyBusinessFq"://政策商机(蜂擎)
opResult = this.policySve.reqPolicyApi(pobj);
break;
case "getPolicyNeedInfo"://政策需求信息(icompany)
opResult = this.policySve.reqPolicyApi(pobj);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = PolicyAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class ProductAPI extends WEBBase {
constructor() {
super();
this.utilsProductSve = system.getObject("service.utilsSve.utilsProductSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
case "getProductList"://通过产品类别编码路径获取产品列表
opResult = await this.utilsProductSve.getProductList(pobj, pobj.actionBody);
break;
case "getProductListH5"://通过产品类别编码路径获取产品列表
opResult = await this.utilsProductSve.getProductListH5(pobj, pobj.actionBody);
break;
case "getProductDetail"://根据渠道产品编码获取产品详情
opResult = await this.utilsProductSve.getProductDetail(pobj, pobj.actionBody);
break;
case "getProductPrice":
opResult = await this.utilsProductSve.getProductPrice(pobj,pobj.actionBody)
break;
default:
opResult = system.getResult(null, "action_type参数错误");
}
return opResult;
}
}
module.exports = ProductAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
class TmQueryAPI extends WEBBase {
constructor() {
super();
// this.tmqueryApi = system.getObject("api.trademark.tmqueryApi");
this.tmquerySve = system.getObject("service.trademark.tmquerySve");
// this.toolApi = system.getObject("api.tool.toolApi");
this.toolSve = system.getObject("service.trademark.toolSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj.actionProcess, pobj.actionType, pobj.actionBody, req, pobj);
return result;
}
async opActionProcess(action_process, action_type, action_body, req, pobj) {
var opResult = null;
switch (action_type) {
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "findTrademarkNameAccurate"://商标精确检索(相同商标检索)
opResult = await this.tmquerySve.findTrademarkNameAccurate(action_body, req);
break;
case "findTrademarkName"://近似商标检索
opResult = await this.tmquerySve.findTrademarkName(action_body, req);
break;
case "findTrademarkzchAccurate"://商标申请号检索
opResult = await this.tmquerySve.findTrademarkzchAccurate(action_body, req);
break;
case "findTrademarkzcr"://申请人查询
opResult = await this.tmquerySve.findTrademarkzcr(action_body, req);
break;
case "getCropperPic"://获取检索图片url
opResult = await this.toolSve.getCropperPic(action_body, req);
break;
case "imagequery"://图形检索
opResult = await this.tmquerySve.imagequery(action_body, req);
break;
case "findImageSearch"://图形检索查询
opResult = await this.tmquerySve.findImageSearch(action_body, req);
break;
case "tradeMarkDetail"://商标详情查询
opResult = await this.tmquerySve.tradeMarkDetail(action_body, req);
break;
case "sbzuixinsearch"://最新商标查询
opResult = await this.tmquerySve.sbzuixinsearch(action_body, req);
break;
case "noticequeryTMZCSQ"://近12期初审公告查询接口
opResult = await this.tmquerySve.noticequeryTMZCSQ(action_body, req);
break;
case "noticequery"://公告列表检索接口
opResult = await this.tmquerySve.noticequery(action_body, req);
break;
case "noticezcggsearch"://注册公告详情查询
opResult = await this.tmquerySve.noticezcggsearch(action_body, req);
break;
case "noticesearch"://初审公告详情查询
opResult = await this.tmquerySve.noticesearch(action_body, req);
break;
case "getCompanyInfoNoUser"://企业查询
opResult = await this.tmquerySve.getCompanyInfoNoUser(action_body, req);
break;
case "getNclDetail"://尼斯详情
opResult = await this.tmquerySve.getNclDetail(action_body, req);
break;
case "gettwoNcl"://获取尼斯群组
opResult = await this.tmquerySve.gettwoNcl(action_body, req);
break;
case "nclFuwuSearch"://尼斯分类检索
opResult = await this.tmquerySve.nclFuwuSearch(action_body, req);
break;
case "bycznfx"://商标智能分析 -----
opResult = await this.toolSve.bycznfx(action_body, req);
break;
case "tmConfirm"://商标方案确认
// opResult = await this.toolApi.bycznfx(action_body);
opResult = system.getResultSuccess(null, "商标方案确认成功");
break;
case "icheming"://商标智能分析 -----
opResult = await this.toolSve.icheming(action_body, req);
break;
case "tmreport"://商标报告
var rtn = await this.tmquerySve.tmreport(action_body, pobj, req);
if (rtn.code > 0) {
opResult = system.getResultSuccess();
} else {
opResult = system.getResult(null, rtn.msg);
}
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = TmQueryAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
class TmToolsAPI extends WEBBase {
constructor() {
super();
this.toolSve = system.getObject("service.trademark.toolSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, pobj.actionBody, req);
return result;
}
async opActionProcess(pobj, action_type, action_body, req) {
var opResult = null;
switch (action_type) {
// sy
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "encryptStr"://
opResult = await this.toolSve.encryptStr(req.app, action_body.opStr);
break;
case "decryptStr"://
opResult = await this.toolSve.decryptStr(req.app, action_body.opStr);
break;
case "getOssConfig"://获取oss信息
opResult = await this.toolSve.getOssConfig(pobj);
break;
case "getNcl"://尼斯查询(一)
opResult = await this.toolSve.getNcl(action_body, req);
break;
case "getNclByLikeNameAndNcl"://尼斯查询(二)
opResult = await this.toolSve.getNclByLikeNameAndNcl(action_body, req);
break;
case "word2pic"://文字转图片
opResult = await this.toolSve.word2pic(action_body, req);
break;
case "uploadStandardTm"://商标样式转换
opResult = await this.toolSve.uploadStandardTm(action_body, req);
break;
case "pic2pdf"://图片转pdf
opResult = await this.toolSve.pic2pdf(action_body, req);
break;
case "getCompanyInfoByLikeName"://企业近似查询
opResult = await this.toolSve.getCompanyInfoByLikeName(action_body, req);
break;
case "getEntregistryByCompanyName"://企业精确查询
opResult = await this.toolSve.getEntregistryByCompanyName(action_body, req);
break;
case "adjustWTSSize"://调整委托书
opResult = await this.toolSve.adjustWTSSize(action_body, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = TmToolsAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
class TmTransactionAPI extends WEBBase {
constructor() {
super();
this.pushlogSve = system.getObject("service.common.pushlogSve");
}
/**
* 接口跳转-POST请求
* actionProcess 执行的流程
* actionType 执行的类型
* actionBody 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
// sy
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "addPushContent"://添加推送信息
opResult = await this.pushlogSve.addPublicServiceLog(pobj, req);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = TmTransactionAPI;
\ No newline at end of file
const system = require("../../../system");
var WEBBase = require("../../web.base");
var settings = require("../../../../config/settings");
var moment = require('moment')
class TradetransferAPI extends WEBBase {
constructor() {
super();
this.aliclient = system.getObject("util.aliyunClient");
this.execlient = system.getObject("util.execClient");
this.transferurl = settings.reqTransferurl();
this.utilsOrderSve = system.getObject("service.utilsSve.utilsOrderSve");
}
//订单创建
async createtransfer(p, obj, req) {
console.log(p.actionBody, "actionBody...............................");
var orderinfo = await this.utilsOrderSve.addOrder(p.actionBody, req);
console.log(orderinfo, "orderinfo............................");
if (orderinfo) {
if (orderinfo.status == "0") {
var result = {
"errorCode": "OK",
"errorMsg": "成功",
"module": { "orderId": orderinfo.data.orderNo },
"requestId": req.requestId,
"success": true
}
return result;
} else if (orderinfo.status == "2") {
var result = {
"errorCode": "OK",
"errorMsg": "订单已存在",
"module": { "orderId": orderinfo.data },
"requestId": req.requestId,
"success": true
}
return result;
} else {
var result = {
"errorCode": "error",
"errorMsg": orderinfo.msg,
"module": { "orderId": "" },
"requestId": req.requestId,
"success": false
}
return result;
}
} else {
var result = {
"errorCode": "error",
"errorMsg": "",
"module": { "orderId": "" },
"requestId": req.requestId,
"success": false
}
return result;
}
}
//订单查询
async ordersel(p, obj) {
var url = this.transferurl + "api/transfer/tradeApi/queryOrderState";
var transferinfo = await this.execlient.execPost(p.actionBody, url);
var a = JSON.parse(transferinfo.stdout)
return a;
}
//订单关闭
async orderclose(p,obj) {
var url = this.transferurl + "api/transfer/tradeApi/closeOrder";
var transferinfo = await this.execlient.execPost(p.actionBody, url);
var a = JSON.parse(transferinfo.stdout)
return a;
}
//业务员分配
async fenpeiowner(obj) {
if (!obj.BizId) {
return {
"errorCode": "error",
"errorMsg": "订单号不能为空",
"requestId": obj.requestId,
"success": false
}
}
var transferinfo = await this.findOne({ ali_bizid: obj.BizId });
}
//阿里网关
async aliclienttransfer(p, obj) {
console.log("----------------sssssssssssssssssss-------------------------------------------")
console.log(p.actionBody)
if (p.actionBody) {
console.log(p.actionBody)
var rtn = await this.aliclient.reqbyget(p.actionBody)
return rtn;
}
}
}
module.exports = TradetransferAPI;
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class ProductAPI extends WEBBase {
constructor() {
super();
this.utilsUcommuneSve = system.getObject("service.utilsSve.utilsUcommuneSve");
}
/**
* 优客工厂
* 接口跳转-POST请求
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
switch (action_type) {
case "getUserInfo":// 根据优客token获取用户信息,生成userPin返回前端 actionBody
opResult = await this.utilsUcommuneSve.getUserInfo(pobj, pobj.actionBody);
break;
case "orderTotalSum":// addOrder后进入支付页面获取支付金额
opResult = await this.utilsUcommuneSve.orderTotalSum(pobj, pobj.actionBody);
break;
case "orderConfirm":// 点击确认支付后返回拼接字符串
opResult = await this.utilsUcommuneSve.orderConfirm(pobj, pobj.actionBody);
break;
case "orderCheck":// 调起支付框后获取支付结果
opResult = await this.utilsUcommuneSve.orderCheck(pobj, pobj.actionBody);
break;
case "ucommuneGetOrderList":// 优客调取订单列表用
opResult = await this.utilsUcommuneSve.ucommuneGetOrderList(pobj, pobj.actionBody);
break;
case "ucommuneGetOrderDetail":// 优客调取订单详情 目前未使用
opResult = await this.utilsUcommuneSve.ucommuneGetOrderDetail(pobj, pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = ProductAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class PaymentAPI extends WEBBase {
constructor() {
super();
this.execlient = system.getObject("util.execClient");
}
/**
* 接口跳转-POST请求
* actionProcess 执行的流程
* actionType 执行的类型
* actionBody 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, pobj.actionBody, req);
return result;
}
async opActionProcess(pobj, action_type, action_body, req) {
var opResult = null;
var url = "";
switch (action_type) {
// sy
case "needinfo2fq"://pc端订单支付二维码生成
url = settings.centerOrderUrl() + "action/zcbusinesschanceApi/springBoard";
break;
// case "flowinfo"://pc端订单支付二维码生成
// opResult = await this.needinfoSve.flowinfo(needinfo);
// break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
// var url = settings.centerAppUrl() + "action/opProduct/springBoard";
return await this.restPostUrl(pobj, url);
// return opResult;
}
}
module.exports = PaymentAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
class AccessAuthAPI extends WEBBase {
constructor() {
super();
this.utilsAuthSve = system.getObject("service.utilsSve.utilsAuthSve");
this.utilsNeedSve = system.getObject("service.utilsSve.utilsNeedSve");
this.utilsTmAliyunSve = system.getObject("service.utilsSve.utilsTmAliyunSve");//测试用
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = system.getResult(null, "req Failure");
pobj.actionBody.userpin = pobj.actionBody.userpin || this.getUUID();
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);
// 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,
uapp_id: pobj.appInfo.uapp_id,
uapp_key: pobj.appInfo.uapp_key,
id: pobj.appInfo.id
})
break;
case "getNeedUserPinByChannelUserId"://渠道通过账户进行登录,有则返回用户信息,没有则创建用户
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
opResult = system.getResultSuccess({ userpin: pobj.actionBody.userpin })
if (tmpOpResult.status == 2060) {
opResult.msg = tmpOpResult.msg;
opResult.data.userpin = tmpOpResult.data.userpin;
}
//获取需求信息
pobj.actionType = "getItemByChannelNeedNo";
var needResult = await this.utilsNeedSve.getItemByChannelNeedNo(pobj, pobj.actionBody);
if (needResult.status != 0) {
return needResult;
}
opResult.data.channelTypeCode = needResult.data.channelTypeCode;
opResult.data.typeCode = needResult.data.typeCode
break;
case "getLoginByUserName"://渠道通过账户进行登录,有则返回用户信息,没有则创建用户
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
opResult = system.getResultSuccess({ userpin: pobj.actionBody.userpin })
if (tmpOpResult.status == 2060) {
opResult.msg = tmpOpResult.msg;
opResult.data.userpin = tmpOpResult.data.userpin;
}
break;
case "getVerifyCode"://获取默认模板的手机验证码
opResult = await this.utilsAuthSve.getVerifyCodeByMoblie(pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess()
}
break;
case "userPinByLgoin"://通过账户和密码登录
opResult = await this.utilsAuthSve.getReqUserPinByLgoin(pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess({ userpin: pobj.actionBody.userpin })
}
break;
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"://通过短信注册信息
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"://通过手机验证码修改用户密码
opResult = await this.utilsAuthSve.putUserPwdByMobile(pobj, pobj.actionBody);
break;
case "getLoginInfo"://通过userpin获取用户登录信息
opResult = await this.utilsAuthSve.getLoginInfo(pobj, pobj.actionBody);
break;
case "logout"://用户退出
opResult = await this.utilsAuthSve.userLogout(pobj, pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
*/
async getAppTokenByHosts(pobj, qobj, req) {
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 执行的流程
*/
async getAppTokenByAppKey(pobj, qobj, req) {
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
var WEBBase = require("../../web.base");
var system = require("../../../system");
class ChannelAccessAuthAPI extends WEBBase {
constructor() {
super();
this.utilsChannelAuthSve = system.getObject("service.utilsSve.utilsChannelAuthSve");
this.utilsAuthSve = system.getObject("service.utilsSve.utilsAuthSve");
this.utilsTmAliyunSve = system.getObject("service.utilsSve.utilsTmAliyunSve");//测试用
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
// if (!pobj.actionProcess) {
// return system.getResult(null, "actionProcess参数不能为空");
// }
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = system.getResult(null, "req Failure");
pobj.actionBody.userpin = pobj.actionBody.userpin || this.getUUID();
switch (action_type) {
// sy
case "test"://测试
console.log(pobj, "...test....pobj.actionBody....");
opResult = system.getResultSuccess(null, "测试成功");
opResult.status = 1;
break;
case "getUserPinByAliCode"://渠道通过账户进行登录,有则返回用户信息,没有则创建用户
var aliUserResult = await this.utilsChannelAuthSve.getH5AliDingUserByCode(pobj, pobj.actionBody);
if (aliUserResult.status != 0) {
return aliUserResult;
}
pobj.actionType = "getLoginByUserName";
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);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
opResult = system.getResultSuccess({ userpin: pobj.actionBody.userpin })
if (tmpOpResult.status == 2060) {
opResult.msg = tmpOpResult.msg;
opResult.data.userpin = tmpOpResult.data.userpin;
}
break;
case "getDingJsApiAuthInfo"://获取钉钉鉴权信息
opResult = await this.utilsChannelAuthSve.getDingJsApiAuthInfo(pobj, pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = ChannelAccessAuthAPI;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
class AccessAuthAPI extends APIBase {
constructor() {
super();
this.utilsAuthSve = system.getObject("service.utilsSve.utilsAuthSve");
this.gatewaypushlogSve = system.getObject("service.common.gatewaypushlogSve");
this.utilsPushSve = system.getObject("service.utilsSve.utilsPushSve");
this.pushlogSve = system.getObject("service.common.pushlogSve");
this.aliclient = system.getObject("util.aliyunClient");
this.utilsTmAliyunSve = system.getObject("service.utilsSve.utilsTmAliyunSve");
}
async taskAliIcapi() {
var rtn = await this.gatewaypushlogSve.taskAliIcapi();
return rtn;
}
async taskAgainFqPushInfo(pobj, qobj, req) {//再次推送蜂擎业务数据
var rtn = await this.utilsPushSve.aliBusiness2Fq(pobj, pobj.opType);
this.pushlogSve.delDbPushfaillogById(Number(pobj.id || 0));
return rtn;
}
async taskAgainPushOneNewBusInfo(pobj, qobj, req) {//再次推送新rpc业务数据
var rtn = await this.utilsPushSve.againPushBusInfo(pobj);
this.pushlogSve.delDbPushfaillogById(Number(pobj.id || 0));
return rtn;
}
async taskAgainPushOneOldBusInfo(pobj, qobj, req) {//再次推送老rpc业务数据
var rtn = await this.aliclient.reqbyget(pobj)
this.pushlogSve.delDbPushfaillogById(Number(pobj.id || 0));
return rtn;
}
async taskAliTmUpdate(pobj, qobj, req) {//操作阿里商标更新
var rtn = await this.utilsTmAliyunSve.taskAliTmUpdate();
return rtn;
}
async taskAliRpcAgainPush(pobj, qobj, req) {
var result = await this.pushlogSve.getFailLogList();
if (result.status != 0 || !result.data || result.data.length == 0) {
return system.getResult(null, "push data is empty");
}
var self = this;
for (let index = 0; index < result.data.length; index++) {
const element = result.data[index];
if (element) {
var contentData = JSON.parse(element.content);
contentData.id = element.id;
contentData.pushNumber = element.pushNumber + 1;
if (element.failType == 1) {
self.taskAgainPushOneOldBusInfo(contentData);
}
else if (element.failType == 2) {
self.taskAgainPushOneNewBusInfo(contentData);
} else if (element.failType == 4) {
self.taskAgainFqPushInfo(contentData);
}//FQ
}
}
return system.getResultSuccess();
}
async taskPushPublicService(pobj, qobj, req) {
var result = await this.pushlogSve.getPublicServiceLogList();
if (result.status != 0 || !result.data || result.data.length == 0) {
return system.getResult(null, "PushPublicService data is empty");
}
var self = this;
for (let index = 0; index < result.data.length; index++) {
const element = result.data[index];
if (element && element.pushUrl) {
var contentData = JSON.parse(element.pushContent);
var opResult = await self.restPostUrl(contentData, element.pushUrl);
if ((!opResult && opResult.status != 0) || opResult.code != 1) {
var tmpPobj = {
actionBody: {
uapp_key: element.appkey,
pushUrl: element.pushUrl,
pushContent: contentData,
pushNumber: element.pushNumber + 1,
resultInfo: opResult
}
}
self.pushlogSve.addPublicServiceLog(tmpPobj, { clientIp: element.clientIp });
} else {
self.logCtl.info({
appid: "",
appkey: element.appkey,
requestId: req.requestId || "",
op: req.classname,
content: contentData,
clientIp: element.clientIp,
agent: req.uagent,
optitle: "推送公共服务:PushPublicService Success",
});
}
self.pushlogSve.delPublicServiceLog(element.id);
}
}
return system.getResultSuccess();
}
}
module.exports = AccessAuthAPI;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class NameAPI extends WEBBase{
constructor() {
super();
this.redisClient = system.getObject("util.redisClient");
this.utilsOrderSve = system.getObject("service.utilsSve.utilsOrderSve");
this.centerOrderUrl = settings.centerOrderUrl();
this.centerCacheUrl = settings.centerCacheUrl();
}
/**
* 接口跳转-POST请求
* action_type 执行的类型
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = null;
pobj.requestId = req.requestId;
switch (action_type) {
case "getCache"://行业类别
opResult = await this.getCache();
break;
case "getPreference"://偏好
opResult=await this.getPreference();
break;
case "createName"://起名
opResult =await this.addOrderDelivery(pobj,pobj.actionBody);
break;
case "getNameDetail"://详情
opResult = await this.getNameDetail(pobj);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
/**
* 获取行业类别数据 後期可提出為一個service文件
* @returns {Promise<{}>}
*/
async getCache(){
let cacheResult = {};
cacheResult.cache = cacheJson
return system.getResult(cacheResult);
}
/**
* 获取偏好信息 後期可提出為一個service文件
* @returns {Promise<{}>}
*/
async getPreference(){
let preResult = {};
const key = 'qmbpreference';
let result = await this.redisClient.get(key)
if(result){
preResult.preference = JSON.parse(result);
return system.getResult(preResult);
}else{
const data = await this.restPostUrl({},this.centerCacheUrl+"preference_select");
if(data.code == 200){
await this.redisClient.set(key,JSON.stringify(data.data),2*3600)
preResult.preference = data.data
return system.getResult(preResult);
}
}
}
/**
* 获取起名数据并添加到c_order_delivery 后期可提取为一個service文件
* @param pobj
* @param actionBody
* @returns {Promise<{msg: string, data: (*|null), bizmsg: *, status: number}|{msg: *, data: *, status: *}|{msg: *, data: (*|null), status: number}>}
*/
async addOrderDelivery(pobj,actionBody){
if (!actionBody.orderId) {
return system.getResult(null, "orderId参数不能为空");
}
if (!actionBody.province) {
return system.getResult(null, "province参数不能为空");
}
if (!actionBody.city) {
return system.getResult(null, "city:参数不能为空");
}
if (!actionBody.county) {
return system.getResult(null, "county参数不能为空");
}
if (!actionBody.pcate) {
return system.getResult(null, "pcate参数不能为空");
}
if (!actionBody.cate) {
return system.getResult(null, "cate参数不能为空");
}
if (!actionBody.preference) {
return system.getResult(null, "preference参数不能为空");
}
await this.redisClient.set("ch"+JSON.stringify(actionBody.orderId),JSON.stringify(actionBody));
return system.getResultSuccess();
}
//获取取名结果,并保存到数据库
async getNameDetail(pobj){
pobj.actionType = 'getOrderDeliveryInfo';
const opResult = await this.utilsOrderSve.getOrderDeliveryInfo(pobj, pobj.actionBody);
if(opResult.status == 0){
if(!opResult.data.hasOwnProperty('result_name')){
const actionBody =await this.redisClient.get('ch'+ JSON.stringify(pobj.actionBody.orderNo));
if(actionBody != null){
const nameResult = await this.restPostUrl(JSON.parse(actionBody),this.centerCacheUrl+"treasure_name");
if(nameResult.code == 200){
pobj.actionType = 'addOrderDelivery'
pobj.actionBody = nameResult.data;
//取名结果存储
await this.restPostUrl(pobj,this.centerOrderUrl + "action/nameOrder/springBoard");
return system.getResult(nameResult.data,"操作成功")
}
}else{
return system.getResult()
}
}else{
return system.getResult(opResult.data,'操作成功')
}
}else {
return system.getResultFail('',opResult.msg);
}
}
}
const cacheJson = {
"科技类": ["网络科技", "电子商务", "信息技术", "游戏", "电子", "软件", "新材料", "生物科技", "教育科技", "环保科技", "信息科技"],
"许可类": ["投资管理", "金融", "资产", "商业保理", "融资租赁", "医疗器械", "人力资源", "食品", "劳务派遣"],
"服务类": ["广告", "文化传媒", "建筑装潢", "设计", "美容美发", "房地产中介", "物业管理", "商务咨询", "企业管理"],
"其他": ["贸易","实业","制造","服饰","化妆品","工程","农业","餐饮管理","物流"],
}
module.exports = NameAPI;
var WEBBase = require("../../web.base");
var system = require("../../../system");
class FgbusinesschanceAPI extends WEBBase {
constructor() {
super();
this.utilsFgbusinesschancSve = system.getObject("service.utilsSve.utilsFgbusinesschanceSve");
this.toolSve = system.getObject("service.trademark.toolSve");
}
/**
* 复购商机 相关接口 跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
pobj.requestId = req.requestId;
var opResult = null;
switch (action_type) {
case "create"://创建复购商机
opResult = await this.utilsFgbusinesschancSve.create(pobj, pobj.actionBody);
break;
case "createOrderRefundFq":
opResult = await this.utilsFgbusinesschancSve.createOrderRefundFq(pobj, pobj.actionBody);
break;
case "createOnlineProductClassificiationFq":
opResult = await this.utilsFgbusinesschancSve.createOnlineProductClassificiationFq(pobj, pobj.actionBody);
break;
case "createOrderInfoAndPayFq":
opResult = await this.utilsFgbusinesschancSve.createOrderInfoAndPayFq(pobj, pobj.actionBody);
break;
// ------ 对蜂擎页面 -------
case "getCompanyInfo": // 获取工商信息
opResult = await this.toolSve.getEntregistryByCompanyName(pobj.actionBody, req);
break;
case "getCompanyLabel":// 三十秒认知客户
opResult = await this.utilsFgbusinesschancSve.getCompanyLabel(pobj, pobj.actionBody);
break
case "getRecommendProducts": // 获取推荐产品列表
opResult = await this.utilsFgbusinesschancSve.getRecommendProducts(pobj, pobj.actionBody);
break;
case "getTalkContent": // 获取营销话术
opResult = await this.utilsFgbusinesschancSve.getTalkContent(pobj, pobj.actionBody);
break;
case "getOldOrder": // 获取已购产品
opResult = await this.utilsFgbusinesschancSve.getOldOrder(pobj, pobj.actionBody);
break;
case "updateStatus"://更新商机跟进状态
opResult = await this.utilsFgbusinesschancSve.updateStatus(pobj, pobj.actionBody);
break;
case "getMoreInfoUrl":// 更多客户信息链接地址
opResult = await this.utilsFgbusinesschancSve.getMoreInfoUrl(pobj, pobj.actionBody);
break
case "getConsultingRecord":// 根据咨询公司名称获取咨询记录
opResult = await this.utilsFgbusinesschancSve.getConsultingRecord(pobj, pobj.actionBody);
break
case "addStatusRemarks": // 产品跟进状态备注
opResult = await this.utilsFgbusinesschancSve.addStatusRemarks(pobj, pobj.actionBody);
break
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = FgbusinesschanceAPI;
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class IcbcOrderNotify extends WEBBase {
constructor() {
super();
this.utilsOrderSve = system.getObject("service.utilsSve.utilsOrderSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
pobj.requestId = req.requestId;
var opResult = null;
this.logCtl.info({
appid: pobj.appInfo.uapp_id,
appkey: pobj.appInfo.uapp_key,
requestId: req.requestId,
op: pobj.actionType,
content: JSON.stringify(pobj),
clientIp: req.clientIp,
agent: req.uagent,
optitle: "icbcOrderNotify信息通知记录",
});
switch (action_type) {
case "icOrderStatusNotify"://工商状态通知
opResult = await this.utilsOrderSve.icOrderStatusNotify(pobj, pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = IcbcOrderNotify;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class ProductAPI extends WEBBase {
constructor() {
super();
this.utilsOpOrderSve = system.getObject("service.utilsSve.utilsOpOrderSve");
this.utilsPushSve = system.getObject("service.utilsSve.utilsPushSve");
this.utilsTmAliyunSve = system.getObject("service.utilsSve.utilsTmAliyunSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
pobj.requestId = req.requestId;
var opResult = null;
switch (action_type) {
case "opAliDingInterfaceManage"://操作阿里钉钉接口管理---actionBody:{为阿里需要的参数}
var pushInterfaceResult = await this.utilsOpOrderSve.getOpInterfaceByProductId(pobj.appInfo, pobj.product_id);
if (pushInterfaceResult.status != 0) {
return pushInterfaceResult;
}
var interface_list_temp = pushInterfaceResult.data.filter(f => f.op_type == "createAliTmApply")
if (!interface_list_temp || interface_list_temp.length == 0) {
return system.getResult(null, "暂无【createAliTmApply】的推送配置,100520");
}
pobj.interface_params = interface_list_temp[0].params;
opResult = await this.utilsTmAliyunSve.opAliDingInterfaceManage(pobj);
break;
// case "checkTmNameByAli"://检测商标名称是否合规
// var pushInterfaceResult = await this.utilsOpOrderSve.getOpInterfaceByProductId(pobj, pobj.actionBody.product_id);
// if (pushInterfaceResult.status != 0) {
// pobj.actionBody.product_info.interface_info = pushInterfaceResult.data;
// this.utilsPushSve.pushBusInfo(pobj, "closeAliTmApply", 1);
// }
// break;
case "updateContacts"://修改订单联系人
opResult = await this.utilsOpOrderSve.updateContacts(pobj, pobj.actionBody);
break;
case "updateTmOrder"://修改商标订单信息
opResult = await this.utilsOpOrderSve.updateTmOrder(pobj, pobj.actionBody);
break;
case "tmConfirm"://商标方案确认
opResult = await this.utilsOpOrderSve.tmConfirm(pobj, pobj.actionBody);
break;
case "sendAliWtsEmail"://推送委托书模板邮件(阿里云)
opResult = await this.utilsTmAliyunSve.sendAliWtsEmail(pobj);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = ProductAPI;
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class ProductAPI extends WEBBase {
constructor() {
super();
this.utilsOrderSve = system.getObject("service.utilsSve.utilsOrderSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
pobj.requestId = req.requestId;
var opResult = null;
switch (action_type) {
case "addOrder"://创建订单
opResult = await this.utilsOrderSve.addOrder(pobj, pobj.actionBody);
break;
case "getOrderInfo"://获取订单列表信息
opResult = await this.utilsOrderSve.getOrderInfo(pobj, pobj.actionBody);
break;
case "getOrderDetails"://获取订单详情信息
opResult = await this.utilsOrderSve.getOrderDetails(pobj, pobj.actionBody);
break;
case "getOrderDeliveryInfo"://获取订单交付信息
opResult = await this.utilsOrderSve.getOrderDeliveryInfo(pobj, pobj.actionBody);
break;
case "getOrderDeliveryFlowInfo"://获取订单交付流程信息
opResult = await this.utilsOrderSve.getOrderDeliveryFlowInfo(pobj, pobj.actionBody);
break;
case "getOrderDeliveryFlowList"://获取订单交付流程列表信息
opResult = await this.utilsOrderSve.getOrderDeliveryFlowList(pobj, pobj.actionBody);
break;
case "getOrderLogInfo"://获取订单日志信息
opResult = await this.utilsOrderSve.getOrderLogInfo(pobj, pobj.actionBody);
break;
case "delOrder"://删除订单
opResult = await this.utilsOrderSve.delOrder(pobj, pobj.actionBody);
break;
// case "getIcbcOrderDetails"://获取工商详情
// opResult = await this.utilsOrderSve.addOrder(pobj, pobj.actionBody);
// break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = ProductAPI;
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class AccessAuthAPI extends APIBase {
constructor() {
super();
this.utilsAuthSve = system.getObject("service.utilsSve.utilsAuthSve");
this.utilsNeedSve = system.getObject("service.utilsSve.utilsNeedSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, req);
return result;
}
async opActionProcess(pobj, action_type, req) {
var opResult = system.getResult(null, "req Failure");
pobj.actionBody.userpin = pobj.actionBody.userpin || this.getUUID();
switch (action_type) {
// sy
case "test"://测试
opResult = system.getResultSuccess(null, "测试成功");
break;
case "getLoginByUserName"://渠道通过账户进行登录,有则返回用户信息,没有则创建用户
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
opResult = system.getResultSuccess({ userpin: pobj.actionBody.userpin })
if (tmpOpResult.status == 2060) {
opResult.msg = tmpOpResult.msg;
opResult.data.userpin = tmpOpResult.data.userpin;
}
break;
case "getVerifyCode"://获取默认模板的手机验证码
opResult = await this.utilsAuthSve.getVerifyCodeByMoblie(pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess()
}
break;
case "userPinByLgoin"://通过账户和密码登录
opResult = await this.utilsAuthSve.getReqUserPinByLgoin(pobj, pobj.actionBody);
if (opResult.status == 0) {
return system.getResultSuccess({ userpin: pobj.actionBody.userpin })
}
break;
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"://通过短信注册信息
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"://通过手机验证码修改用户密码
opResult = await this.utilsAuthSve.putUserPwdByMobile(pobj, pobj.actionBody);
break;
case "getLoginInfo"://通过userpin获取用户登录信息
opResult = await this.utilsAuthSve.getLoginInfo(pobj, pobj.actionBody);
break;
case "logout"://用户退出
opResult = await this.utilsAuthSve.userLogout(pobj, pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
*/
async getAppTokenByHosts(pobj, qobj, req) {
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 执行的流程
*/
async getAppTokenByAppKey(pobj, qobj, req) {
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
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class Ic extends APIBase {
constructor() {
super();
this.centerorderSve = system.getObject("service.common.centerorderSve");
this.utilsOrderSve = system.getObject("service.utilsSve.utilsOrderSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
return result;
}
async opActionProcess(pobj, action_process, action_type, action_body, req) {
var opResult = null;
switch (action_type) {
case "deliveryInfo"://办理公司表单数据
break;
case "deliveryStatus"://办理公司状态
break;
case "reqCenterOrderApi"://办理公司状态
break;
case "paySuccess"://支付回调
opResult = await this.centerorderSve.paySuccess(pobj);
break;
case "orderClose"://阿里退款
opResult = await this.utilsOrderSve.orderClose(pobj);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = Ic;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class Need extends APIBase {
constructor() {
super();
this.utilsNeedSve = system.getObject("service.utilsSve.utilsNeedSve");
this.centerorderSve = system.getObject("service.common.centerorderSve");
}
/**
* 接口跳转-POST请求
* action_process 执行的流程
* action_type 执行的类型
* action_body 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionProcess, pobj.actionType, pobj.actionBody, req);
return result;
}
async opActionProcess(pobj, action_process, action_type, action_body, req) {
pobj.requestId = req.requestId;
var self = this;
var opResult = null;
switch (action_type) {
case "submitNeed"://提交需求
opResult = await this.utilsNeedSve.submitNeed(pobj, pobj.actionBody);
break;
case "submitNeedH5"://提交需求
opResult = await this.utilsNeedSve.submitNeedH5(pobj, pobj.actionBody);
break;
case "needClose"://关闭需求
opResult = await this.utilsNeedSve.needClose(pobj, pobj.actionBody);
break;
case "needCloseIcp"://关闭需求
opResult = await this.utilsNeedSve.needCloseIcp(pobj, pobj.actionBody);
break;
case "needDetailByChannelNo":
opResult = await this.utilsNeedSve.needDetailByChannelNo(pobj, pobj.actionBody);
break;
case "getItemByChannelNeedNo":
opResult = await this.utilsNeedSve.getItemByChannelNeedNo(pobj, pobj.actionBody);
break;
case "getItemByNeedNo":
opResult = await this.utilsNeedSve.getItemByNeedNo(pobj, pobj.actionBody);
break;
case "receiveFeedback"://接收方案反馈信息
opResult = await this.centerorderSve.reqCenterOrderApi(pobj);
break;
case "icpFeedbackSubmit"://icp接收方案反馈信息
pobj.actionType = "receiveIcpFeedback";
opResult = await this.utilsNeedSve.reqCenterOrderApi(pobj);
break;
case "icpNotify"://icp方案更新
var rtn = await this.utilsNeedSve.icpNotify(pobj, pobj.actionBody);
if (pobj.actionBody.status == 4 && rtn.status == 0) {
opResult = await self.centerorderSve.icppaysuccess(pobj, pobj.actionBody);
} else {
opResult = rtn;
}
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = Need;
\ No newline at end of file
var APIBase = require("../../api.base");
var system = require("../../../system");
class ChannelPayment extends APIBase {
constructor() {
super();
this.utilsAlibankSve = system.getObject("service.utilsSve.utilsAlibankSve");
}
/**
* 接口跳转-POST请求
* actionProcess 执行的流程
* actionType 执行的类型
* actionBody 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, pobj.actionBody, req);
return result;
}
async opActionProcess(pobj, action_type, action_body, req) {
var opResult = null;
switch (action_type) {
// sy
case "getAliPayInfo"://唤起钉钉h5支付信息---只供简单应用
opResult = await this.utilsAlibankSve.getH5AliDingPayInfo(pobj, pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
//支付成功后通知
async receiveCallBackNotify(pobj, query, req) {
// var rtn = await this.utilstlbankSve.receiveCallBackNotify(pobj.actionBody.parmas, pobj.client_ip);
// return rtn;
}
}
module.exports = ChannelPayment;
\ No newline at end of file
var WEBBase = require("../../web.base");
var system = require("../../../system");
var settings = require("../../../../config/settings");
class PaymentAPI extends WEBBase {
constructor() {
super();
// this.execlient = system.getObject("util.execClient");
// this.centerAppUrl = settings.centerAppUrl();
this.utilsOrderSve = system.getObject("service.utilsSve.utilsOrderSve");
}
/**
* 接口跳转-POST请求
* actionProcess 执行的流程
* actionType 执行的类型
* actionBody 执行的参数
*/
async springBoard(pobj, qobj, req) {
if (!pobj.actionProcess) {
return system.getResult(null, "actionProcess参数不能为空");
}
if (!pobj.actionType) {
return system.getResult(null, "actionType参数不能为空");
}
var result = await this.opActionProcess(pobj, pobj.actionType, pobj.actionBody, req);
return result;
}
async opActionProcess(pobj, action_type, action_body, req) {
var opResult = null;
switch (action_type) {
// sy
case "getH5PayUrl"://H5端订单支付二维码生成
opResult = await this.utilsOrderSve.getH5PayUrl(pobj, pobj.actionBody);
break;
case "getOrderQrCode"://pc端订单支付二维码生成
opResult = await this.utilsOrderSve.getQrCodeInfo(pobj, pobj.actionBody);
break;
case "queryOrderStatus"://通联支付查询
opResult = await this.utilsOrderSve.queryOrderStatus(pobj, pobj.actionBody);
break;
case "getQrCode"://获取pc端支付二维码--不跟订单关联
opResult = await this.utilsOrderSve.getQrCode(pobj, pobj.actionBody);
break;
case "queryOrder"://通联支付查询
opResult = await this.utilsOrderSve.queryOrder(pobj, pobj.actionBody);
break;
default:
opResult = system.getResult(null, "action_type参数错误");
break;
}
return opResult;
}
}
module.exports = PaymentAPI;
\ No newline at end of file
mongoose = require('mongoose');
var Schema = mongoose.Schema({
company_name: { type: String},
})
const ad = mongoose.model('taierphones', Schema);
//导出模型
module.exports =ad;
const system = require("../system");
const settings = require("../../config/settings");
const uuidv4 = require('uuid/v4');
const md5 = require("MD5");
class WEBBase {
constructor() {
this.restClient = system.getObject("util.restClient");
this.cacheManager = system.getObject("db.common.cacheManager");
this.logCtl = system.getObject("service.common.oplogSve");
this.toolSve = system.getObject("service.trademark.toolSve");
this.exTime = 6 * 3600;//缓存过期时间,6小时
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
//-----------------------新的模式------------------开始
async doexecMethod(gname, methodname, pobj, query, req) {
req.requestId = this.getUUID();
try {
var rtn = 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),
clientIp: req.clientIp,
agent: req.uagent,
opTitle: "api服务提供方appKey:" + settings.appKey,
});
rtn.requestId = req.requestId;
return rtn;
} catch (e) {
console.log(e.stack, "api调用出现异常,请联系管理员..........")
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(e.stack),
clientIp: req.clientIp,
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调用出现异常,请联系管理员",
});
var rtnerror = system.getResultFail(-200, "出现异常,error:" + e.stack);
rtnerror.requestId = req.requestId;
return rtnerror;
}
}
//-----------------------新的模式------------------结束
async restPostUrl(pobj, url) {
var rtn = await this.restClient.execPost(pobj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "restPost data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
}
}
module.exports = WEBBase;
const system = require("../../system");
const settings = require("../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
function exp(db, DataTypes) {
var base = {
code: DataTypes.STRING(100),
app_id: DataTypes.INTEGER,//
createuser_id: DataTypes.INTEGER,//
updateuser_id: DataTypes.INTEGER,//
auditoruser_id: DataTypes.INTEGER,//
moneyaccount_id: DataTypes.INTEGER,//
creator: DataTypes.STRING(100),//创建者
updator: DataTypes.STRING(100),//更新者
auditor: DataTypes.STRING(100),//审核者
opNotes: DataTypes.STRING(500),//操作备注
auditStatusName: {
type: DataTypes.STRING(50),
defaultValue: "待审核",
},
auditStatus: {//审核状态"dsh": "待审核", "btg": "不通过", "tg": "通过"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.audit_status),
set: function (val) {
this.setDataValue("auditStatus", val);
this.setDataValue("auditStatusName", uiconfig.config.pdict.audit_status[val]);
},
defaultValue: "dsh",
},
sourceTypeName: DataTypes.STRING(50),
sourceType: {//来源类型 "order": "订单","expensevoucher": "费用单","receiptvoucher": "收款单", "trademark": "商标单"
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.source_type),
set: function (val) {
this.setDataValue("sourceType", val);
this.setDataValue("sourceTypeName", uiconfig.config.pdict.source_type[val]);
}
},
sourceOrderNo: DataTypes.STRING(100),//来源单号
channelServiceNo: DataTypes.STRING(100),//渠道服务单号
};
return base;
}
module.exports = exp;
const system = require("../system")
const settings = require("../../config/settings.js");
class CacheBase {
constructor() {
this.redisClient = system.getObject("util.redisClient");
this.desc = this.desc();
this.prefix = this.prefix();
this.cacheCacheKeyPrefix = "s_sadd_appkeys:" + settings.appKey + "_cachekey";
this.isdebug = this.isdebug();
}
isdebug() {
return false;
}
desc() {
throw new Error("子类需要定义desc方法,返回缓存描述");
}
prefix() {
throw new Error("子类需要定义prefix方法,返回本缓存的前缀");
}
async cache(inputkey, val, ex, ...items) {
const cachekey = this.prefix + inputkey;
var cacheValue = await this.redisClient.get(cachekey);
if (!cacheValue || cacheValue == "undefined" || cacheValue == "null" || this.isdebug) {
var objval = await this.buildCacheVal(cachekey, inputkey, val, ex, ...items);
if (!objval || (objval.status && objval.status != 0)) {
return objval;
}
if (ex) {
await this.redisClient.setWithEx(cachekey, JSON.stringify(objval), ex);
} else {
await this.redisClient.set(cachekey, JSON.stringify(objval));
}
//缓存当前应用所有的缓存key及其描述
this.redisClient.sadd(this.cacheCacheKeyPrefix, [cachekey + "|" + this.desc]);
return objval;
} else {
this.redisClient.set(cachekey, cacheValue, ex);
return JSON.parse(cacheValue);
}
}
async getCache(inputkey, ex) {
const cachekey = this.prefix + inputkey;
var cacheValue = await this.redisClient.get(cachekey);
if (!cacheValue || cacheValue == "undefined" || cacheValue == "null") {
return system.getResultFail(system.cacheInvalidation, "cache is invalidation")
} else {
if (ex) {
this.redisClient.set(cachekey, cacheValue, ex);
}
return JSON.parse(cacheValue);
}
}
async invalidate(inputkey) {
const cachekey = this.prefix + inputkey;
this.redisClient.delete(cachekey);
return 0;
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
throw new Error("子类中实现构建缓存值的方法,返回字符串");
}
}
module.exports = CacheBase;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class AppTokenByHostsCache extends CacheBase {
constructor() {
super();
this.restClient = system.getObject("util.restClient");
}
desc() {
return "应用中缓存访问token";
}
prefix() {
return settings.cacheprefix + "_accesskey:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
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..........");
if (result) {
var tmp = JSON.parse(result);
return tmp;
}
return system.getResult(null, "data is empty");
}
}
module.exports = AppTokenByHostsCache;
const CacheBase=require("../cache.base");
const system=require("../../system");
// const OpenplatformWxop = require("../../wxop/impl/openplatformWxop");
/**
* 飞书小程序--AppAccessToken缓存--有效时间7100s
*/
class feishuAppAccessTokenCache extends CacheBase{
constructor(){
super();
this.restClient = system.getObject("util.restClient");
this.prefix="feishu_appAccessToken_9e28dcb1d637100d";
}
desc() {
return "应用UI配置缓存";
}
prefix() {
return "feishu_appAccessToken_9e28dcb1d637100d";
}
async get(){
var key = this.prefix;
var result = await this.redisClient.get(key);
return result;
}
async set(accessToken,expire){
if(!expire){
expire=7100;
}
var key = this.prefix;
if(accessToken){
await this.redisClient.setWithEx(key,accessToken,expire);
}
return accessToken;
}
}
module.exports=feishuAppAccessTokenCache;
\ No newline at end of file
const CacheBase=require("../cache.base");
const system=require("../../system");
// const OpenplatformWxop = require("../../wxop/impl/openplatformWxop");
/**
* 飞书小程序--AppTicket缓存--有效时间3600s
*/
class feishuAppTicketCache extends CacheBase{
constructor(){
super();
this.restClient = system.getObject("util.restClient");
this.prefix="feishu_appTicket_cli_9e28dcb1d637100d";
}
desc() {
return "应用UI配置缓存";
}
prefix() {
return "feishu_appTicket_cli_9e28dcb1d637100d";
}
async get(){
var key = this.prefix;
var result = await this.redisClient.get(key);
return result
}
async set(appTicket){
var key = this.prefix;
if(appTicket){
await this.redisClient.setWithEx(key,appTicket,3600);
}
return appTicket;
}
}
module.exports=feishuAppTicketCache;
\ No newline at end of file
const CacheBase=require("../cache.base");
const system=require("../../system");
// const OpenplatformWxop = require("../../wxop/impl/openplatformWxop");
/**
* 飞书小程序--UserAccessTokenCache缓存--有效时间7100s
*/
class feishuUserAccessTokenCache extends CacheBase{
constructor(){
super();
this.restClient = system.getObject("util.restClient");
this.prefix="feishu_userAccessToken_9e28dcb1d637100d";
}
desc() {
return "应用UI配置缓存";
}
prefix() {
return "feishu_userAccessToken_9e28dcb1d637100d";
}
async get(openid){
var key = this.prefix+"_"+openid;
var result = await this.redisClient.get(key);
var obj = null;
if(result){
obj = JSON.parse(result);
}
if(obj && obj.access_token){
return obj;
}
return null;
}
async set(obj,openid){
var expire = 7100;
if(obj.expires_in){
var time = obj.expires_in;
var now = Date.parse(new Date())/1000;
if(now<time){
expire = time - now;
}else{
return null;
}
}
var key = this.prefix+"_"+openid;
if(obj && obj.access_token){
var stringobj = JSON.stringify(obj);
await this.redisClient.setWithEx(key,stringobj,expire);
return obj;
}
return null;
}
}
module.exports=feishuUserAccessTokenCache;
\ No newline at end of file
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class MagCache extends CacheBase {
constructor() {
super();
this.prefix = "magCache";
}
desc() {
return "应用UI配置缓存";
}
//暂时没有用到,只是使用其帮助的方法
prefix() {
return settings.cacheprefix + "_uiconfig:";
}
async getCacheSmembersByKey(key) {
return this.redisClient.smembers(key);
}
async delCacheBySrem(key, value) {
return this.redisClient.srem(key, value)
}
async keys(p) {
return this.redisClient.keys(p);
}
async get(k) {
return this.redisClient.get(k);
}
async del(k) {
return this.redisClient.delete(k);
}
async clearAll() {
console.log("xxxxxxxxxxxxxxxxxxxclearAll............");
return this.redisClient.flushall();
}
}
module.exports = MagCache;
const CacheBase = require("../cache.base");
const system = require("../../system");
const settings = require("../../../config/settings");
class TlPayLocker extends CacheBase {
constructor() {
super();
this.prefix = settings.cacheprefix + "_tlPayLocker:";
}
desc() {
return "支付业务锁";
}
prefix() {
return settings.cacheprefix + "_uiconfig:";
}
async init(tradekey) {
const key = this.prefix + tradekey;
return this.redisClient.rpushWithEx(key, "1", 1800);
}
async enter(tradekey) {
const key = this.prefix + tradekey;
return this.redisClient.rpop(key);
}
async release(tradekey) {
const key = this.prefix + tradekey;
return this.redisClient.rpushWithEx(key, "1", 1800);
}
}
module.exports = TlPayLocker;
const CacheBase=require("../cache.base");
const system=require("../../system");
// const OpenplatformWxop = require("../../wxop/impl/openplatformWxop");
/**
* 微信开放平台 公众号或小程序的接口调用凭据(授权方令牌)缓存(2小时后失效)
*/
class WxJsapiTicketCache extends CacheBase{
constructor(){
super();
this.prefix="wx_ticket_wx4c91e81bbb6039cd";
this.restClient = system.getObject("util.restClient");
this.wxTokenSve = system.getObject("service.common.wxTokenSve");
}
desc() {
return "应用UI配置缓存";
}
prefix() {
return "wx_ticket_wx4c91e81bbb6039cd";
}
async get(access_token){//公众号appid
var key = this.prefix;
var result = await this.redisClient.get(key);
var obj = null;
if(result){
console.log(result,"缓存中获取token+++++++++++++++++++++++");
obj=JSON.parse(result);
}
if(!obj){//无缓存
var newobj = await this.wxTokenSve.getJsapiTicket(access_token);
console.log(newobj);
if(newobj){
var newobjstring=JSON.stringify(newobj);
await this.redisClient.setWithEx(key,newobjstring,7000);
return newobj;
}else{
return null;
}
}
return obj;
}
}
module.exports=WxJsapiTicketCache;
\ No newline at end of file
const CacheBase=require("../cache.base");
const system=require("../../system");
// const OpenplatformWxop = require("../../wxop/impl/openplatformWxop");
/**
* 微信开放平台 公众号或小程序的接口调用凭据(授权方令牌)缓存(2小时后失效)
*/
class WxTokenCache extends CacheBase{
constructor(){
super();
this.prefix="wx_toekn_wx4c91e81bbb6039cd";
this.restClient = system.getObject("util.restClient");
this.wxTokenSve = system.getObject("service.common.wxTokenSve");
}
desc() {
return "应用UI配置缓存";
}
prefix() {
return "wx_toekn_wx4c91e81bbb6039cd";
}
async get(){//公众号appid
var key = this.prefix;
var result = await this.redisClient.get(key);
var obj = null;
if(result){
console.log(result,"缓存中获取token+++++++++++++++++++++++");
obj=JSON.parse(result);
}
if(!obj){//无缓存
var newobj = await this.wxTokenSve.getToken();
console.log(newobj);
if(newobj && newobj.access_token){
var newobjstring=JSON.stringify(newobj);
// await this.redisClient.set(key,newobjstring);
// this.redisClient.client.expire(key, 7000);
await this.redisClient.setWithEx(key,newobjstring,7000);
return newobj;
}else{
return null;
}
}
return obj;
}
}
module.exports=WxTokenCache;
\ No newline at end of file
const system = require("../system");
class Dao {
constructor(modelName) {
this.modelName = modelName;
var db = system.getObject("db.common.connection").getCon();
this.db = db;
this.model = db.models[this.modelName];
}
preCreate(u) {
return u;
}
/**
*
* @param {*} u 对象
* @param {*} t 事务对象t
*/
async create(u, t) {
var u2 = this.preCreate(u);
if (t) {
return this.model.create(u2, { transaction: t }).then(u => {
return u;
});
} else {
return this.model.create(u2, { transaction: t }).then(u => {
return u;
});
}
}
static getModelName(ClassObj) {
return ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Dao")).toLowerCase()
}
async refQuery(qobj) {
var w = {};
if (qobj.likestr) {
w[qobj.fields[0]] = { [this.db.Op.like]: "%" + qobj.likestr + "%" };
return this.model.findAll({ where: w, attributes: qobj.fields });
} else {
return this.model.findAll({ attributes: qobj.fields });
}
}
async bulkDeleteByWhere(whereParam, t) {
var en = null;
if (t != null && t != 'undefined') {
whereParam.transaction = t;
return await this.model.destroy(whereParam);
} else {
return await this.model.destroy(whereParam);
}
}
async bulkDelete(ids) {
var en = await this.model.destroy({ where: { id: { [this.db.Op.in]: ids } } });
return en;
}
async delete(qobj) {
var en = await this.model.findOne({ where: qobj });
if (en != null) {
return en.destroy();
}
return null;
}
extraModelFilter() {
//return {"key":"include","value":{model:this.db.models.app}};
return null;
}
extraWhere(obj, where) {
return where;
}
orderBy() {
//return {"key":"include","value":{model:this.db.models.app}};
return [["created_at", "DESC"]];
}
buildAttributes() {
return [];
}
buildQuery(qobj) {
var linkAttrs = [];
const pageNo = qobj.pageInfo.pageNo;
const pageSize = qobj.pageInfo.pageSize;
const search = qobj.search;
const orderInfo = qobj.orderInfo;//格式:[["created_at", 'desc']]
var qc = {};
//设置分页查询条件
qc.limit = pageSize;
qc.offset = (pageNo - 1) * pageSize;
//默认的查询排序
if (orderInfo) {
qc.order = orderInfo;
} else {
qc.order = this.orderBy();
}
//构造where条件
qc.where = {};
if (search) {
Object.keys(search).forEach(k => {
console.log(search[k], ":search[k]search[k]search[k]");
if (search[k] && search[k] != 'undefined' && search[k] != "") {
if ((k.indexOf("Date") >= 0 || k.indexOf("_at") >= 0)) {
if (search[k] != "" && search[k]) {
var stdate = new Date(search[k][0]);
var enddate = new Date(search[k][1]);
qc.where[k] = { [this.db.Op.between]: [stdate, enddate] };
}
}
else if (k.indexOf("id") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("channelCode") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("Type") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("Status") >= 0) {
qc.where[k] = search[k];
}
else if (k.indexOf("status") >= 0) {
qc.where[k] = search[k];
}
else {
if (k.indexOf("~") >= 0) {
linkAttrs.push(k);
} else {
qc.where[k] = { [this.db.Op.like]: "%" + search[k] + "%" };
}
}
}
});
}
this.extraWhere(qobj, qc.where, qc, linkAttrs);
var extraFilter = this.extraModelFilter();
if (extraFilter) {
qc[extraFilter.key] = extraFilter.value;
}
var attributesObj = this.buildAttributes();
if (attributesObj && attributesObj.length > 0) {
qc.attributes = attributesObj;
}
console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm");
console.log(qc);
return qc;
}
async findAndCountAll(qobj, t) {
var qc = this.buildQuery(qobj);
var apps = await this.model.findAndCountAll(qc);
return apps;
}
preUpdate(obj) {
return obj;
}
async update(obj, tm) {
var obj2 = this.preUpdate(obj);
if (tm != null && tm != 'undefined') {
return this.model.update(obj2, { where: { id: obj2.id }, transaction: tm });
} else {
return this.model.update(obj2, { where: { id: obj2.id } });
}
}
async updateByWhere(setObj, whereObj, t) {
if (t && t != 'undefined') {
if (whereObj && whereObj != 'undefined') {
whereObj.transaction = t;
} else {
whereObj = { transaction: t };
}
}
return this.model.update(setObj, whereObj);
}
async customExecAddOrPutSql(sql, paras = null) {
return this.db.query(sql, paras);
}
async customQuery(sql, paras, t) {
var tmpParas = null;//||paras=='undefined'?{type: this.db.QueryTypes.SELECT }:{ replacements: paras, type: this.db.QueryTypes.SELECT };
if (t && t != 'undefined') {
if (paras == null || paras == 'undefined') {
tmpParas = { type: this.db.QueryTypes.SELECT };
tmpParas.transaction = t;
} else {
tmpParas = { replacements: paras, type: this.db.QueryTypes.SELECT };
tmpParas.transaction = t;
}
} else {
tmpParas = paras == null || paras == 'undefined' || paras.keys == 0 ? { type: this.db.QueryTypes.SELECT } : { replacements: paras, type: this.db.QueryTypes.SELECT };
}
var result = this.db.query(sql, tmpParas);
return result;
}
async customInsert(sql, paras, t) {
var tmpParas = null;
if (t && t != 'undefined') {
if (paras == null || paras == 'undefined') {
tmpParas = { type: this.db.QueryTypes.INSERT };
tmpParas.transaction = t;
} else {
tmpParas = { replacements: paras, type: this.db.QueryTypes.INSERT };
tmpParas.transaction = t;
}
} else {
tmpParas = paras == null || paras == 'undefined' || paras.keys == 0 ? { type: this.db.QueryTypes.INSERT } : { replacements: paras, type: this.db.QueryTypes.INSERT };
}
var result = this.db.query(sql, tmpParas);
return result;
}
async customDelete(sql, paras, t) {
var tmpParas = null;
if (t && t != 'undefined') {
if (paras == null || paras == 'undefined') {
tmpParas = { type: this.db.QueryTypes.DELETE };
tmpParas.transaction = t;
} else {
tmpParas = { replacements: paras, type: this.db.QueryTypes.DELETE };
tmpParas.transaction = t;
}
} else {
tmpParas = paras == null || paras == 'undefined' || paras.keys == 0 ? { type: this.db.QueryTypes.DELETE } : { replacements: paras, type: this.db.QueryTypes.DELETE };
}
var result = this.db.query(sql, tmpParas);
return result;
}
async customUpdate(sql, paras, t) {
var tmpParas = null;
if (t && t != 'undefined') {
if (paras == null || paras == 'undefined') {
tmpParas = { type: this.db.QueryTypes.UPDATE };
tmpParas.transaction = t;
} else {
tmpParas = { replacements: paras, type: this.db.QueryTypes.UPDATE };
tmpParas.transaction = t;
}
} else {
tmpParas = paras == null || paras == 'undefined' ? { type: this.db.QueryTypes.UPDATE } : { replacements: paras, type: this.db.QueryTypes.UPDATE };
}
return this.db.query(sql, tmpParas);
}
async findCount(whereObj = null) {
return this.model.count(whereObj, { logging: false }).then(c => {
return c;
});
}
async findSum(fieldName, whereObj = null) {
return this.model.sum(fieldName, whereObj);
}
async getPageList(pageIndex, pageSize, whereObj = null, orderObj = null, attributesObj = null, includeObj = null) {
var tmpWhere = {};
tmpWhere.limit = pageSize;
tmpWhere.offset = (pageIndex - 1) * pageSize;
if (whereObj != null) {
tmpWhere.where = whereObj;
}
if (orderObj != null && orderObj.length > 0) {
tmpWhere.order = orderObj;
}
if (attributesObj != null && attributesObj.length > 0) {
tmpWhere.attributes = attributesObj;
}
if (includeObj != null && includeObj.length > 0) {
tmpWhere.include = includeObj;
tmpWhere.distinct = true;
}
tmpWhere.raw = true;
return await this.model.findAndCountAll(tmpWhere);
}
async findOne(obj, t) {
var params = { "where": obj };
if (t) {
params.transaction = t;
}
return this.model.findOne(params);
}
async findById(oid) {
return this.model.findById(oid);
}
}
module.exports = Dao;
const system=require("../../../system");
const fs=require("fs");
const settings=require("../../../../config/settings");
var glob = require("glob");
class APIDocManager{
constructor(){
this.doc={};
this.buildAPIDocMap();
}
async buildAPIDocMap(){
var self=this;
//订阅任务频道
var apiPath=settings.basepath+"/app/base/api/impl";
var rs = glob.sync(apiPath + "/**/*.js");
if(rs){
for(let r of rs){
// var ps=r.split("/");
// var nl=ps.length;
// var pkname=ps[nl-2];
// var fname=ps[nl-1].split(".")[0];
// var obj=system.getObject("api."+pkname+"."+fname);
var ClassObj=require(r);
var obj=new ClassObj();
var gk=obj.apiDoc.group+"|"+obj.apiDoc.groupDesc
if(!this.doc[gk]){
this.doc[gk]=[];
this.doc[gk].push(obj.apiDoc);
}else{
this.doc[gk].push(obj.apiDoc);
}
}
}
}
}
module.exports=APIDocManager;
const fs = require("fs");
const settings = require("../../../../config/settings");
class CacheManager {
constructor() {
//await this.buildCacheMap();
this.buildCacheMap();
}
buildCacheMap() {
try {
var self = this;
self.doc = {};
var cachePath = settings.basepath + "/app/base/db/cache/";
const files = fs.readdirSync(cachePath);
if (files) {
files.forEach(function (r) {
var classObj = require(cachePath + "/" + r);
self[classObj.name] = new classObj();
var refTmp = self[classObj.name];
if (refTmp.prefix) {
self.doc[refTmp.prefix] = refTmp.desc;
}
else {
console.log("请在" + classObj.name + "缓存中定义prefix");
}
});
}
} catch (e) {
console.log(e.stack, "CacheManager................error")
}
}
}
module.exports = CacheManager;
// var cm= new CacheManager();
// cm["InitGiftCache"].cacheGlobalVal("hello").then(function(){
// cm["InitGiftCache"].cacheGlobalVal().then(x=>{
// console.log(x);
// });
// });
const Sequelize = require('sequelize');
const settings = require("../../../../config/settings")
const fs = require("fs")
const path = require("path");
var glob = require("glob");
class DbFactory {
constructor() {
const dbConfig = settings.database();
this.db = new Sequelize(dbConfig.dbname,
dbConfig.user,
dbConfig.password,
dbConfig.config);
this.db.Sequelize = Sequelize;
this.db.Op = Sequelize.Op;
this.initModels();
this.initRelations();
}
async initModels() {
var self = this;
var modelpath = path.normalize(path.join(__dirname, '../..')) + "/models/";
console.log("modelpath=====================================================");
console.log(modelpath);
var models = glob.sync(modelpath + "/**/*.js");
console.log(models.length);
models.forEach(function (m) {
console.log(m);
self.db.import(m);
});
console.log("init models....");
}
async initRelations() {
/**
一个账户对应多个登陆用户
一个账户对应一个commany
一个APP对应多个登陆用户
一个APP有多个角色
登陆用户和角色多对多
**/
/*建立账户和用户之间的关系*/
//account--不属于任何一个app,是统一用户
//用户登录时首先按照用户名和密码检查account是否存在,如果不存在则提示账号或密码不对,如果
//存在则按照按照accountid和应用key,查看user,后台实现对应user登录
}
//async getCon(){,用于使用替换table模型内字段数据使用
getCon() {
//同步模型
if (settings.env == "dev") {
}
return this.db;
}
getConhb() {
var that = this;
if (settings.env == "dev") {
}
return this.dbhb;
}
}
module.exports = DbFactory;
const system=require("../../../system");
const Dao=require("../../dao.base");
class GatewaypushlogDao extends Dao{
constructor(){
super(Dao.getModelName(GatewaypushlogDao));
}
}
module.exports=GatewaypushlogDao;
const mongoose = require('mongoose')
class MgDbFactory {
constructor() {
const reqUrl = "mongodb://wdy1:123456@43.247.184.94:27017/phones";
this.mgdb = mongoose.connect(reqUrl, { useNewUrlParser: true });
}
getModel(tabName) {
// let schema = require("./model/" + tabName.replace(/_/g, "."));
let model = mongoose.models[tabName];
if (!model) {
model = mongoose.model(tabName, new mongoose.Schema({
company_name: { type: String }
}), tabName);
}
return model
}
}
module.exports = MgDbFactory;
\ No newline at end of file
const system=require("../../../system");
const Dao=require("../../dao.base");
class OplogDao extends Dao{
constructor(){
super(Dao.getModelName(OplogDao));
}
}
module.exports=OplogDao;
const system=require("../../../system");
const Dao=require("../../dao.base");
class PushFailLogDao extends Dao{
constructor(){
super(Dao.getModelName(PushFailLogDao));
}
}
module.exports=PushFailLogDao;
\ No newline at end of file
const system=require("../../../system");
const Dao=require("../../dao.base");
class PushlogDao extends Dao{
constructor(){
super(Dao.getModelName(PushlogDao));
}
}
module.exports=PushlogDao;
\ No newline at end of file
module.exports = {
"appid": "201911061250",
"label": "知产渠道api应用",
"config": {
"rstree": {
"code": "paasroot",
"label": "paas",
"children": [
// {
// "code": "register",
// "icon": "fa fa-power-off",
// "path": "register",
// "isMenu": false,
// "label": "注册",
// "isctl": "no"
// },
],
},
"bizs": {
},
"pdict": {
"logLevel": { "debug": 0, "info": 1, "warn": 2, "error": 3, "fatal": 4 },
"push_return_type": { "0": "推送失败", "1": "推送成功" },
},
}
}
\ No newline at end of file
const fs=require("fs");
const path=require("path");
const appsPath=path.normalize(__dirname+"/apps");
const bizsPath=path.normalize(__dirname+"/bizs");
var appJsons={
}
function getBizFilePath(appJson,bizCode){
const filePath=bizsPath+"/"+"bizjs"+"/"+bizCode+".js";
return filePath;
}
//异常日志处理todo
function initAppBizs(appJson){
for(var bizCode in appJson.config.bizs)
{
const bizfilePath=getBizFilePath(appJson,bizCode);
try{
delete require.cache[bizfilePath];
const bizConfig=require(bizfilePath);
appJson.config.bizs[bizCode].config=bizConfig;
}catch(e){
console.log("bizconfig meta file not exist........");
}
}
return appJson;
}
//初始化资源树--objJson是rstree
function initRsTree(appjson,appidfolder,objJson,parentCodePath){
if(!parentCodePath){//说明当前是根结点
objJson.codePath=objJson.code;
}else{
objJson.codePath=parentCodePath+"/"+objJson.code;
}
if(objJson["bizCode"]){//表示叶子节点
objJson.auths=[];
if(appjson.config.bizs[objJson["bizCode"]]){
objJson.bizConfig=appjson.config.bizs[objJson["bizCode"]].config;
objJson.path=appjson.config.bizs[objJson["bizCode"]].path;
appjson.config.bizs[objJson["bizCode"]].codepath=objJson.codePath;
}
}else{
if(objJson.children){
objJson.children.forEach(obj=>{
initRsTree(appjson,appidfolder,obj,objJson.codePath);
});
}
}
}
fs.readdirSync(appsPath).forEach(f=>{
const ff=path.join(appsPath,f);
delete require.cache[ff];
var appJson=require(ff);
appJson= initAppBizs(appJson);
initRsTree(appJson,appJson.appid,appJson.config.rstree,null);
appJsons[appJson.appid]=appJson;
});
module.exports=appJsons;
module.exports={
"appid":"wx76a324c5d201d1a4",
"label":"企业服务工具箱",
"config":{
"rstree":{
"code":"toolroot",
"label":"工具箱",
"children":[
{
"code":"toggleHeader",
"icon":"el-icon-sort",
"isMenu":true,
"label":"折叠",
},
{
"code":"personCenter",
"label":"个人信息",
"src":"/imgs/logo.png",
"isSubmenu":true,
"children":[
{"code":"wallet","isGroup":true,"label":"账户","children":[
{"code":"mytraderecord","label":"交易记录","isMenu":true,"bizCode":"trades","bizConfig":null,"path":""},
{"code":"smallmoney","label":"钱包","isMenu":true,"bizCode":"oplogs","bizConfig":null,"path":""},
{"code":"fillmoney","label":"充值","isMenu":true,},
]},
{"code":"tool","isGroup":true,"label":"工具","children":[
{"code":"entconfirm","label":"企业用户认证","isMenu":true,"bizCode":"apps","bizConfig":null,"path":""},
{"code":"fav","label":"收藏夹","isMenu":true,"bizCode":"fav","bizConfig":null,"path":""},
{"code":"filebox","label":"文件柜","isMenu":true,"bizCode":"filebox","bizConfig":null,"path":""},
]},
],
},
{
"code":"fillmoney",
"icon":"fa fa-money",
"isMenu":true,
"label":"充值",
},
{
"code":"platformop",
"label":"平台运营",
"icon":"fa fa-cubes",
"isSubmenu":true,
"children":[
{"code":"papp","isGroup":true,"label":"平台数据","children":[
{"code":"papparch","label":"应用档案","isMenu":true,"bizCode":"apps","bizConfig":null,"path":""},
{"code":"userarch","label":"用户档案","isMenu":true,"bizCode":"pusers","bizConfig":null,"path":""},
{"code":"traderecord","label":"交易记录","isMenu":true,"bizCode":"trades","bizConfig":null,"qp":"my","path":""},
{"code":"pconfigs","label":"平台配置","isMenu":true,"bizCode":"pconfigs","bizConfig":null,"qp":"my","path":""},
]},
{"code":"pop","isGroup":true,"label":"平台运维","children":[
{"code":"cachearch","label":"缓存档案","isMenu":true,"bizCode":"cachearches","bizConfig":null,"path":""},
{"code":"oplogmag","label":"行为日志","isMenu":true,"bizCode":"oplogs","bizConfig":null,"path":""},
{"code":"machinearch","label":"机器档案","isMenu":true,"bizCode":"machines","bizConfig":null,"path":""},
{"code":"codezrch","label":"代码档案","isMenu":true,"bizCode":"codezrch","bizConfig":null,"path":""},
{"code":"imagearch","label":"镜像档案","isMenu":true},
{"code":"containerarch","label":"容器档案","isMenu":true},
]},
],
},
{
"code":"sysmag",
"label":"系统管理",
"icon":"fa fa-cube",
"isSubmenu":true,
"children":[
{"code":"usermag","isGroup":true,"label":"用户管理","children":[
{"code":"rolearch","label":"角色档案","isMenu":true,"bizCode":"roles","bizConfig":null},
{"code":"appuserarch","label":"用户档案","isMenu":true,"bizCode":"appusers","bizConfig":null},
]},
{"code":"productmag","isGroup":true,"label":"产品管理","children":[
{"code":"productarch","label":"产品档案","bizCode":"mgproducts","isMenu":true,"bizConfig":null},
{"code":"products","label":"首页产品档案","bizCode":"products","isMenu":false,"bizConfig":null},
]},
],
},
{
"code":"exit",
"icon":"fa fa-power-off",
"isMenu":true,
"label":"退出",
},
{
"code":"toolCenter",
"label":"工具集",
"src":"/imgs/logo.png",
"isSubmenu":false,
"isMenu":false,
"children":[
{"code":"tools","isGroup":true,"label":"查询工具","children":[
{"code":"xzquery","label":"续展查询","bizCode":"xzsearch","bizConfig":null,"path":""},
{"code":"xzgqquery","label":"续展过期查询","bizCode":"xzgqsearch","bizConfig":null,"path":""},
]},
],
},
],
},
"bizs":{
"cachearches":{"title":"首页产品档案","config":null,"path":"/platform/cachearches","comname":"cachearches"},
"products":{"title":"首页产品档案","config":null,"path":"/","comname":"products"},
"mgproducts":{"title":"产品档案","config":null,"path":"/platform/mgproducts","comname":"mgproducts"},
"codezrch":{"title":"代码档案","config":null,"path":"/platform/codezrch","comname":"codezrch"},
"machines":{"title":"机器档案","config":null,"path":"/platform/machines","comname":"machines"},
"pconfigs":{"title":"平台配置","config":null,"path":"/platform/pconfigs","comname":"pconfigs"},
"apps":{"title":"应用档案","config":null,"path":"/platform/apps","comname":"apps"},
"roles":{"title":"角色档案","config":null,"path":"/platform/roles","comname":"roles"},
"pusers":{"title":"平台用户档案","config":null,"path":"/platform/pusers","comname":"users"},
"appusers":{"title":"某应用用户档案","config":null,"path":"/platform/appusers","comname":"users"},
"oplogs":{"title":"行为日志","config":null,"path":"/platform/op/oplogs","comname":"oplogs"},
"trades":{"title":"交易记录","config":null,"path":"/platform/uc/trades","comname":"trades"},
"xzsearch":{"title":"续展查询","config":null,"isDynamicRoute":true,"path":"/products/xzsearch","comname":"xzsearch"},
"xzgqsearch":{"title":"续展过期查询","config":null,"isDynamicRoute":true,"path":"/products/xzgqsearch","comname":"xzgqsearch"},
},
"pauths":[
"add","edit","delete","export","show"
],
"pdict":{
"sex":{"male":"男","female":"女"},
"configType":{"price":"宝币兑换率","initGift":"初次赠送"},
"productCata":{"ip":"知产","ic":"工商","tax":"财税","hr":"人力","common":"常用"},
"logLevel":{"debug":0,"info":1,"warn":2,"error":3,"fatal":4},
"tradeType":{"fill":"充值","consume":"消费","gift":"赠送","giftMoney":"红包","refund":"退款"},
"tradeStatus":{"unSettle":"未结算","settled":"已结算"}
}
}
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("gatewaypushlog", {
requestId: DataTypes.STRING,
requestUrl: DataTypes.STRING, //请求地址
requestjson: DataTypes.STRING,//请求地址
pushUrl: DataTypes.STRING,//调用地址
pushActionType: DataTypes.STRING,//调用参数
pushtimes:DataTypes.INTEGER,//推送次数
pushStatus:DataTypes.STRING,//推送状态
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'gateway_pushlog',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("oplog", {
appid: DataTypes.STRING,
appkey: DataTypes.STRING,
requestId: DataTypes.STRING,
logLevel: {
type: DataTypes.ENUM,
allowNull: false,
values: Object.keys(uiconfig.config.pdict.logLevel),
defaultValue: "info",
},
op: DataTypes.STRING(4000),
content: DataTypes.TEXT('long'),
resultInfo: DataTypes.TEXT('long'),
clientIp: DataTypes.STRING,
agent: DataTypes.STRING(500),
opTitle: DataTypes.TEXT,
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'center_channel_log',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("pushfaillog", {
appid: DataTypes.STRING,
appkey: DataTypes.STRING,
requestId: DataTypes.STRING,
content: DataTypes.TEXT('long'),
resultInfo: DataTypes.TEXT('long'),
clientIp: DataTypes.STRING,
opTitle: DataTypes.STRING(500),
failType: DataTypes.INTEGER,//错误类型,1为old-rpc推送失败日志,2为new-rpc推送失败日志,业务处理失败日志
pushNumber: DataTypes.INTEGER,//推送次数
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'center_channel_pushfaillog',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system = require("../../../system");
const settings = require("../../../../config/settings");
const uiconfig = system.getUiConfig2(settings.appKey);
module.exports = (db, DataTypes) => {
return db.define("pushlog", {
appid: DataTypes.STRING,
appkey: DataTypes.STRING,
requestId: DataTypes.STRING,
logLevel: {
type: DataTypes.ENUM,
allowNull: false,
values: Object.keys(uiconfig.config.pdict.logLevel),
defaultValue: "info",
},
op: DataTypes.STRING(4000),
content: DataTypes.TEXT('long'),
resultInfo: DataTypes.TEXT('long'),
returnTypeName: DataTypes.STRING,
returnType: {
type: DataTypes.ENUM,
values: Object.keys(uiconfig.config.pdict.push_return_type),
set: function (val) {
this.setDataValue("returnType", val);
this.setDataValue("returnTypeName", uiconfig.config.pdict.push_return_type[val]);
},
defaultValue: "0",
}, //数据推送返回结果类型 push_return_type:{"0":"失败","1":"成功"}
clientIp: DataTypes.STRING,
agent: DataTypes.STRING(500),
opTitle: DataTypes.STRING(500),
}, {
paranoid: false,//假的删除
underscored: true,
version: true,
freezeTableName: true,
timestamps: true,
updatedAt: false,
//freezeTableName: true,
// define the table's name
tableName: 'center_channel_pushlog',
validate: {
},
indexes: [
// Create a unique index on email
// {
// unique: true,
// fields: ['email']
// },
//
// // Creates a gin index on data with the jsonb_path_ops operator
// {
// fields: ['data'],
// using: 'gin',
// operator: 'jsonb_path_ops'
// },
//
// // By default index name will be [table]_[fields]
// // Creates a multi column partial index
// {
// name: 'public_by_author',
// fields: ['author', 'status'],
// where: {
// status: 'public'
// }
// },
//
// // A BTREE index with a ordered field
// {
// name: 'title_index',
// method: 'BTREE',
// fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}]
// }
]
});
}
const system=require("../system")
const logCtl=system.getObject("service.common.oplogSve");
class TaskBase{
constructor(className){
this.redisClient=system.getObject("util.redisClient");
this.serviceName=className;
}
async doTask(){
try {
await this.subDoTask();
//日志记录
logCtl.info({
optitle:this.serviceName+",任务成功执行完成",
op:"base/db/task.base.js",
content:"",
clientIp:""
});
} catch (e) {
//日志记录
logCtl.error({
optitle:this.serviceName+"任务执行异常",
op:"base/db/task.base.js",
content:e.stack,
clientIp:""
});
}
}
async subDoTask(){
console.log("请在子类中重写此方法进行操作业务逻辑............................!");
}
static getServiceName(ClassObj){
return ClassObj["name"];
}
}
module.exports=TaskBase;
const system = require("../system");
const moment = require('moment')
const settings = require("../../config/settings");
const md5 = require("MD5");
const uuidv4 = require('uuid/v4');
class AppServiceBase {
constructor() {
this.restClient = system.getObject("util.restClient");
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 };
this.logCtl = system.getObject("service.common.oplogSve");
}
/**
* 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
*/
async verifySign(params, app_key) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
if (!params.sign) {
return system.getResult(null, "请求参数sign为空");
}
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey] && !(typeof (params[tKey]) === "object")) {
signArr.push(tKey + "=" + params[tKey]);
}
}
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
if (params.sign != resultTmpSign) {
return system.getResult(null, "返回值签名验证失败");
}
return system.getResultSuccess();
}
async restPostUrl(pobj, url) {
try {
var rtn = await this.restClient.execPost(pobj, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "restPost data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/restPostUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->restPostUrl",
});
return system.getResult(null, errorMsg);
}
}
async restPostWithHValueUrl(pobj, url, hValue) {//curl请求带请求头信息
try {
if (!hValue) {
hValue = "YLc6GsgLtuRGaVA5Om848x18NxLtHlyA";
}
var rtn = await this.restClient.execPostWithHValue(pobj, url, hValue);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "execPostWithHValue data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/restPostWithHValueUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->restPostWithHValueUrl",
});
return system.getResult(null, errorMsg);
}
}
async restPostWithHAuthorizationUrl(pobj, userToken, url) {//curl请求带请求头信息
try {
var rtn = await this.restClient.restPostWithHAuthorizationUrl(userToken, url);
if (!rtn || !rtn.stdout) {
return system.getResult(null, "restPostWithHAuthorizationUrl data is empty");
}
var result = JSON.parse(rtn.stdout);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/restPostWithHAuthorizationUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->restPostWithHAuthorizationUrl",
});
return system.getResult(null, errorMsg);
}
}
async execPostUrl(pobj, url) {
try {
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);
return result;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/execPostUrl",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "基类操作异常->execPostUrl",
});
return system.getResult(null, errorMsg);
}
}
async opAliyunRpcVerifyParam(pobj) {//参数信息验证
var verify = system.getResultSuccess();
if (!pobj.interface_params) {
verify = system.getResult(null, "interface_params can not be empty,100440");
}
var interface_params_info = JSON.parse(pobj.interface_params);
if (!interface_params_info || !interface_params_info.action) {
verify = system.getResult(null, "interface_params.action can not be empty,100443");
}
verify.data = interface_params_info;
return verify;
}
/**
* 阿里RPC调用
* @param {*} pobj {action: rpcParam.action,reqbody: pobj.actionBody,rpcParam: rpcParam}
* @param {*} params {为阿里的接口参数}
*/
async opAliyunRpcReq(pobj, params) {
try {
// var action = obj.action;
// var reqbody = obj.reqbody;
// var rpcParam = obj.rpcParam;
var aliyunClient = system.getObject("util.aliyunClient");
var rtn = await aliyunClient.reqCustomByGet(params);
return rtn;
} catch (e) {
var errorMsg = "error:" + e.stack;
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/impl/utilsSve/opAliyunClientPost.js/opAliyunRpcReq",
content: errorMsg,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->opAliyunRpcReq",
});
return system.getResult(null, errorMsg);
}
}
// /**
// * 阿里RPC调用-post请求
// * @param {*} pobj {action: rpcParam.action,reqbody: pobj.actionBody,rpcParam: rpcParam}
// * @param {*} params {为阿里的接口参数}
// */
// async opAliyunRpcReqByPost(pobj, params) {
// try {
// // var action = obj.action;
// // var reqbody = obj.reqbody;
// // var rpcParam = obj.rpcParam;
// var aliyunClient = system.getObject("util.aliyunClient");
// var rtn = await aliyunClient.reqCustomByPost(params);
// return rtn;
// } catch (e) {
// var errorMsg = "error:" + e.stack;
// //日志记录
// this.logCtl.error({
// appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
// appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
// requestId: pobj.requestId || "",
// op: "service/impl/utilsSve/opAliyunClientPost.js/opAliyunRpcReqByPost",
// content: errorMsg,
// // clientIp: pobj.clientIp,
// optitle: pobj.opType + "推送操作异常->opAliyunRpcReqByPost",
// });
// return system.getResult(null, errorMsg);
// }
// }
/**
* 处理成功后的信息
* @param {*} pobj
* @param {*} result
* @param {*} opTitleDesc
* @param {*} failType this.pushlogFailType
*/
async disposePushResult(pobj, result, opTitleDesc, failType) {//处理结果信息--内部使用
var opType = pobj.opType || "";
if (result.status != 0) {
this.pushlogSve.createFailLogDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
content: JSON.stringify(pobj),//推送的参数信息
resultInfo: JSON.stringify(result),
clientIp: pobj.clientIp || "",
failType: failType || 3,
opTitle: opType + "推送操作失败->" + opTitleDesc,
pushNumber: pobj.pushNumber || 1
});
result.data = null;
return result;
}
this.pushlogSve.createDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "推送业务类型:" + opType,
content: JSON.stringify(pobj),//推送的参数信息
resultInfo: JSON.stringify(result),
returnType: '1',
opTitle: opType + "数据推送成功->" + opTitleDesc
});
result.data = null;
return result;
}
/**
* 处理失败的结果信息--内部使用
* @param {*} pobj
* @param {*} result
* @param {*} opTitleDesc
* @param {*} failType this.pushlogFailType
*/
async disposePushResultFail(pobj, result, opTitleDesc, failType) {//处理失败的结果信息--内部使用
var opType = pobj.opType || "";
this.pushlogSve.createFailLogDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
content: JSON.stringify(pobj),//推送的参数信息
resultInfo: JSON.stringify(result),
clientIp: pobj.clientIp || "",
failType: failType || 3,
opTitle: opType + "推送操作失败->" + opTitleDesc,
pushNumber: pobj.pushNumber || 1
});
result.data = null;
return result;
}
async getAliossjavaFileUrl(pobj, params) {//上传ali oss 文件调用
var opType = pobj.opType || "";
try {
var aliOssFileInfo = await this.execPostUrl(params, settings.aliossjavaUrl());
if (aliOssFileInfo == true) {
var fileUrl = params.filedir + "/" + params.objectName;
return system.getResultSuccess(fileUrl);
}
this.pushlogSve.createFailLogDb({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
content: JSON.stringify(params),//推送的参数信息
resultInfo: JSON.stringify(aliOssFileInfo),
clientIp: pobj.clientIp || "",
failType: 3,
opTitle: opType + "aliossjava-upload阿里上传文件操作失败->getAliossjavaFileUrl",
pushNumber: 1
});
return system.getResult(null, "java ali oss upload fail");
} catch (e) {
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/app.base.js/getAliossjavaFileUrl",
content: "error:" + e.stack,
// clientIp: pobj.clientIp,
optitle: pobj.opType || "" + "aliossjava-upload阿里上传文件操作异常->getAliossjavaFileUrl",
});
return system.getResult(-200, "java ali oss upload error");
}
}
async opDownFileInfo(docUrl, result) { //从oss下载到本地并上传到自己oss,之后删除本地文件
/*docUrl下载链接,全路径,如:https://XXXXXX.pdf?XXXXX */
try {
var tmpFileName = docUrl.substring(0, docUrl.lastIndexOf("?"));
var fileName = tmpFileName.substr(tmpFileName.lastIndexOf("/") + 1, tmpFileName.lenght);
var fileType = tmpFileName.substr(tmpFileName.lastIndexOf(".") + 1, tmpFileName.lenght);
//解码后的文件全名:xxx.pdf
var fileAllName = decodeURIComponent(fileName);//为xxx.pdf
var saveFilePath = '/tmp/' + fileAllName;
// 下载文件到指定的路径
var tmpp = await this.restClient.execDownload("'" + docUrl + "'", saveFilePath);
//上传 saveFilePath的文件 到ossClient
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
var upFileName = "alifile_" + u + "." + fileType;
var rtn = await this.ossClient.upfile(upFileName, saveFilePath);
result.data = rtn;
//删除本地文件
fs.unlink(saveFilePath, function (err) { });
} catch (e) {
result.code = -200;
result.message = "通过flowId获取到的文件url下载操作异常异常error";
console.log(e.stack);
//日志记录
logCtl.error({
optitle: "e签宝通过flowId获取到的文件url下载操作异常异常error",
op: "base/service/impl/utilesignbaoSve/opDownFileInfo",
content: "请求参数:docUrl=" + docUrl + ",异常信息error:" + e.stack,
clientIp: ""
});
}
return result;
}
async getOpInterfaceByProductId(appInfo, product_id) {//获取产品调用接口
var getProductInterfaceUrl = settings.centerAppUrl() + "action/opProduct/springBoard";
var getProductInterfaceObj = {
"actionType": "getProductInterface",
"appInfo": appInfo,
"actionBody": { "product_id": product_id }
};
var productItemInterfaceResult = await this.restPostUrl(getProductInterfaceObj, getProductInterfaceUrl);
return productItemInterfaceResult;
}
async getConvertSemiangleStr(str) {//去除空格及全角转半角
var result = "";
str = str.replace(/\s+/g, "");
var len = str.length;
for (var i = 0; i < len; i++) {
var cCode = str.charCodeAt(i);
//全角与半角相差(除空格外):65248(十进制)
cCode = (cCode >= 0xFF01 && cCode <= 0xFF5E) ? (cCode - 65248) : cCode;
//处理空格
cCode = (cCode == 0x03000) ? 0x0020 : cCode;
result += String.fromCharCode(cCode);
}
return result;
}
/*
返回20位业务订单号
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;
}
/*
len:返回长度
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('');
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
}
module.exports = AppServiceBase;
const system = require("../../../system")
const AppServiceBase = require("../../app.base")
const settings = require("../../../../config/settings")
class AskForService extends AppServiceBase {
constructor() {
super();
this.restClient = system.getObject("util.restClient")
this.centerOrderUrl = settings.centerOrderUrl()
this.centerCacheUrl = settings.centerCacheUrl()
}
/**
* @description 商标尼斯查询
* @author liangwk
* @param {*} param
* @returns
* @memberof AskForService
*/
async niceQuery (param) {
let url = `${this.centerCacheUrl}tm_treasure_name`
let result = await this.restClient.execPost(param, url)
result = result.stdout
result = JSON.parse(result)
return result;
}
/**
* @description 获取收藏列表
* @author liangwk
* @param {*} pobj
* @returns
* @memberof AskForService
*/
async getCollect (pobj) {
if (pobj.actionBody.collections) {
pobj.actionType = 'getByUidAndCollections'
} else {
pobj.actionType = 'getByUid'
}
let url = `${this.centerOrderUrl}askfor/collect/tradeMark`
let result = await this.restClient.execPost(pobj, url)
result = result.stdout
result = JSON.parse(result)
return result
}
/**
* @description
* @author liangwk
* @param {*} pobj
* @returns
* @memberof AskForService
*/
async collect (pobj) {
pobj.actionType = pobj.actionBody.id ? 'delete' : 'create'
let url = `${this.centerOrderUrl}askfor/collect/tradeMark`
let result = await this.restClient.execPost(pobj, url)
result = result.stdout
result = JSON.parse(result)
return result
}
async getAskFor (pobj) {
pobj.actionType = 'getByUid'
let url = `${this.centerOrderUrl}askfor/askfor/tradeMark`
let result = await this.restClient.execPost(pobj, url)
result = result.stdout
result = JSON.parse(result)
return result
}
async askFor (pobj) {
pobj.actionType = pobj.actionBody.id ? 'delete' : 'create'
let url = `${this.centerOrderUrl}askfor/askfor/tradeMark`
let result = await this.restClient.execPost(pobj, url)
result = result.stdout
result = JSON.parse(result)
return result
}
}
module.exports = AskForService;
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
var settings = require("../../../../config/settings");
class CacheService {
constructor() {
this.cacheManager = system.getObject("db.common.cacheManager");
}
async buildCacheRtn(pageValues) {
var ps = pageValues.map(k => {
var tmpList = k.split("|");
if (tmpList.length == 2) {
return { name: tmpList[0], val: tmpList[1], key: k };
}
});
return ps;
}
async findAndCountAll(obj) {
const pageNo = obj.pageInfo.pageNo;
const pageSize = obj.pageInfo.pageSize;
const limit = pageSize;
const offset = (pageNo - 1) * pageSize;
var search_name = obj.search && obj.search.name ? obj.search.name : "";
var cacheCacheKeyPrefix = "sadd_children_appkeys:" + settings.appKey + "_cachekey";
var cacheList = await this.cacheManager["MagCache"].getCacheSmembersByKey(cacheCacheKeyPrefix);
if (search_name) {
cacheList = cacheList.filter(f => f.indexOf(search_name) >= 0);
}
var pageValues = cacheList.slice(offset, offset + limit);
var kobjs = await this.buildCacheRtn(pageValues);
var tmpList = { results: { rows: kobjs, count: cacheList.length } };
return system.getResultSuccess(tmpList);
}
async delCache(obj) {
var keyList = obj.del_cachekey.split("|");
if (keyList.length == 2) {
var cacheCacheKeyPrefix = "sadd_children_appkeys:" + settings.appKey + "_cachekey";
await this.cacheManager["MagCache"].delCacheBySrem(cacheCacheKeyPrefix, obj.del_cachekey);
await this.cacheManager["MagCache"].del(keyList[0]);
return { status: 0 };
}
}
async clearAllCache(obj) {
await this.cacheManager["MagCache"].clearAll();
return { status: 0 };
}
}
module.exports = CacheService;
const system = require("../../../system");
const crypto = require('crypto');
var settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
class CenterorderService extends AppServiceBase {
constructor() {
super();
this.centerOrderUrl = settings.centerOrderUrl();
this.execClient = system.getObject("util.execClient");
this.aliclient = system.getObject("util.aliyunClient");
this.cacheManager = system.getObject("db.common.cacheManager");
this.utilsOrderSve = system.getObject("service.utilsSve.utilsOrderSve");
this.utilsPushSve = system.getObject("service.utilsSve.utilsPushSve");
this.utilsTmAliyunSve = system.getObject("service.utilsSve.utilsTmAliyunSve");//测试用
};
//调用center-order
async reqCenterOrderApi(pobj, reqUrl) {
var url = this.centerOrderUrl + "action/icapi/springBoard";
if (reqUrl) {
var url = this.centerOrderUrl + reqUrl;
}
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
//--------------------------阿里IC---start--------------------------------------------------------
//提交公司注册方案
async submitProgramme(pobj) {
var res = await this.reqCenterOrderApi(pobj);
if (res && res.status == 0 && res.data && res.data.needinfo && res.data.needsolution) {
var needinfo = res.data.needinfo;//需求信息
var needsolution = res.data.needsolution;//方案信息
var ab = pobj.actionBody;
if (typeof (ab.solutionContent) == "string") {
ab.solutionContent = JSON.parse(ab.solutionContent);
}
//推送数据至阿里
var bizType = needinfo.channelTypeCode;//业务类型里
var pushObj = {
intentionBizId: needinfo.channelNeedNo, bizType: bizType, solution: JSON.stringify(ab.solutionContent.solution)
};
var self = this;
//推送方案
this.pushSubmitSolution(pushObj, needsolution.solutionNo, pobj.appInfo, self);
// this.aliclient.reqbyget({action:"SubmitSolution",reqbody:pushObj}).then(pushRes=>{
// if(pushRes && pushRes.status==0 && pushRes.data){
// var resData = pushRes.data;
// var reqObj2 = {
// actionType:"receiveProgrammeNo",
// actionBody:{
// solutionNo:needsolution.solutionNo,
// solutionBizId:resData.SolutionBizId
// }
// };
// self.reqCenterOrderApi(reqObj2);//保存渠道方案id
// }
// });
//推送需求小记
if (needinfo.pushflag && needinfo.pushflag == 1) {//推送标志 值为1推送需求小记
var pushObj2 = {
intentionBizId: needinfo.channelNeedNo, note: "创建方案"
};
this.aliclient.reqbyget({ action: "SubmitIntentionNote", reqbody: pushObj2 });
}
}
return system.getResultSuccess();
}
//推送方案
async pushSubmitSolution(pushObj, solutionNo, appInfo, self) {
var pushRes = await self.aliclient.reqbyget({ action: "SubmitSolution", reqbody: pushObj });
if (pushRes && pushRes.status == 0 && pushRes.data) {
var resData = pushRes.data;
var reqObj2 = {
actionType: "receiveProgrammeNo",
appInfo: appInfo,
actionBody: {
solutionNo: solutionNo,
solutionBizId: resData.SolutionBizId
}
};
var a = await self.reqCenterOrderApi(reqObj2);//保存渠道方案id
return a;
}
}
//服务商方案作废
async abolishProgramme(pobj) {
var res = await this.reqCenterOrderApi(pobj);
if (res && res.status == 0 && res.data && res.data.channelSolutionNo) {
//推送数据至阿里
var pushObj = {
solutionBizId: res.data.channelSolutionNo, note: pobj.actionBody.note || ""
};
this.aliclient.reqbyget({ action: "RejectSolution", reqbody: pushObj })
}
return res;
}
//支付回调
async paySuccess(pobj) {
var actionBody = pobj.actionBody;
if (!pobj.actionBody.orderNo) {
return system.getResult(null, "orderNo不能为空");
}
if (!actionBody.orderPrice) {
return system.getResult(null, "orderPrice不能为空");
}
if (!actionBody.phone) {
return system.getResult(null, "phone不能为空");
}
if (pobj.actionBody.companyName) {
if (!actionBody.city) {
return system.getResult(null, "city不能为空");
}
if (!actionBody.companyCategory) {
return system.getResult(null, "companyCategory不能为空");
}
if (!actionBody.orgType) {
return system.getResult(null, "orgType不能为空");
}
if (!actionBody.industryType) {
return system.getResult(null, "industryType不能为空");
}
if (!actionBody.scope) {
return system.getResult(null, "scope不能为空");
}
pobj.actionBody.regType = "ali.companyreg"
} else if (pobj.actionBody.park) {
if (!actionBody.productType) {
return system.getResult(null, "productType不能为空");
}
pobj.actionBody.regType = "ali.companyreg_cloud"
} else {
return system.getResult(null, "参数异常");
}
var sobj = {
actionType: "getaliicProduce",
actionBody: pobj.actionBody,
appInfo: pobj.appInfo,
actionProcess: pobj.actionProcess
}
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
var rtn = await this.execClient.execPost(sobj, url);
if (!rtn || !rtn.stdout) {
return system.getResultFail(-5010, "产品查询失败");
}
var data = JSON.parse(rtn.stdout);
if (data.status != 0) {
return system.getResultFail(-5010, "产品查询失败");
}
pobj.actionBody = data.data;
// var needNo="";
// if(solutiondata.data){
// needNo=solutiondata.data.channelNeedNo;
// }
pobj.actionBody.totalSum = pobj.actionBody.orderPrice;
pobj.actionBody.payTotalSum = pobj.actionBody.orderPrice;
pobj.actionBody.quantity = 1;
pobj.actionBody.channelOrder = {
channelServiceNo: pobj.actionBody.orderNo,
channelOrderNo: pobj.actionBody.orderNo,
orderStatus: 2
}
var orderrtn = await this.utilsOrderSve.addOrder(pobj, pobj.actionBody);
if (orderrtn.status != 0) {
if (orderrtn.status == -1) {
return system.getResultSuccess(null, "订单已经创建");
}
return system.getResultFail(-5012, "订单创建失败");
}
if (orderrtn.data) {
pobj.actionBody.orderNo = orderrtn.data.orderNo
}
if (pobj.actionBody.solutionBizId) {
pobj.actionBody.channelSolutionNo = pobj.actionBody.solutionBizId;
pobj.actionType = "receiveSolutionPayInfo";
} else {
pobj.actionType = "createSolutionByOrder";
}
var url = settings.centerOrderUrl() + "action/icapi/springBoard";
var solutionrtn = await this.execClient.execPost(pobj, url);
if (!solutionrtn || !solutionrtn.stdout) {
return system.getResultFail(-5011, "方案查询失败");
}
var solutiondata = JSON.parse(solutionrtn.stdout);
if (solutiondata.status != 0) {
return system.getResultFail(-5011, "方案查询失败");
}
if (solutiondata.data && solutiondata.data.channelNeedNo) {
pobj.actionBody.needId = solutiondata.data.channelNeedNo;
}
if (solutiondata.status == 0) {
pobj.actionBody.orderNo = pobj.actionBody.channelOrder.channelOrderNo;
this.utilsPushSve.aliBusiness2Fq(pobj, "pushOrderBusiness");
}
return system.getResultSuccess();
}
async icppaysuccess(pobj) {
var sobj = {
actionType: "getaliicpProduce",
// actionBody: { typeCode: itemResult.data.channelTypeCode, province: itemResult.data.province },
actionBody: { typeCode: pobj.actionBody.channelTypeCode, province: pobj.actionBody.province },
appInfo: pobj.appInfo,
actionProcess: pobj.actionProcess
}
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
var rtn = await this.execClient.execPost(sobj, url);
if (!rtn || !rtn.stdout) {
return system.getResultFail(-5010, "产品查询失败");
}
var data = JSON.parse(rtn.stdout);
if (data.status != 0) {
return system.getResultFail(-5010, "产品查询失败");
}
// pobj.actionBody = data.data;
pobj.actionBody.orderNo = pobj.actionBody.bizId;
pobj.actionBody.totalSum = data.data.price;
pobj.actionBody.orderPrice = data.data.price;
pobj.actionBody.payTotalSum = data.data.price;
pobj.actionBody.payCode = data.data.payCode;
pobj.actionBody.channelItemCode = data.data.channelItemCode;
pobj.actionBody.quantity = 1;
pobj.actionBody.channelOrder = {
channelServiceNo: pobj.actionBody.orderNo,
channelOrderNo: pobj.actionBody.orderNo,
orderStatus: 2
}
var orderrtn = await this.utilsOrderSve.addOrder(pobj, pobj.actionBody);
if (orderrtn.status != 0) {
if (orderrtn.status == -1) {
return system.getResultSuccess(null, "订单已经创建");
}
return system.getResultFail(-5012, "订单创建失败");
}
if (orderrtn.data) {
pobj.actionBody.orderNo = orderrtn.data.orderNo
}
pobj.actionType = "receiveSolutionPayInfo";
var url = settings.centerOrderUrl() + "action/icapi/springBoard";
var solutionrtn = await this.execClient.execPost(pobj, url);
if (!solutionrtn || !solutionrtn.stdout) {
return system.getResultFail(-5011, "方案查询失败");
}
var solutiondata = JSON.parse(solutionrtn.stdout);
if (solutiondata.status != 0) {
return system.getResultFail(-5011, "方案查询失败");
}
if (solutiondata.data && solutiondata.data.channelNeedNo) {
pobj.actionBody.needId = solutiondata.data.channelNeedNo;
}
if(pobj.actionBody.channelItemCode=='5'){
pobj.actionBody.regType="ali.icp";
}else if(pobj.actionBody.channelItemCode=='7'){
pobj.actionBody.regType="ali.edi";
}
if (solutiondata.status == 0) {
pobj.actionBody.orderNo = pobj.actionBody.channelOrder.channelOrderNo;
this.utilsPushSve.aliBusiness2Fq(pobj, "paySuccess");
}
return system.getResultSuccess();
}
//--------------------------阿里IC---end--------------------------------------------------------
//--------------------------阿里ICP---start--------------------------------------------------------
//提交公司注册方案
async submitIcpProgramme(pobj) {
var res = await this.reqCenterOrderApi(pobj, "action/icpapi/springBoard");
if (res && res.status == 0 && res.data && res.data.needinfo && res.data.needsolution) {
var needinfo = res.data.needinfo;//需求信息
var needsolution = res.data.needsolution;//方案信息
var ab = pobj.actionBody;
if (typeof (ab.solutionContent) == "string") {
ab.solutionContent = JSON.parse(ab.solutionContent);
}
if (typeof (needsolution.solutionContent) == "string") {
needsolution.solutionContent = JSON.parse(needsolution.solutionContent);
}
var solution = needsolution.solutionContent.solution;
//推送数据至阿里
var bizType = needinfo.channelTypeCode;//业务类型里
var pushObj = {
IntentionBizId: needinfo.channelNeedNo,
CompanyName: solution.CompanyName, IcpType: solution.IcpType, CompanyAddress: solution.CompanyAddress,
Area: solution.Area, Note: solution.Note
};
var self = this;
//推送方案
this.pushIcpSolution(pushObj,needsolution.solutionNo,pobj.appInfo,self);
return system.getResultSuccess();
}
return res;
}
//推送ICP方案
async pushIcpSolution(pushObj, solutionNo, appInfo, self) {
//推送方案信息
var pushRes = await self.aliclient.reqbyget({ action: "SubmitIcpSolution", reqbody: pushObj, apiVersion: "2019-05-08" });
if (pushRes && pushRes.status == 0 && pushRes.data) {
var resData = pushRes.data;
if (resData.BizId) {
var reqObj2 = {
actionType: "receiveProgrammeNo",
appInfo: appInfo,
actionBody: {
solutionNo: solutionNo,
solutionBizId: resData.BizId
}
};
var a = await self.reqCenterOrderApi(reqObj2);//保存渠道方案id
if (a && a.status == 0) {
//推送方案确认信息
await self.aliclient.reqbyget({action:"ConfirmIntention",reqbody:{BizId:pushObj.IntentionBizId},apiVersion:"2019-05-08"});
}
}
}
}
//材料链接转换
async materialUrlConversion(pobj) {
// if(!pobj || !pobj.actionBody || !pobj.actionBody.material){
// return pobj;
// }
// var material = pobj.actionBody.material;
// if(material.PartnerBusinessLicense){//营业执照
// var aliPartnerBusinessLicense = await this.utilsTmAliyunSve.getAliOssFileUrl("trade-mark-user-upload", pobj, this.utilsTmAliyunSve.aliOssFileType.BUSINESS_LICENSE, material.PartnerBusinessLicense, rpcParam);
// }
}
//icp材料提交
async submitIcpMaterial(pobj) {
// pobj = await this.materialUrlConversion(pobj);
var res = await this.reqCenterOrderApi(pobj, "action/icpapi/springBoard");
if (res && res.status == 0 && res.data) {
var needsolution = res.data;//方案信息
var ab = pobj.actionBody;
if (typeof (ab.material) == "string") {
ab.material = JSON.parse(ab.material);
}
var material = ab.material;
//推送数据至阿里
var BizId = ab.BizId;//⽅案业务ID
var pushObj = {
"BizId": BizId,
"Domain": material.Domain,
"CorporateName": material.CorporateName,
"IncludeForeignInvestment": material.IncludeForeignInvestment,
"PartnerBusinessLicense": material.PartnerBusinessLicense,
"PartnerIdCardList": material.PartnerIdCardList,
"PartnerDomainCertificate": material.PartnerDomainCertificate,
"PartnerPreviewOtherList": material.PartnerPreviewOtherList || [],
"PartnerPlan": material.PartnerPlan || "",
"PartnerForeignInvestment": material.PartnerForeignInvestment || "",
"PartnerLaw": material.PartnerLaw || "",
"PartnerStampOtherList": material.PartnerStampOtherList || [],
"PartnerSignOtherList": material.PartnerSignOtherList || [],
"PartnerSignAndStampOtherList": material.PartnerSignAndStampOtherList || []
};
var self = this;
//推送方案材料
self.aliclient.reqbyget({action:"SavePartnerSubmitMaterial",reqbody:pushObj,apiVersion:"2019-05-08"});
return system.getResultSuccess();
}
return res;
}
//icp通知状态变更
async acceptIcpPartnerNotification(pobj) {
var res = await this.reqCenterOrderApi(pobj, "action/icpapi/springBoard");
if (res && res.status == 0 && res.data) {
var ab = pobj.actionBody;
//推送数据至阿里
// var pushObj = res.data;
var pushObj = {
BizId:res.data.BizId,
OfficialFileURL:res.data.OfficialFileURL,
ApplicationStatus:res.data.ApplicationStatus
};
//推送方案
this.aliclient.reqbyget({action:"AcceptPartnerNotification",reqbody:pushObj,apiVersion:"2019-05-08"});
return system.getResultSuccess();
}
return res;
}
//服务商icp方案关闭
async abolishIcpProgramme(pobj) {
var res = await this.reqCenterOrderApi(pobj, "action/icpapi/springBoard");
if (res && res.status == 0 && res.data) {
var needsolution = res.data;//方案信息
var ab = pobj.actionBody;
if (typeof (ab.material) == "string") {
ab.material = JSON.parse(ab.material);
}
//推送数据至阿里
var pushObj = {
BizId: ab.BizId, Note: ab.Note
};
//关闭方案
this.aliclient.reqbyget({action:"CloseIcpProduce",reqbody:pushObj,apiVersion:"2019-05-08"});
return system.getResultSuccess();
}
return res;
}
//--------------------------阿里ICP---end--------------------------------------------------------
//LOGO场景接口服务
async downloadlogoscene(pobj){
var reqUrl = "http://123.57.217.203:4724/api/downloadscene";//"http://ailogo-service/api/downloadscene";
var obj = pobj.actionBody;
if(!obj.title){
return system.getResult(null,"品牌名称不能为空");
}
if(!obj.id){
return system.getResult(null,"品牌id不能为空");
}
var rtn = null;
try {
rtn = await this.execClient.execPost(obj, reqUrl);
var res = JSON.parse(rtn.stdout);
return res;
}catch (e) {
return system.getResult(null,"获取logo场景异常");
}
}
//换一批logo
async changelogo(pobj){
var reqUrl = "http://123.57.217.203:4724/api/changelogo";
var obj = pobj.actionBody;
if(!obj.title){
return system.getResult(null,"品牌名称不能为空");
}
if(!obj.profession){
return system.getResult(null,"行业名称不能为空");
}
if(!obj.description){
obj.description="";
}
var rtn = null;
try {
rtn = await this.execClient.execPost(obj, reqUrl);
var res = JSON.parse(rtn.stdout);
return res;
}catch (e) {
return system.getResult(null,"获取logo异常");
}
}
//生成logo
async singlelogo(pobj){
var reqUrl = "http://123.57.217.203:4724/api/singlelogo";
var obj = pobj.actionBody;
if(!obj.title){
return system.getResult(null,"品牌名称不能为空");
}
// if(!obj.subtitle){
// return system.getResult(null,"品牌标语不能为空");
// }
if(!obj.profession){
return system.getResult(null,"行业名称不能为空");
}
if(!obj.description){
obj.description="";
}
var rtn = null;
try {
rtn = await this.execClient.execPost(obj, reqUrl);
var res = JSON.parse(rtn.stdout);
if(res && res.status==0 && res.data){
return res;//system.getResultSuccess(res.data);
}else{
return system.getResult(null,"生成logo操作失败");
}
}catch (e) {
return system.getResult(null,"生成logo操作异常");
}
}
}
module.exports = CenterorderService;
// var task = new CenterorderService();
// var pobj={
// "actionType":"submitProgramme",
// "actionBody":{
// "needNo":"I20200323132918000001",
// "solutionContent":'{"bizType":"esp.companyreg","solution":{"companyName":"北京联大共享科技有限公司","city":"北京市","area":"朝阳区","companyCategory":"内资小规模","companyType":"集团","orgType":"有限公司","industryType":"科技类","scope":"测试经营范围","remark":"方案备注测试方案"},"notes":"","totalSum":""}',
// "createUserId":177,
// "channelNeedNo":"I20200323132918000001",
// "solutionNo":"NS2020032315041UIBzq",
// "status":"dqr"
// },
// "appInfo":{
// "id":17,
// "app_hosts":"gsbweb.qifu.gongsibao.com",
// "app_code":"gsbweb",
// "app_name":"公司宝官网web应用",
// "uapp_id":"22",
// "uapp_key":"201912141625",
// "uapp_secret":"8cbb846776874167b5c7e01cd0116c66",
// "contact_name":"宋毅",
// "contact_mobile":"15010929366",
// "contact_email":null,
// "is_enabled":1,
// "is_sign":0,
// "pay_type":"10",
// "delivery_type":"10",
// "created_at":"2020-03-11T22:13:48.000Z",
// "version":0,
// "token":"d23241c188814e12af41d7c9032712d3"
// },
// "actionProcess":"gsbweb",
// "userInfo":{
// "id":177,
// "uapp_id":22,
// "channel_userid":"13075556693",
// "channel_username":"13075556693",
// "channel_nickname":"庄冰",
// "open_id":null,
// "head_url":null,
// "mobile":"13075556693",
// "org_name":"汉唐集团",
// "org_path":"",
// "email":"",
// "is_admin":0,
// "is_super":0,
// "is_enabled":1,
// "userpin":"c49330125e0445019d1ea5acfcb41927"
// }
// };
// var self = task;
// var pushObj = {
// status:0,
// data:{
// "RequestId":"771F6CB6-9FA0-4DE7-AB49-8B41B0F5D45D",
// "ErrorMsg":"",
// "ErrorCode":"",
// "SolutionBizId":"S20200323174838000001",
// "Success":true
// }
// };
// var appInfo={
// "id":17,
// "app_hosts":"gsbweb.qifu.gongsibao.com",
// "app_code":"gsbweb",
// "app_name":"公司宝官网web应用",
// "uapp_id":"22",
// "uapp_key":"201912141625",
// "uapp_secret":"8cbb846776874167b5c7e01cd0116c66",
// "contact_name":"宋毅",
// "contact_mobile":"15010929366",
// "contact_email":null,
// "is_enabled":1,
// "is_sign":0,
// "pay_type":"10",
// "delivery_type":"10",
// "created_at":"2020-03-11T22:13:48.000Z",
// "version":0,
// "token":"d23241c188814e12af41d7c9032712d3"
// };
//推送方案
// task.pushSubmitSolution(pushObj,"NS202003231748T0zBlC",appInfo,self).then(d=>{
// console.log(d,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
// })
// 提方案-SubmitSolution
// 作废方案-RejectSolution
// 提需求小记-SubmitIntentionNote
// 查需求小记-ListIntentionNote
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
var settings = require("../../../../config/settings");
const uuidv4 = require('uuid/v4');
const getRawBody = require('raw-body');
class GatewaypushlogService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(GatewaypushlogService));
this.execClient = system.getObject("util.execClient");
}
async taskAliIcapi() {
try {
var sql = "select * from gateway_pushlog where pushStatus='wts' and pushtimes<4"
var icloginfos = await this.customQuery(sql);
if (icloginfos.length > 0) {
var count = 10;
if (icloginfos.length < count) {
count = icloginfos.length;
}
var self = this;
for (var i = 0; i < count; i++) {
var icloginfo = icloginfos[i];
var requestdata = null;
if (icloginfo && icloginfo.requestjson) {
requestdata = JSON.parse(icloginfo.requestjson);
}
var url = settings.gatewayUrl() + "action/intentionapi/springBoard";
var rtn = await self.execClient.execPost(requestdata, url);
var data = JSON.parse(rtn.stdout);
if (data.success) {
icloginfo.pushStatus = "yts";
} else {
icloginfo.pushtimes += 1;
}
await this.update(icloginfo);
}
}
return system.getResultSuccess();
} catch (error) {
return system.getResultFail(-1,error);
}
}
}
module.exports = GatewaypushlogService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
var settings = require("../../../../config/settings");
class OplogService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(OplogService));
this.opLogUrl = settings.apiconfig.opLogUrl();
this.opLogEsIsAdd = settings.apiconfig.opLogEsIsAdd();
}
async error(qobj) {
this.create(qobj);
}
async info(qobj) {
this.create(qobj);
}
async create(qobj) {
var rc = system.getObject("util.execClient");
try {
qobj.optitle = (new Date()).Format("yyyy-MM-dd hh:mm:ss") + ":" + qobj.optitle;
if (this.opLogEsIsAdd == 1) {
qobj.content = qobj.content.replace("field list", "字段列表")
qobj.created_at = (new Date()).getTime();
//往Es中写入日志
rc.execPost(qobj, this.opLogUrl);
} else {
this.dao.create(qobj);
}
} catch (e) {
qobj.content = e.stack;
this.dao.create(qobj);
}
}
async createDb(qobj) {
try {
qobj.optitle = (new Date()).Format("yyyy-MM-dd hh:mm:ss") + ":" + qobj.optitle;
this.dao.create(qobj);
} catch (e) {
//日志记录
this.create({
appid: qobj.appid || "",
appkey: qobj.appkey || "",
requestId: qobj.requestId || "",
op: qobj.op || "",
content: qobj.content + "-->error:" + e.stack,
clientIp: qobj.clientIp || "",
optitle: qobj.optitle || "" + "-->添加日志失败center_channel_log->createDb",
});
}
}
}
module.exports = OplogService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
var settings = require("../../../../config/settings");
class PushlogService extends ServiceBase {
constructor() {
super("common", ServiceBase.getDaoName(PushlogService));
this.logCtl = system.getObject("service.common.oplogSve");
this.pushfaillogDao = system.getObject("db.common.pushfaillogDao");
}
async createDb(qobj) {
try {
qobj.optitle = (new Date()).Format("yyyy-MM-dd hh:mm:ss") + ":" + qobj.optitle;
this.dao.create(qobj);
} catch (e) {
//日志记录
this.logCtl.error({
appid: qobj.appid || "",
appkey: qobj.appkey || "",
requestId: qobj.requestId || "",
op: qobj.op || "",
content: qobj.content + "-->error:" + e.stack,
clientIp: qobj.clientIp || "",
optitle: qobj.optitle || "" + "-->添加日志失败center_channel_pushlog->createDb",
});
}
}
async createFailLogDb(qobj) {
try {
qobj.optitle = (new Date()).Format("yyyy-MM-dd hh:mm:ss") + ":" + qobj.optitle;
this.pushfaillogDao.create(qobj);
} catch (e) {
//日志记录
this.logCtl.error({
appid: qobj.appid || "",
appkey: qobj.appkey || "",
requestId: qobj.requestId || "",
op: qobj.op || "",
content: qobj.content + "-->error:" + e.stack,
clientIp: qobj.clientIp || "",
optitle: qobj.optitle || "" + "-->添加日志失败center_channel_pushfaillog->createFailLogDb",
});
}
}
async delDbPushfaillogById(id) {
this.pushfaillogDao.bulkDeleteByWhere({ where: { id: id } });
}
async getFailLogList() {
var sql = "SELECT id,`content`,failType,pushNumber,opTitle FROM `center_channel_pushfaillog` WHERE failType IN(1,2,4) AND pushNumber<10 LIMIT 200";
var list = await this.pushfaillogDao.customQuery(sql);
var result = system.getResultSuccess(list);
return result;
}
async addPublicServiceLog(pobj, req) {
var sql = "INSERT INTO `igirl_api`.`center_channel_public_servicelog` (`appkey`,`pushUrl`,`pushContent`,`resultInfo`,`pushNumber`,`clientIp`,created_at)" +
"VALUES(:appkey,:pushUrl,:pushContent,:resultInfo,:pushNumber,:clientIp,:created_at)";
var params = {
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
pushUrl: pobj.actionBody.pushUrl,
pushContent: pobj.actionBody.pushContent ? JSON.stringify(pobj.actionBody.pushContent) : "",
resultInfo: pobj.actionBody.resultInfo ? JSON.stringify(pobj.actionBody.resultInfo) : "",
pushNumber: pobj.actionBody.pushNumber || 0,
clientIp: req.clientIp || "",
created_at: new Date()
}
await this.pushfaillogDao.customInsert(sql, params);
return system.getResultSuccess();
}
async delPublicServiceLog(id) {
var sql = "DELETE FROM `center_channel_public_servicelog` WHERE id=:id";
var params = {
id: id
}
await this.pushfaillogDao.customDelete(sql, params);
return system.getResultSuccess();
}
async getPublicServiceLogList() {
var sql = "SELECT id,appkey,`pushUrl`,pushContent,pushNumber,clientIp FROM `center_channel_public_servicelog` WHERE pushNumber<10 LIMIT 200";
var list = await this.pushfaillogDao.customQuery(sql);
var result = system.getResultSuccess(list);
return result;
}
}
module.exports = PushlogService;
const system = require("../../../system");
var settings = require("../../../../config/settings");
/**
* 微信token
* zhuangbing
* 2020.02.17
*/
class WxTokenService{
constructor(){
this.rc=system.getObject("util.execClient");
this.logDao = system.getObject("db.common.oplogDao");
}
/**
* 获取微信access_token,用于微信H5链接分享
* 返回结果:
* component_access_token 第三方平台access_token
* expires_in 有效期
*/
async getToken(){
try{
var wxconfig = {
AppID : "wx4c91e81bbb6039cd",
Secret : "12048e66dba64f2581e02b306680b232",
Token:"bosstoken",
AccessTokenUrl : "https://api.weixin.qq.com/cgi-bin/token",
};
// var url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx8aa8a8d4ff3da8bd&secret=5b64d43832cfd08327e9369aa455f799";
var url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx4c91e81bbb6039cd&secret=12048e66dba64f2581e02b306680b232";
var rtn=await this.rc.execGet({},url);
console.log(rtn);
this.logDao.create({
op: "WxTokenService/getToken",
content: JSON.stringify(rtn),
optitle: "获取政策微信access_token",
});
var result=JSON.parse(rtn.stdout);
return result;
}catch(e){
return null;
}
}
/**
* 获取微信getJsapiTicket,用于微信H5链接分享
*/
async getJsapiTicket(access_token){
try{
var url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";
var rtn=await this.rc.execGet({},url);
console.log(rtn);
this.logDao.create({
op: "WxTokenService/getJsapiTicket",
content: JSON.stringify(rtn),
optitle: "获取政策微信getJsapiTicket",
});
var result=JSON.parse(rtn.stdout);
return result;
}catch(e){
return null;
}
}
/**
* 通过code换取网页授权access_token,用于政策H5 oauth授权登录
* 注意:
* 里通过code换取的是一个特殊的网页授权access_token,
* 与基础支持中的access_token(该access_token用于调用其他接口)不同。
* 公众号可通过下述接口来获取网页授权access_token。
* 如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,
* snsapi_base式的网页授权流程即到此为止。
*
*/
async getTokenAndOpenid(obj){
try {
if(!obj || !obj.code){
return system.getResultFail(-1,"code参数不能为空");
}
var url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx6f3ebe44defe336a&secret=82e8e32421647f0a86bbad14f041959b&code="+
obj.code+"&grant_type=authorization_code";
var rtn=await this.rc.execGet({},url);
console.log(rtn);
this.logDao.create({
op: "WxTokenService/getToken2",
content: JSON.stringify(rtn),
optitle: "获取政策微信getToken2",
});
var result=JSON.parse(rtn.stdout);
return system.getResultSuccess(result);
} catch (e) {
var err = JSON.stringify(e.stack);
return system.getResultFail(-200,err);
}
}
}
module.exports=WxTokenService;
\ No newline at end of file
const System = require("../../../system");
var settings = require("../../../../config/settings");
const querystring = require('querystring');
const AppServiceBase = require("../../app.base");
class EnterpriseService extends AppServiceBase {
constructor() {
super();
this.zcApiUrl = settings.reqZcApi();
};
async opReqResult(pobj, req) {
var url = this.zcApiUrl + "action/enterpriseQuery/springBoard";
var result = await this.restPostUrl(pobj, url);
return result;
};
}
module.exports = EnterpriseService;
\ No newline at end of file
const System = require("../../../system");
var settings = require("../../../../config/settings");
const querystring = require('querystring');
const AppServiceBase = require("../../app.base");
class LicenseService extends AppServiceBase {
constructor() {
super();
this.zcApiUrl = settings.reqZcApi();
};
async opReqResult(pobj, req) {
var url = this.zcApiUrl + "action/licenseQuery/springBoard";
var result = await this.restPostUrl(pobj, url);
return result;
};
}
module.exports = LicenseService;
\ No newline at end of file
const System = require("../../../system");
var settings = require("../../../../config/settings");
const querystring = require('querystring');
const AppServiceBase = require("../../app.base");
class PatentycService extends AppServiceBase {
constructor() {
super();
this.zcApiUrl = settings.reqZcApi();
};
async opReqResult(pobj, req) {
var url = this.zcApiUrl + "action/patentQuery/springBoard";
var result = await this.restPostUrl(pobj, url);
return result;
}
}
module.exports = PatentycService;
const system = require("../../../system");
const crypto = require('crypto');
var settings = require("../../../../config/settings");
class PolicyService{
constructor() {
this.centerOrderUrl = settings.centerOrderUrl();
this.execClient = system.getObject("util.execClient");
this.cacheManager = system.getObject("db.common.cacheManager");
};
// sha1加密
sha1(str) {
let shasum = crypto.createHash("sha1")
shasum.update(str)
str = shasum.digest("hex")
return str
}
/**
* 生成签名的时间戳
* @return {字符串}
*/
createTimestamp() {
return parseInt(new Date().getTime() / 1000) + ''
}
/**
* 生成签名的随机串
* @return {字符串}
*/
createNonceStr() {
return Math.random().toString(36).substr(2, 15)
}
/**
* 对参数对象进行字典排序
* @param {对象} args 签名所需参数对象
* @return {字符串} 排序后生成字符串
*/
raw(args) {
var keys = Object.keys(args)
keys = keys.sort()
var newArgs = {}
keys.forEach(function (key) {
newArgs[key.toLowerCase()] = args[key]
})
var string = ''
for (var k in newArgs) {
string += '&' + k + '=' + newArgs[k]
}
string = string.substr(1)
return string
}
async getWxSign(url){
try {
if(!url){
return system.getResult("url不能为空");
}
var tokenRes = await this.cacheManager["WxTokenCache"].get();
if(tokenRes){
if(tokenRes.access_token){
var ticketRes = await this.cacheManager["WxJsapiTicketCache"].get(tokenRes.access_token);
if(ticketRes){
if(ticketRes.ticket){
var ret = {
jsapi_ticket: ticketRes.ticket,
nonceStr: "zhengcepolicy",
timestamp: parseInt(new Date().getTime() / 1000),
url: url
};
var string = this.raw(ret)
ret.signature = this.sha1(string)
ret.appId = "wx4c91e81bbb6039cd";
console.log('ret', ret)
return system.getResultSuccess(ret);
}else{
return system.getResultFail(-2,"获取微信配置参数失败",ticketRes);
}
}
}else{
return system.getResultFail(-1,"获取微信配置参数失败",tokenRes);
}
}
return system.getResult("获取微信配置参数失败");
} catch (e) {
return system.getResult(e.stack);
}
}
async reqPolicyApi(pobj){
var url = this.centerOrderUrl + "action/policy/springBoard";
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
async policyQuery(pobj) {
var url = this.centerOrderUrl + "action/policy/springBoard";
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
async submitPolicyNeed(pobj) {
var url = this.centerOrderUrl + "action/policy/springBoard";
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
async getPolicyNeedList(pobj){
var url = this.centerOrderUrl + "action/policy/springBoard";
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
async submitPolicyNeedNotes(pobj){
var url = this.centerOrderUrl + "action/policy/springBoard";
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
async submitPolicysubscribe(pobj){
var url = this.centerOrderUrl + "action/policy/springBoard";
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
}
module.exports = PolicyService;
const system=require("../../../system");
var settings=require("../../../../config/settings");
class bigtmService {
constructor(){
this.GsbByTmSearchApi=system.getObject("api.tmquery.bytmsearch");
}
}
module.exports=bigtmService;
// var test = new TmqueryService();
// test.bigtmcompanyjuhe({status:3,tmreg_year:2018,seltype:1,apply_addr_province:""}).then(function(d){
// console.log("#################################");
// console.log(d);
// })
const system=require("../../../system");
var settings=require("../../../../config/settings");
class BytmmonitService {
constructor(){
}
}
module.exports=BytmmonitService;
// var test = new TmqueryService();
// test.bigtmcount({tmreg_year:2018,apply_addr_province:""}).then(function(d){
// console.log("#################################");
// console.log(d);
// })
const system = require("../../../system");
var settings = require("../../../../config/settings");
const crypto = require('crypto');
const cryptoJS = require("crypto-js");
var fs = require("fs");
// var AWS = require('aws-sdk');
var ak = "D0784B08541791E175B544D5317281B0";
var sk = "93AB12B3BFADB1356EC078D52B064A33";
var ossurl = "https://hangtang.s3.cn-north-1.jdcloud-oss.com";
class JdossService {
constructor() {
this.execClient = system.getObject("util.execClient");
}
async getJdOssConfig(app, opStr) {
var date = new Date();
var month = date.getMonth()+1;
month=month.toString();
if(month<10){
month="0"+month;
}
var day = date.getDate().toString();
if(day<10){
day="0"+day;
}
var time = date.getFullYear().toString()+month+day;
let timestamp = date.getTime();//当前的时间戳
timestamp = timestamp + 6 * 60 * 60 * 1000;
//格式化时间获取年月日
var dateAfter = new Date(timestamp);
var policyText = {
"expiration": dateAfter,
"conditions": [
{"bucket": "hangtang"},
["starts-with", "$key", "zc"],
{"Content-Type": "image/jpeg"},
{"X-Amz-Credential": ak+"/"+time+"/cn-north-1/s3/aws4_request"},
{"X-Amz-Algorithm": "AWS4-HMAC-SHA256"},
{"X-Amz-Date": date}
]
};
var b = new Buffer(JSON.stringify(policyText));
var policyBase64 = b.toString('base64');
var signature = crypto.createHmac('sha256', sk).update(policyBase64).digest("hex");
var data = {
"OSSAccessKeyId":ak,
"Bucket":"hangtang",
"Signature":signature,
"policy": policyBase64,
"success_action_status": 201,
"x-amz-algorithm":"AWS4-HMAC-SHA256",
"x-amz-credential":ak+"/"+time+"/cn-north-1/s3/aws4_request",
"x-amz-date":date,
"x-amz-signature":signature,
"url": ossurl
};
return system.getResultSuccess(data);
}
}
module.exports = JdossService;
const system = require("../../../system");
var settings = require("../../../../config/settings");
class TmqueryService {
constructor() {
this.zcApiUrl = settings.reqZcApi();
this.execClient = system.getObject("util.execClient");
}
async findTrademarkNameAccurate(queryobj, req) {//通过商标名来进行精准查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkNameAccurate";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkNameIndex(queryobj, req) {//根据商标名称模糊查询,首次查询,
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkNameIndex";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkName(queryobj, req) {//根据商标名称模糊查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkName";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkzchAccurate(queryobj, req) {//通过商标号来进行精准查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkzchAccurate";
return await this.opReqResult(url, queryobj, req);
}
async findTrademarkzcr(queryobj, req) {//通过注册人模糊查询
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findTrademarkzcr";
return await this.opReqResult(url, queryobj, req);
}
async imagequery(queryobj, req) {//图像检索
var url = this.zcApiUrl + "api/trademark/tmqueryApi/imagequery";
return await this.opReqResult(url, queryobj, req);
}
async findImageSearch(queryobj, req) { //图像检索查询,
var url = this.zcApiUrl + "api/trademark/tmqueryApi/findImageSearch";
return await this.opReqResult(url, queryobj, req);
}
async tradeMarkDetail(queryobj, req) {//商标详情
var url = this.zcApiUrl + "api/trademark/tmqueryApi/tradeMarkDetail";
return await this.opReqResult(url, queryobj, req);
}
async sbzuixinsearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/sbzuixinsearch";
return await this.opReqResult(url, queryobj, req);
}
async noticequeryTMZCSQ(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticequeryTMZCSQ";
return await this.opReqResult(url, queryobj, req);
}
async noticequery(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticequery";
return await this.opReqResult(url, queryobj, req);
}
async noticezcggsearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticezcggsearch";
return await this.opReqResult(url, queryobj, req);
}
async noticesearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/noticesearch";
return await this.opReqResult(url, queryobj, req);
}
async getCompanyInfoNoUser(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/getCompanyInfoNoUser";
return await this.opReqResult(url, queryobj, req);
}
async getNclDetail(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/getNclDetail";
return await this.opReqResult(url, queryobj, req);
}
async gettwoNcl(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/gettwoNcl";
return await this.opReqResult(url, queryobj, req);
}
async nclFuwuSearch(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/nclFuwuSearch";
return await this.opReqResult(url, queryobj, req);
}
async tmreport(queryobj, pobj,req) {
if (!queryobj.type) {
return { code: -102, msg: "参数错误" }
}
if (!queryobj.receiverId) {
return { code: -102, msg: "参数错误" }
}
if (queryobj.push_type == 1 && !queryobj.email) {
return { code: -102, msg: "参数错误" }
}
if (queryobj.push_type == 2 && !queryobj.notifyUrl) {
return { code: -102, msg: "参数错误" }
}
if(queryobj.type!=1){
return { code: -101, msg: "功能开发中......" }
}
queryobj.wxuser_id = queryobj.receiverId;
queryobj.appid =pobj.appInfo.id;
var url = settings.igirlWeburl() + "web/toolCtl/createMonitoringReportH5p";
return await this.opReqResult(url, queryobj, req);
}
async opReqResult(reqUrl, queryobj, req) {
var rtn = await this.execClient.execPushDataPost(queryobj, reqUrl, req.headers["token"], req.headers["request-id"]);
var data = JSON.parse(rtn.stdout);
return data;
}
}
module.exports = TmqueryService;
const system = require("../../../system");
var settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
const crypto = require('crypto');
const cryptoJS = require("crypto-js");
class ToolService extends AppServiceBase {
constructor() {
super();
this.zcApiUrl = settings.reqZcApi();
// this.execClient = system.getObject("util.execClient");
}
async getCropperPic(obj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getCropperPic";
return await this.opReqResult(url, obj, req);
}
//智能分析 bycquerytm.html
async bycznfx(obj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/bycznfx";
return await this.opReqResult(url, queryobj, req);
}
//根据尼斯编号获取尼斯子类,尼斯树节点点击时触发调用
async getNcl(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getNcl";
return await this.opReqResult(url, queryobj, req);
}
//根据大类、名称查询尼斯信息
async getNclByLikeNameAndNcl(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getNclByLikeNameAndNcl";
return await this.opReqResult(url, queryobj, req);
}
//文字转图片
async word2pic(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/word2pic";
return await this.opReqResult(url, queryobj, req);
}
//商标样式转换 彩色商标图样转黑白,调整图样宽高,生成符合商标局规范的标准商标图样
async uploadStandardTm(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/uploadStandardTm";
return await this.opReqResult(url, queryobj, req);
}
//营业执照(身份证明)图片文件转为符合商标局要求的pdf文件
async pic2pdf(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/pic2pdf";
return await this.opReqResult(url, queryobj, req);
}
//企业近似查询
async getCompanyInfoByLikeName(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getCompanyInfoByLikeName";
var result = await this.opReqResult(url, queryobj, req);
if (result.data.length > 0) {
return system.getResultSuccess(result.data);
}
return system.getResult(null, "data is empty,100565");
}
//企业注册信息精确查询
async getEntregistryByCompanyName(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/getEntregistryByCompanyName";
var result = await this.opReqResult(url, queryobj, req);
if (Object.keys(result).length > 3) {
return system.getResultSuccess(result);
}
return system.getResult(null, "data is empty,100560");
}
//调整委托书 调整委托书大小使其符合商标局规范
async adjustWTSSize(queryobj, req) {
var url = this.zcApiUrl + "api/tool/toolApi/adjustWTSSize";
return await this.opReqResult(url, queryobj, req);
}
//工商核名
async icheming(queryobj, req) {
var url = this.zcApiUrl + "api/trademark/tmqueryApi/icheming";
return await this.opReqResult(url, queryobj, req);
}
async opReqResult(reqUrl, queryobj, req) {
var rtn = await this.execClient.execPushDataPost(queryobj, reqUrl, req.headers["token"], req.headers["request-id"]);
var data = JSON.parse(rtn.stdout);
return data;
}
async getOssConfig(pobj, req) {//获取oss信息
var reqUrl = settings.centerAppUrl() + "auth/accessAuth/getOssInfo";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
//加密信息
async encryptStr(app, opStr) {
if (!opStr) {
return system.getResult(null, "opStr is empty");
}
let keyHex = cryptoJS.enc.Utf8.parse(app.uappKey);
let ivHex = cryptoJS.enc.Utf8.parse(app.appSecret.substring(0, 8));
var cipherStr = cryptoJS.TripleDES.encrypt(opStr, keyHex, { iv: ivHex }).toString();
return system.getResultSuccess(cipherStr);
}
//解密信息
async decryptStr(app, opStr) {
if (!opStr) {
return system.getResult(null, "opStr is empty");
}
let keyHex = cryptoJS.enc.Utf8.parse(app.uappKey);
let ivHex = cryptoJS.enc.Utf8.parse(app.appSecret.substring(0, 8));
var bytes = cryptoJS.TripleDES.decrypt(opStr, keyHex, {
iv: ivHex
});
var plaintext = bytes.toString(cryptoJS.enc.Utf8);
return system.getResultSuccess(plaintext);
}
}
module.exports = ToolService;
var system = require("../../../system");
var settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
const logCtl = system.getObject("service.common.oplogSve");
//阿里支付类
class utilsTlBankSve extends AppServiceBase {
constructor() {
super();
this.centerAppUrl = settings.centerAppUrl();
}
//-------------------------------------------钉钉h5支付-----------------开始
/**
* 唤起钉钉h5支付信息---只供简单应用
* @param {*} pobj
* @param {*} actionBody {total_fee:总额,单位为分,order_num:订单号,body_desc:标题描述}
*/
async getH5AliDingPayInfo(pobj, actionBody) {
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100110");
}
pobj.actionType = "getPayOrderInfo";
var orderUrl = settings.centerOrderUrl() + "action/order/springBoard";
var orderResult = await this.restPostUrl(pobj, orderUrl);
if (orderResult.status != 0) {
return orderResult;
}
pobj.actionBody.body_desc = orderResult.data.orderProduct.channelItemName;
pobj.actionBody.product_id = orderResult.data.orderProduct.id;
pobj.actionBody.total_fee = Number(orderResult.data.receiptVoucher.totalSum);
pobj.actionBody.order_num = orderResult.data.receiptVoucher.sourceOrderNo;
var result = await this.restPostUrl(pobj, this.centerAppUrl + "payment/aliPayment/getPayInfo");
if (result.status != 0) {
return result;
}
await this.cacheManager["TlPayLocker"].init(orderResult.data.receiptVoucher.sourceOrderNo);
return result;
}
//-------------------------------------------钉钉h5支付-----------------结束
}
module.exports = utilsTlBankSve;
var system = require("../../../system");
var settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
const logCtl = system.getObject("service.common.oplogSve");
//用户权限操作
class UtilsAuthService extends AppServiceBase {
constructor() {
super();
this.centerAppUrl = settings.centerAppUrl();
}
//---------------登录-----------------------------------------------------
async getReqTokenByHosts(actionBody, tokenValue) { //获取token
if (["hosts", "appkey"].indexOf(actionBody.reqType) < 0) {
return system.getResult(null, "actionBody.reqType is error");
}
if (actionBody.reqType == "hosts") {
if (!actionBody.appHosts) {
return system.getResult(null, "actionBody.appHosts can not be empty");
}
}
if (actionBody.reqType == "appkey") {
if (!actionBody.appkey) {
return system.getResult(null, "actionBody.appkey can not be empty");
}
if (!actionBody.secret) {
return system.getResult(null, "actionBody.secret can not be empty");
}
}
var result = await this.cacheManager["AppTokenByHostsCache"].cache(tokenValue, actionBody, system.exTime);
return result;
}
/**
* 渠道通过账户进行登录,有则返回用户信息,没有则创建用户
* @param {*} pobj
* @param {*} actionBody {channelUserId:XX}
*/
async getLoginByUserName(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;
}
return system.getResult(null, "data is empty");
}
/**
* 通过账户和密码登录
* @param {*} pobj
* @param {*} actionBody {userName:XX,password:XXX}
*/
async getReqUserPinByLgoin(pobj, actionBody) {
if (!actionBody.userName) {
return system.getResult(null, "actionBody.userName can not be empty");
}
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");
}
/**
* 通过短信登录或注册信息
* @param {*} pobj
* @param {*} actionBody {mobile:XXX,vcode:XXX,reqType:"reg",password:XXX-reqType为reg时有此值}
*/
async getReqUserPinByLgoinVcode(pobj, actionBody) {
if (!actionBody.mobile) {
return system.getResult(null, "actionBody.mobile can not be empty");
}
if (!actionBody.vcode) {
return system.getResult(null, "actionBody.vcode can not be empty");
}
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;
}
return system.getResult(null, "data is empty");
}
/**
* 获取默认模板的手机验证码
* @param {*} pobj
* @param {*} actionBody {mobile:XXX}
*/
async getVerifyCodeByMoblie(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");
}
/**
* 通过手机验证码修改用户密码
* @param {*} pobj
* @param {*} actionBody {mobile:XX,vcode:XXX,newPwd:XXX,userpin:XXXXX}
*/
async putUserPwdByMobile(pobj, actionBody) {
if (!actionBody.mobile) {
return system.getResult(null, "pobj.mobile can not be empty !");
}
if (!actionBody.vcode) {
return system.getResult(null, "pobj.vcode can not be empty !");
}
if (!actionBody.newPwd) {
return system.getResult(null, "pobj.newPwd can not be empty !");
}
if (!pobj.appInfo) {
return system.getResult(null, "pobj.appInfo can not be empty !");
}
var result = await this.restPostUrl(pobj, this.centerAppUrl + "auth/accessAuth/modiPasswordByMobile");
if (result.status == 0) {
this.userLogout(pobj, actionBody);
}
return result;
}
/**
* 通过userpin获取用户登录信息
* @param {*} pobj
* @param {*} actionBody {userpin:XXXXX}
*/
async getLoginInfo(pobj, actionBody) {
if (!actionBody.userpin) {
return system.getResult(null, "pobj.userpin can not be empty !");
}
if (!pobj.appInfo) {
return system.getResult(null, "pobj.appInfo can not be empty !");
}
var result = await this.restPostUrl(pobj, this.centerAppUrl + "auth/accessAuth/getLoginInfo");
return result;
}
/**
* 用户退出
* @param {*} pobj
* @param {*} actionBody {userpin:XXXX}
*/
async userLogout(pobj, actionBody) {
console.log(actionBody.userpin);
if (!actionBody.userpin) {
return system.getResult(null, "actionBody.userpin can not be empty !");
}
var applogout = await this.restPostUrl(pobj, this.centerAppUrl + "auth/accessAuth/logout");
return applogout;
}
}
module.exports = UtilsAuthService;
var system = require("../../../system");
var settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
const logCtl = system.getObject("service.common.oplogSve");
//渠道用户权限操作
class UtilsChannelAuthService extends AppServiceBase {
constructor() {
super();
this.centerAppUrl = settings.centerAppUrl();
}
//---------------登录-----------------------------------------------------
async getH5AliDingUserByCode(pobj, actionBody) { //渠道通过账户进行登录,有则返回用户信息,没有则创建用户
if (!actionBody.code) {
return system.getResult(null, "actionBody.code can not be empty");
}
var result = await this.restPostUrl(pobj, this.centerAppUrl + "auth/channelAccessAuth/getH5AliDingUserByCode");
return result;
}
async getDingJsApiAuthInfo(pobj, actionBody) { //获取token
var result = await this.restPostUrl(pobj, this.centerAppUrl + "auth/channelAccessAuth/getDingJsApiAuthInfo");
return result;
}
}
module.exports = UtilsChannelAuthService;
const system = require("../../../system");
var settings = require("../../../../config/settings");
const uuidv4 = require('uuid/v4');
// var crypto = require('crypto');
/**
* 飞书小程序相关接口
*/
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"
}
};
//飞书事件消息通知解密
// async notifyDecrypt(str){
// var pobj = {};
// str = str.toString('utf8');
// return pobj;
// }
//飞书通知
async notify(pobj){
if(!pobj || !pobj.type){
return system.getResultFail("参数错误");
}
if(pobj.type=="url_verification"){//表示这是一个验证请求
return this.subscribeVerification(pobj);
}
if(pobj.type=="event_callback"){//事件回调
if(!pobj.event){
return system.getResultFail("event参数错误");
}
var event = pobj.event;
if(event.type=="app_ticket"){//app_ticket 事件
return this.receiveAppTicket(pobj);
}else{
return system.getResultFail("未知事件");
}
}
return system.getResultFail("未知事件");
}
//订阅验证
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"){
//将app_ticket保存到缓存
await this.cacheManager["feishuAppTicketCache"].set(pobj.event.app_ticket);
return system.getResultSuccess();
}
return system.getResultFail();
}
//重新推送app_ticket(主动触发)
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//应用秘钥,创建应用后获得
};
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){
return system.getResultSuccess();
}
return system.getResult(null, "execPost data is empty.错误码:"+result.code);
}
//获取app_access_token(应用商店应用)
async getAppAccessToken(){
var appAccessToken = await this.cacheManager["feishuAppAccessTokenCache"].get();
if(appAccessToken){
return system.getResultSuccess(appAccessToken);
}
var app_ticket = await this.cacheManager["feishuAppTicketCache"].get();
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//平台定时推送给应用的临时凭证,通过事件监听机制获得,详见订阅事件
};
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){
//缓存AppAccessToken
await this.cacheManager["feishuAppAccessTokenCache"].set(result.app_access_token,result.expire);
return system.getResultSuccess(result.app_access_token);
}
return system.getResultFail("获取appAccessToken失败");
}
//------------------------飞书网页开发---------------------------------------------------------------
//获取登录用户身份
async getUserAccessToken(obj){
var resData = {};
if(obj.open_id){
//缓存中获取登录用户身份
resData = await this.cacheManager["feishuUserAccessTokenCache"].get(obj.open_id);
}
//缓存中存在 直接返回
if(resData && resData.access_token){
return system.getResultSuccess(resData);
}
if(!obj.code){
return system.getResultFail("code参数不能为空");
}
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 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){
//缓存AppAccessToken
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){
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
};
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){
return system.getResultSuccess(result.data);
}
return system.getResult(null, "获取飞书用户信息失败");
}
//------------------------飞书网页开发-------结束--------------------------------------------------------
//------------------------飞书小程序开发---------------------------------------------------------------
//获取登录用户身份 session_key 和 openId
async tokenLoginValidate(obj){
var resData = {};
if(obj.open_id){
//缓存中获取登录用户身份
resData = await this.cacheManager["feishuUserAccessTokenCache"].get(obj.open_id);
}
//缓存中存在 直接返回
if(resData && resData.access_token){
return system.getResultSuccess(resData);
}
if(!obj.code){
return system.getResultFail("code参数不能为空");
}
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 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){
//缓存AppAccessToken
await this.cacheManager["feishuUserAccessTokenCache"].set(result.data,result.data.open_id);
return system.getResultSuccess(result.data);
}
return system.getResult(null, "获取飞书登录用户身份失败");
}
//------------------------飞书小程序开发------结束---------------------------------------------------------
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
//用户登录/获取userpin
async checkAndLogin(pobj){
// return system.getResultSuccess(null,"测试");
try {
if(!pobj.code){
return system.getResultFail(-100, "code参数不能为空");
}
//获取 app_access_token(应用商店应用)
var appAccessTokenRes = await this.getAppAccessToken();
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 || ""
};
// var userAccessTokenRes = await this.getUserAccessToken(userAccessTokenParams);
var userAccessTokenRes = await this.tokenLoginValidate(userAccessTokenParams);
if(userAccessTokenRes.status!=0){
return userAccessTokenRes;
}
var userAccessTokenObj = userAccessTokenRes.data;
//获取飞书用户信息
var userInfoParams={
user_access_token:userAccessTokenObj.access_token
};
var userInfoRes = await this.getUserInfo(userInfoParams);
if(userInfoRes.status!=0){
return userInfoRes;
}
var userInfoObj = userInfoRes.data;
//帐号登录---若用户信息已存在 则返回userpin 不存在则返回空
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 //头像
}
};
var loginByUserNameRes = await this.getLoginByUserName(loginByUserNameParams);
if(loginByUserNameRes && loginByUserNameRes.status==0){
loginByUserNameRes.data.open_id = userAccessTokenObj.open_id;
// loginByUserNameRes.data.session_key = userAccessTokenObj.session_key;
return loginByUserNameRes;//获取userpin直接返回
}
// // 获取飞书用户信息
// var userInfoParams={
// user_access_token:userAccessTokenObj.access_token
// };
// var userInfoRes = await this.utilsFeishuSve.getUserInfo(userInfoParams);
// if(userInfoRes.status!=0){
// return userInfoRes;
// }
// var userInfoObj = userInfoRes.data;
} catch (e) {
return system.getResultFail(-200,e.stack);
}
return system.getResultFail(-100,"获取userpin失败");
}
//渠道通过账户进行登录,有则返回用户信息,没有则创建用户------>供后端调用
async getLoginByUserName(pobj){
pobj.actionBody.userpin = this.getUUID();
var tmpOpResult = await this.utilsAuthSve.getLoginByUserName(pobj, pobj.actionBody);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
var opResult = system.getResultSuccess({ userpin: pobj.actionBody.userpin });
if (tmpOpResult.status == 2060) {
opResult.msg = tmpOpResult.msg;
opResult.data.userpin = tmpOpResult.data.userpin;
}
return opResult;
}
}
module.exports = UtilsFeishuService;
// var task = new UtilsFeishuService();
// var pobj = {
// "appInfo":{
// "id":17,
// "app_hosts":"gsbweb.qifu.gongsibao.com",
// "app_code":"gsbweb",
// "app_name":"公司宝官网web应用",
// "uapp_id":"22",
// "uapp_key":"201912141625",
// "uapp_secret":"8cbb846776874167b5c7e01cd0116c66",
// "contact_name":"宋毅",
// "contact_mobile":"15010929366",
// "contact_email":null,
// "is_enabled":1,
// "is_sign":0,
// "pay_type":"10",
// "delivery_type":"10",
// "created_at":"2020-03-11T22:13:48.000Z",
// "version":0,
// "token":"4ea34fccd85b442da189d0086849c0e2"
// },
// "actionType": "getLoginByUserName",
// "actionBody": {
// "openId":"ou_ed97ab357af62082e54c972051888229",
// "channelUserId":"ou_ed97ab357af62082e54c972051888229",
// "channelUserName":"庄冰",
// "nickName":"庄冰"
// }
// };
// task.getLoginByUserName(pobj).then(res=>{
// console.log(res,"ddddddddddddddddddddddddddddddd");
// })
const system = require("../../../system");
var settings = require("../../../../config/settings");
const querystring = require('querystring');
const AppServiceBase = require("../../app.base");
class UtilsFgbusinesschancService extends AppServiceBase {
constructor() {
super();
this.utilsPushSve = system.getObject("service.utilsSve.utilsPushSve");
this.logCtl = system.getObject("service.common.oplogSve");
this.centerOrderUrl = settings.centerOrderUrl();
this.qifuPayAfterH5JumpUrl = settings.qifuPayAfterH5JumpUrl();
this.qifuPayAfterPcJumpUrl = settings.qifuPayAfterPcJumpUrl();
this.qifuH5PayNotifyUrl = settings.qifuH5PayNotifyUrl();
this.centerAppUrl = settings.centerAppUrl();
this.centerAppPayUrl = settings.centerAppUrl() + "payment/paymentApi/springBoard";
};
async create(pobj, actionBody) {
if (!actionBody.businessData) {
return system.getResult(null, "actionBody.businessData can not be empty,100290");
}
if (!actionBody.businessType) {
return system.getResult(null, "actionBody.businessType can not be empty,100290");
}
if (!Array.isArray(actionBody.businessData)) {
return system.getResult(null, "actionBody.businessData should be Array,100290");
}
if (actionBody.businessType === "关联推荐" && !actionBody.customerType) {
return system.getResult(null, "关联推荐时,customerType不能为空");
}
var self = this;
var reqUrl = this.centerOrderUrl + "action/fgbusinesschance/springBoard";
for (let index = 0; index < actionBody.businessData.length; index++) {
var item = actionBody.businessData[index];
if (item) {
var tmpPobj = {
appInfo: pobj.appInfo,
actionType: "create",
actionBody: {
...item,
businessType: actionBody.businessType,
customerType: actionBody.customerType || ''
}
}
var tmpResult = await self.restPostUrl(tmpPobj, reqUrl);
if (tmpResult.status == 0) {
self.utilsPushSve.aliBusiness2Fq(tmpPobj, "pushRePurchaseBusiness");
}
}
}
return system.getResultSuccess();
}
async createOrderRefundFq(pobj, actionBody) {
if (!actionBody || Object.keys(actionBody).length === 0) {
return system.getResult(null, "actionBody can not be empty,100290");
}
let url = this.centerOrderUrl + "action/fgbusinesschance/springBoard";
return await this.restPostUrl(pobj, url);
}
async createOnlineProductClassificiationFq(pobj, actionBody) {
if (!actionBody.product_id) {
return system.getResult(null, "actionBody.product_id can not be empty,100290");
}
let url = this.centerOrderUrl + "action/fgbusinesschance/springBoard";
return await this.restPostUrl(pobj, url);
}
async createOrderInfoAndPayFq(pobj, actionBody) {
if (!actionBody.orderInfo) {
return system.getResult(null, "actionBody.orderInfo can not be empty,100290");
}
if (!actionBody.payInfo) {
return system.getResult(null, "actionBody.payInfo can not be empty,100290");
}
let url = this.centerOrderUrl + "action/fgbusinesschance/springBoard";
return await this.restPostUrl(pobj, url);
}
async getCompanyLabel(pobj, actionBody) {
if (!actionBody.companyName) {
return system.getResult(null, "actionBody.companyName can not be empty,100290");
}
actionBody.companyName = await this.getConvertSemiangleStr(actionBody.companyName);
// var url = settings.entProfileUrl() + "lable";
var url = settings.entProfileUrl() + "gsb/api/company_hx";
var reqParam = {
company_name: actionBody.companyName
}
var result = await this.restPostWithHValueUrl(reqParam, url);
let code = result.code || result.status
if (code !== 200 && code !== 0) {
return system.getResult(null, result.message || result.msg || "req is error");
}
return system.getResultSuccess(result.data);
}
async getRecommendProducts(pobj, actionBody) {
if (!actionBody.businessId) {
return system.getResult(null, "actionBody.businessId can not be empty,100290");
}
if (!actionBody.businessType) {
return system.getResult(null, "actionBody.businessType can not be empty,100290");
}
// if (!["复购算法", "关联推荐", "智能监测"].includes(actionBody.businessType)) {
// return system.getResult(null, "actionBody.businessType don't compliance,100290");
// }
var url = settings.entProfileUrl() + "api/businessProduct";
var reqParam = {
bussines_id: actionBody.businessId,
businessType: actionBody.businessType
}
var result = await this.restPostWithHValueUrl(reqParam, url);
let code = result.code || result.status
if (code !== 200 && code !== 0) {
return system.getResult(null, result.message || result.msg || "req is error");
}
let data = { data: result.data };
if (actionBody.businessType === "智能监测") {
data = { data: result.data, survey_reason: result.survey_reason || [] }
}
if (actionBody.businessType === "关联推荐") {
data = { data: result.data, relational_reason: result.relational_reason || [] }
}
if (actionBody.businessType === "公海挖掘") {
data = { data: result.data, seas_reason: result.seas_reason || [] }
}
return system.getResultCustomSuccess(data);
}
async getOldOrder(pobj, actionBody) {
if (!actionBody.companyName) {
return system.getResult(null, "actionBody.companyName can not be empty,100290");
}
actionBody.companyName = await this.getConvertSemiangleStr(actionBody.companyName);
var url = settings.entProfileUrl() + "behavior";
var reqParam = {
company_name: actionBody.companyName
}
var result = await this.restPostWithHValueUrl(reqParam, url);
let code = result.code || result.status
if (code !== 200 && code !== 0) {
return system.getResult(null, result.message || result.msg || "req is error");
}
let data = [];
if (Array.isArray(result.data)) {
for (let val of result.data) {
data.push({
"source": val.source,//购买渠道
"productName": val.goods_name,//购买产品名称
"orderAmount": val.contract_amount,//订单金额
"createTime": val.purchase_date,//购买日期
"companyName": val.company_name,//公司名称
"customerName": val.customer_name,//客户姓名
"num": val.num
});
}
}
return system.getResultSuccess(data);
}
async updateStatus(pobj, actionBody) {
if (!actionBody.recommendId) {
return system.getResult(null, "actionBody.recommendId can not be empty,100290");
}
if (!actionBody.statusName) {
return system.getResult(null, "actionBody.statusName can not be empty,100290");
}
if (!actionBody.businessId) {
return system.getResult(null, "actionBody.businessId can not be empty,100290");
}
if (!actionBody.userId) {
return system.getResult(null, "actionBody.userId can not be empty,100290");
}
var url = settings.entProfileUrl() + "gsb/api/tj_rec_status";
var reqParam = {
recommendId: actionBody.recommendId,
stateName: actionBody.statusName
}
var result = await this.restPostWithHValueUrl(reqParam, url);
let code = result.code || result.status
if (code !== 200 && code !== 0) {
return system.getResult(null, result.message || result.msg || "req is error");
}
return system.getResultSuccess(result.data);
}
async getTalkContent(pobj, actionBody) {
if (!actionBody.recommendId) {
return system.getResult(null, "actionBody.recommendId can not be empty,100290");
}
var url = settings.entProfileUrl() + "api/talking";
var reqParam = {
recommendId: actionBody.recommendId
}
var result = await this.restPostWithHValueUrl(reqParam, url);
let code = result.code || result.status
if (code !== 200 && code !== 0) {
return system.getResult(null, result.message || result.msg || "req is error");
}
return system.getResultSuccess(result.data);
}
async getMoreInfoUrl(pobj, actionBody) {
if (!actionBody.companyName) {
return system.getResult(null, "actionBody.companyName can not be empty,100290");
}
var url = settings.entProfileUrl() + `#/abc?companyName=${actionBody.companyName}`;
return system.getResultSuccess({
url: encodeURI(url)
})
}
async getConsultingRecord(pobj, actionBody) {
if (!actionBody.companyName) {
return system.getResult(null, "actionBody.companyName can not be empty,100290");
}
var url = settings.entProfileUrl() + "gsb/api/consultingRecord";
var reqParam = {
company_name: actionBody.companyName
}
var result = await this.restPostWithHValueUrl(reqParam, url);
let code = result.code || result.status
if (code !== 200 && code !== 0) {
return system.getResult(null, result.message || result.msg || "req is error");
}
return system.getResultSuccess(result.data);
}
async addStatusRemarks(pobj, actionBody) {
if (!actionBody.recommendId) {
return system.getResult(null, "actionBody.recommendId can not be empty,100290");
}
if (!actionBody.remarks) {
return system.getResult(null, "actionBody.remarks can not be empty,100290");
}
var url = settings.entProfileUrl() + "gsb/api/statusRemarks";
var reqParam = {
recommendId: actionBody.recommendId,
remarks: actionBody.remarks
}
var result = await this.restPostWithHValueUrl(reqParam, url);
let code = result.code || result.status
if (code !== 200 && code !== 0) {
return system.getResult(null, result.message || result.msg || "req is error");
}
return system.getResultSuccess(result.data);
}
}
module.exports = UtilsFgbusinesschancService;
var system = require("../../../system");
const AppServiceBase = require("../../app.base");
var settings = require("../../../../config/settings");
//此类用来db中配置来进行调用-主要功能是推送蜂擎业务
class UtilsFqAliyunService extends AppServiceBase {
constructor() {
super();
this.ucommuneOperatorPhone = settings.ucommuneOperatorPhone()
}
async pushOrderBusinessByProductCode2Fq(pobj) {//推送自定义产品码的订单商机到峰擎(订单已经支付成功才推送)
var verifyResult = await this.verifyParam(pobj);
var orderInfo = pobj.actionBody.order_info;
var orderContact = pobj.actionBody.order_contact;
var productInfo = pobj.actionBody.product_info;
if (!orderInfo) {
verifyResult = system.getResult(null, "orderInfo can not be empty,100420");
}
if (!orderInfo.orderStatus || orderInfo.orderStatus < 2) {
verifyResult = system.getResult(null, "orderInfo status must be paid,100423");
}
if (!orderContact || !orderContact.mobile) {
verifyResult = system.getResult(null, "orderInfo.orderContact.mobile can not be empty,100425");
}
if (!productInfo || !productInfo.service_business_code) {
verifyResult = system.getResult(null, "orderInfo.productInfo.service_business_code can not be empty,100427");
}
if (!productInfo || !productInfo.price_item || !productInfo.price_item.service_code) {
verifyResult = system.getResult(null, "orderInfo.productInfo.price_item.service_code can not be empty,100430");
}
if (verifyResult.status != 0) {
return await this.disposePushResultFail(pobj, verifyResult, "fq->pushOrderBusinessByProductCode2Fq->verifyResult", this.pushlogFailType.FQ);
}
var interface_params_info = verifyResult.data;
console.log("推送的业务员手机号为:",this.ucommuneOperatorPhone)
var params = {
idempotentId: orderInfo.orderNo,// 是 业务 ID
idempotentSource: productInfo.service_business_code,// 是 业务来源(ic_jdyun、ic_ali)
idempotentSourceName: productInfo.service_business_name || productInfo.service_business_code,// 是 京东云应用、阿里云应用
city: "",// 否 所属城市
phone: orderContact.mobile,// 是 手机号
userId: orderInfo.channelUserId,// 否 用户 ID
companyName: "",// 否 公司名称
orderPrice: orderInfo.totalSum,// 是 订单金额
productId: productInfo.price_item.service_code,// 是 产品 ID
productQuantity: orderInfo.quantity,// 是 产品数量
operator_phone: this.ucommuneOperatorPhone, // 2020 0704 推送fq 必填字段 这里以下为新增 7.7修改由写死改为从settings获取
thirdPartyCustomerId: orderInfo.channelUserId,
pay_flow_no: orderInfo.pay_flow_no,// 支付流水号
pay_channel: orderInfo.pay_channel,// 支付渠道(微信、支付宝)(必填)
pay_time: orderInfo.pay_time,//付款时间
pay_payer_bank_no:orderInfo.pay_payer_bank_no//付款人账号
};
// var result = await this.opAliyunClientPost(pobj, "pushOrderBusiness", interface_params_info.opUrl, interface_params_info.key, interface_params_info.secret, params);
var result = await this.opAliyunClientPost(pobj, interface_params_info.opUrl, interface_params_info.key, interface_params_info.secret, params);
return await this.disposePushResult(pobj, result, "fq->pushOrderBusinessByProductCode2Fq->result", this.pushlogFailType.FQ);
}
/**
* 推送阿里信息操作到峰擎
* 阿里操作的信息不变外加增加组装的一些参数(推送工商需求商机、推送工商订单商机、推送关闭工商需求)
* @param {*} pobj
*/
async pushAliBusiness2Fq(pobj) {//推送阿里信息操作到峰擎
var verifyResult = await this.verifyParam(pobj);
if (verifyResult.status != 0) {
return await this.disposePushResultFail(pobj, verifyResult, "fq->pushAliBusiness2Fq->verifyResult", this.pushlogFailType.FQ);
}
var interface_params_info = verifyResult.data;
var result = await this.opAliyunClientPost(pobj, interface_params_info.opUrl, interface_params_info.key, interface_params_info.secret, pobj.actionBody);
return await this.disposePushResult(pobj, result, "fq->pushAliBusiness2Fq->result", this.pushlogFailType.FQ);
}
//--------------------------------------------------内部辅助方法-------------------start-----------------
async opAliyunClientPost(pobj, url, key, secret, params) {
try {
var rc = system.getObject("util.aliyunClient");
var rtn = await rc.post(url, key, secret, params);
if (rtn.code != 200 && rtn.success != true) {
return system.getResult(null, "推送失败,失败原因:" + rtn.errorMsg + ",selfrequestId=" + pobj.requestId + ",requestId=" + rtn.requestId);
}
return system.getResultSuccess(null, "推送成功");
} catch (e) {
//日志记录
this.logCtl.error({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/impl/utilsSve/opAliyunClientPost.js/opAliyunClientPost",
content: "error:" + e.stack,
// clientIp: pobj.clientIp,
optitle: pobj.opType + "推送操作异常->fq->opAliyunClientPost",
});
return system.getResult(null, "推送操作异常->fq->opAliyunClientPost->error:" + e.stack);
}
}
async verifyParam(pobj) {//参数信息验证
var verify = system.getResultSuccess();
if (!pobj.interface_params) {
verify = system.getResult(null, "interface_params can not be empty,100400");
}
var interface_params_info = JSON.parse(pobj.interface_params);
if (!interface_params_info || !interface_params_info.opUrl || !interface_params_info.key || !interface_params_info.secret) {
verify = system.getResult(null, "interface_params(opUrl、key、secret) can not be empty,100410");
}
verify.data = interface_params_info;
return verify;
}
//--------------------------------------------------内部辅助方法-------------------end-----------------
}
module.exports = UtilsFqAliyunService;
var system = require("../../../system");
var settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
const fs = require("fs");
//需求操作类
class UtilsNeedService extends AppServiceBase {
constructor() {
super();
this.centerOrderUrl = settings.centerOrderUrl();
this.utilsPushSve = system.getObject("service.utilsSve.utilsPushSve");
this.aliclient = system.getObject("util.aliyunClient");
this.ossClient = system.getObject("util.ossClient");
this.restClient = system.getObject("util.restClient");
}
/**
* 提交需求
* @param {*} pobj
* @param {*} actionBody
*/
async submitNeed(pobj, actionBody) {
if (!actionBody.intentionBizId) {
return system.getResult(null, "actionBody.intentionBizId can not be empty,100380");
}
var sobj = pobj;
sobj.actionType = "getProductTypeInfo";
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
var rtn = await this.execClient.execPost(sobj, url);
if (!rtn || !rtn.stdout) {
return system.getResultFail(-5015, "需求類型查询失败");
}
var data = JSON.parse(rtn.stdout);
if (data.status != 0) {
return system.getResultFail(-5015, "需求類型查询失败");
}
pobj.actionBody.type_code = data.data.type_code;
pobj.actionBody.type_name = data.data.type_name;
pobj.actionBody.channel_type_code = data.data.channel_type_code;
pobj.actionBody.channel_type_name = data.data.channel_type_name;
pobj.actionType = "submitNeed";
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
if (result.status == 0) {
if(pobj.actionBody.channel_type_code=="esp.companyreg"){
this.utilsPushSve.aliBusiness2Fq(pobj, "pushNeedBusiness");
}else{
if(pobj.actionBody.channel_type_code==5){
pobj.actionBody.regType="ali.icp";
}else{
pobj.actionBody.regType="ali.edi";
}
this.utilsPushSve.aliBusiness2Fq(pobj, "intention");
}
}
return result;
}
//调用center-order icp需求反馈
async reqCenterOrderApi(pobj, reqUrl) {
var url = this.centerOrderUrl + "action/icpapi/springBoard";
if (reqUrl) {
var url = this.centerOrderUrl + reqUrl;
}
pobj.actionType = "receiveIcpFeedback";
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
/**
* 提交需求
* @param {*} pobj
* @param {*} actionBody
*/
async submitNeedH5(pobj, actionBody) {
var sobj = pobj;
sobj.actionType = "getProductTypeInfo";
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
var rtn = await this.execClient.execPost(sobj, url);
if (!rtn || !rtn.stdout) {
return system.getResultFail(-5015, "需求類型查询失败");
}
var data = JSON.parse(rtn.stdout);
if (data.status != 0) {
return system.getResultFail(-5015, "需求類型查询失败");
}
pobj.actionBody.type_code = data.data.type_code;
pobj.actionBody.type_name = data.data.type_name;
pobj.actionBody.channel_type_code = data.data.channel_type_code;
pobj.actionBody.channel_type_name = data.data.channel_type_name;
pobj.actionType = "submitNeedH5";
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
if (result.status == 0) {
if(pobj.actionBody.channel_type_code=="esp.companyreg"){
this.utilsPushSve.aliBusiness2Fq(pobj, "pushNeedBusiness");
}
// else{
// if(pobj.actionBody.channel_type_code==5){
// pobj.actionBody.regType="ali.icp";
// }else{
// pobj.actionBody.regType="ali.edi";
// }
// this.utilsPushSve.aliBusiness2Fq(pobj, "intention");
// }
}
return result;
}
//调用center-order icp需求反馈
async reqCenterOrderApi(pobj, reqUrl) {
var url = this.centerOrderUrl + "action/icpapi/springBoard";
if (reqUrl) {
var url = this.centerOrderUrl + reqUrl;
}
pobj.actionType = "receiveIcpFeedback";
var rtn = await this.execClient.execPost(pobj, url);
var data = JSON.parse(rtn.stdout);
return data;
}
/**
* 获取需求详情
* @param {*} pobj
* @param {*} actionBody needNo 需求号
*/
async getItemByNeedNo(pobj, actionBody) {
if (!actionBody.needNo) {
return system.getResult(null, "actionBody.needNo can not be empty,100385");
}
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var itemResult = await this.restPostUrl(pobj, reqUrl);
return itemResult;
}
/**
* 获取需求详情
* @param {*} pobj
* @param {*} actionBody needNo 需求号
*/
async getItemByChannelNeedNo(pobj, actionBody) {
if (!actionBody.needNo) {
return system.getResult(null, "actionBody.needNo can not be empty,100390");
}
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var itemResult = await this.restPostUrl(pobj, reqUrl);
return itemResult;
}
/**
* 关闭需求
* @param {*} pobj
* @param {*} actionBody
*/
async needClose(pobj, actionBody) {
if (!actionBody.intentionBizId) {
return system.getResult(null, "actionBody.intentionBizId can not be empty,100395");
}
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
if (result.status == 0) {
this.utilsPushSve.aliBusiness2Fq(pobj, "pushCloseNeed");
return system.getResultSuccess();
} else {
return system.getResult(null, "推送失敗 100388");
}
}
/**
* icp关闭需求
* @param {*} pobj
* @param {*} actionBody
*/
async needCloseIcp(pobj, actionBody) {
if (!actionBody.channelNeedNo) {
return system.getResult(null, "actionBody.channelNeedNo can not be empty,100395");
}
var self = this;
pobj.actionBody.intentionBizId = pobj.actionBody.channelNeedNo;
pobj.actionType = "needClose"
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
if (result.status == 0) {
//推送ali
// await self.aliclient.reqbyget({ action: "CloseIntention", reqbody: { BizId: actionBody.channelNeedNo }, apiVersion: "2019-05-08" });
// self.utilsPushSve.aliBusiness2Fq(pobj, "pushCloseNeed");
return system.getResultSuccess();
} else {
return system.getResult(null, "close fail 100389");
}
}
//查询需求详情
async getItemByNeedNo(pobj, actionBody) {
if (!actionBody.needNo) {
return system.getResult(null, "actionBody.needNo can not be empty,100395");
}
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
//状态更新
async icpNotify(pobj) {
var actionBody = pobj.actionBody;
var self = this;
if (!actionBody.bizId) {
return system.getResult(null, "actionBody.bizId can not be empty,100495");
}
actionBody.BizId = actionBody.bizId;
if (!actionBody.status) {
return system.getResult(null, "actionBody.status can not be empty,100495");
}
if (actionBody.businessLicense) {
actionBody.newbusinessLicense = await self.opDownFileInfo(actionBody.businessLicense);
}
if (actionBody.idCardUrlList) {
var jsonidCardUrlList = JSON.parse(actionBody.idCardUrlList);
var newidCardUrlList = [];
for (var i = 0; i < jsonidCardUrlList.length; i++) {
var key = jsonidCardUrlList[i];
newidCardUrlList.push(await self.opDownFileInfo(key));
}
actionBody.newidCardUrlList = newidCardUrlList;
}
if (actionBody.userPlan) {
actionBody.newuserPlan = await self.opDownFileInfo(actionBody.userPlan);
}
if (actionBody.userForeig) {
actionBody.newuserForeig = await self.opDownFileInfo(actionBody.userForeig);
}
if (actionBody.userLaw) {
actionBody.newuserLaw = await self.opDownFileInfo(actionBody.userLaw);
}
if (actionBody.userOtherList) {
var jsonuserOtherList = JSON.parse(actionBody.userOtherList);
var newuserOtherList = [];
for (var i = 0; i < jsonuserOtherList.length; i++) {
var key = jsonuserOtherList[i];
newuserOtherList.push(await self.opDownFileInfo(key));
}
actionBody.newuserOtherList = newuserOtherList;
}
pobj.actionType = "receiveIcpStatusNotify";
var url = settings.centerOrderUrl() + "action/icpapi/springBoard";
var rtn = await this.restPostUrl(pobj, url);
return rtn;
}
async opDownFileInfo(docUrl, result) { //从oss下载到本地并上传到自己oss,之后删除本地文件
/*docUrl下载链接,全路径,如:https://XXXXXX.pdf?XXXXX */
try {
var tmpFileName = docUrl.substring(0, docUrl.lastIndexOf("?"));
var fileName = tmpFileName.substr(tmpFileName.lastIndexOf("/") + 1, tmpFileName.lenght);
//解码后的文件全名:xxx.pdf
var fileAllName = decodeURIComponent(fileName);//为xxx.pdf
var saveFilePath = '/tmp/' + fileAllName;
// 下载文件到指定的路径
var tmpp = await this.restClient.execDownload("'" + docUrl + "'", saveFilePath);
//上传 saveFilePath的文件 到ossClient
var rtn = await this.ossClient.upfile(fileAllName, saveFilePath);
result = rtn.url;
//删除本地文件
fs.unlink(saveFilePath, function (err) { });
} catch (e) {
}
return result;
}
async needDetailByChannelNo(pobj) {
if (!pobj.actionBody.bizId) {
return system.getResult(null, "actionBody.bizId can not be empty,100491");
}
var solutionobj = {
actionType: "getIcpProgrammeDetail",
actionBody: { BizId: pobj.actionBody.bizId },
appInfo: pobj.appInfo,
actionProcess: pobj.actionProcess
}
var url = this.centerOrderUrl + "action/icpapi/springBoard";
var solutionrtn = await this.execClient.execPost(solutionobj, url);
if (!solutionrtn || !solutionrtn.stdout) {
return system.getResultFail(-5011, "方案查询失败");
}
var solutiondata = JSON.parse(solutionrtn.stdout);
if (solutiondata.status != 0) {
return system.getResultFail(-5011, "方案查询失败");
}
if (solutiondata.data && solutiondata.data[0].channelNeedNo) {
pobj.actionBody.needNo = solutiondata.data[0].channelNeedNo;
pobj.actionBody.needId = solutiondata.data[0].channelNeedNo;
pobj.actionBody.channelSolutionNo = solutiondata.data[0].channelSolutionNo;
}
var sobj = {
actionType: "getItemByChannelNeedNo",
actionBody: pobj.actionBody,
appInfo: pobj.appInfo,
actionProcess: pobj.actionProcess
}
var reqUrl = this.centerOrderUrl + "action/need/springBoard";
var itemResult = await this.restPostUrl(sobj, reqUrl);
if(itemResult.status==0){
itemResult.data.channelSolutionNo=pobj.actionBody.channelSolutionNo;
}
return itemResult;
}
// async test1() {
// var a = await this.aliclient.reqbyget({ action: "CloseIntention", reqbody: { BizId: "20200416125415000001", Note: "测试需求关闭" }, apiVersion: "2019-05-08" });
// console.log(a.data);
// return a;
// }
}
module.exports = UtilsNeedService;
// var a=new UtilsNeedService();
// a.test1();
\ No newline at end of file
const system = require("../../../system");
var settings = require("../../../../config/settings");
const querystring = require('querystring');
const AppServiceBase = require("../../app.base");
//订单操作类
class UtilsOpOrderService extends AppServiceBase {
constructor() {
super();
this.centerOrderUrl = settings.centerOrderUrl();
this.utilsPushSve = system.getObject("service.utilsSve.utilsPushSve");
}
async updateContacts(pobj, actionBody) {//修改联系人
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100310");
}
var reqUrl = this.centerOrderUrl + "opaction/opOrder/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
if (result.status != 0) {
result.data = null;
return result;
}
if (result.data.orderStatus == 2) {
this.opUpdatePushInfo(result, pobj, actionBody, "pushUpdateOrderContacts");
}//状态为付款的订单进行推送
result.data = null;
return result;
}
async updateTmOrder(pobj, actionBody) {//修改商标信息
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100320");
}
var reqUrl = this.centerOrderUrl + "opaction/opOrder/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
if (result.status != 0) {
result.data = null;
return result;
}
if (result.data.orderStatus == 2) {
this.opUpdatePushInfo(result, pobj, "pushUpdateOrder");
if (pobj.actionBody.apply) {
pobj.actionBody.apply.gzwtsUrl = result.data.gzwtsUrl;
this.opUpdatePushInfo(result, pobj, "updateAliTmApplicant");
}//ali 只做申请人信息修改
}//状态为付款的订单进行推送
result.data = null;
return result;
}
async opUpdatePushInfo(result, pobj, opType) {//操作商标信息修改推送的操作-本类内部使用
if (result.status == 0 && result.data.orderStatus < 4) {
result.data.appInfo = {
uapp_id: pobj.appInfo.uapp_id,
uapp_key: pobj.appInfo.uapp_key,
app_code: pobj.appInfo.app_code,
app_name: pobj.appInfo.app_name
};
result.data.userInfo = {
channel_userid: pobj.userInfo.channel_userid,
channel_username: pobj.userInfo.channel_username,
channel_nickname: pobj.userInfo.channel_nickname
};
var tmpPobj = {
appInfo: pobj.appInfo,
actionBody: result.data
}
this.utilsPushSve.pushBusInfo(tmpPobj, opType, 1);
}
}
async tmConfirm(pobj, actionBody) {//商标方案确认
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100025");
}
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
if (result && result.status == 0 && result.data) {
this.pushTmConfirm(result, pobj, actionBody);//推送方案确认信息
return system.getResultSuccess();
}
return result;
}
async pushTmConfirm(result, pobj, actionBody) {//推送方案确认信息
var orderdelivery = result.data;
var deliveryContent = orderdelivery.deliveryContent;
if (deliveryContent) {
var pushObj = {//推送参数
serviceNo: deliveryContent.serviceNo,
isConfirm: actionBody.isConfirm,
channelCode: deliveryContent.channelCode,
notes: actionBody.notes || "",
appInfo: pobj.appInfo
};
var tmpPobj = {
appInfo: pobj.appInfo,
actionBody: pushObj
}
//获取产品详情
var getProductDetailUrl = settings.centerAppUrl() + "action/opProduct/springBoard";
var getProductDetailObj = {
"actionType": "getProductDetail",
"appInfo": pobj.appInfo,
"actionBody": { "channelItemCode": deliveryContent.itemCode }
};
var productItemResult = await this.restPostUrl(getProductDetailObj, getProductDetailUrl);
if (productItemResult.status != 0) {
return productItemResult;
}
tmpPobj.actionBody.product_info = productItemResult.data;
tmpPobj.actionBody.product_id = tmpPobj.actionBody.product_info.id;
//获取推送接口并推送
var pushInterfaceResult = await this.getOpInterfaceByProductId(pobj.appInfo, tmpPobj.actionBody.product_id);
if (pushInterfaceResult.status == 0) {
tmpPobj.actionBody.product_info.interface_info = pushInterfaceResult.data;
this.utilsPushSve.pushBusInfo(tmpPobj, "pushOpSolution", 1);
}
}
}
}
module.exports = UtilsOpOrderService;
const system = require("../../../system");
var settings = require("../../../../config/settings");
const querystring = require('querystring');
const AppServiceBase = require("../../app.base");
const axios = require('axios')
const md5 = require('md5')
class UtilsOrderService extends AppServiceBase {
constructor() {
super();
this.utilsPushSve = system.getObject("service.utilsSve.utilsPushSve");
this.logCtl = system.getObject("service.common.oplogSve");
this.centerOrderUrl = settings.centerOrderUrl();
this.qifuPayAfterH5JumpUrl = settings.qifuPayAfterH5JumpUrl();
this.qifuPayAfterPcJumpUrl = settings.qifuPayAfterPcJumpUrl();
this.qifuH5PayNotifyUrl = settings.qifuH5PayNotifyUrl();
this.centerAppUrl = settings.centerAppUrl();
this.centerAppPayUrl = settings.centerAppUrl() + "payment/paymentApi/springBoard";
this.paySecret = settings.paySecret()
};
/*
* 订单验证
*/
async isOrderVerify(pobj, actionBody) {
var price_list = actionBody.product_info.price_list;
if (!price_list) {
return system.getResult(null, "产品价格列表信息有误,100040");
}
var productIndex = price_list.findIndex(f => f.pay_code == actionBody.payCode && f.is_show == 1);
if (productIndex < 0) {
return system.getResult(null, "支付价格payCode信息有误,100050");
}
var totalSum = Number(price_list[productIndex].price) * Number(actionBody.quantity);
var additions = null;
var additionsIndex = -1;
if (actionBody.additions && actionBody.additions.payCode) {
additionsIndex = price_list.findIndex(f => f.pay_code == actionBody.additions.payCode && f.is_show == 0);
if (additionsIndex >= 0) {
totalSum = totalSum + Number(price_list[additionsIndex].price) * Number(actionBody.additions.quantity);
}
}
var buyTotalSum = Number(actionBody.totalSum || 0);
var buyPayTotalSum = Number(actionBody.payTotalSum || 0);
if (buyTotalSum == 0) {
actionBody.totalSum = totalSum;
}
if (buyPayTotalSum == 0) {
actionBody.payTotalSum = totalSum;
}
console.log("buyTotalSum",buyTotalSum)
console.log("totalSum",totalSum)
if (buyTotalSum < totalSum) {
return system.getResult(null, "订单金额有误,100060");
}
pobj.actionBody.product_info.price_item = price_list[productIndex];
if (additionsIndex >= 0) {
pobj.actionBody.product_info.price_additions_item = price_list[additionsIndex];
}
return system.getResultSuccess();
}
/**
* 创建订单
* @param {*} pobj
* @param {*} actionBody {channelItemCode:渠道产品的编码,id:定价id,quantity:订单数量,totalSum:300}
*/
async addOrder(pobj, actionBody) {
if (!actionBody.channelItemCode) {
return system.getResult(null, "产品编码有误,100010");
}
if (!actionBody.payCode) {
return system.getResult(null, "支付价格payCode不能为空,100020");
}
if (!actionBody.quantity || Number(actionBody.quantity) <= 0) {
return system.getResult(null, "订单数量为空或有误,100030");
}
pobj.actionType = "getProductDetail";
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
var productItemResult = await this.restPostUrl(pobj, url);
if (productItemResult.status != 0) {
return productItemResult;
}
pobj.actionBody.product_info = productItemResult.data;
var verifyResult = await this.isOrderVerify(pobj, pobj.actionBody);
if (verifyResult.status != 0) {
return verifyResult;
}
pobj.actionType = "getProductInterface";
pobj.actionBody.product_id = pobj.actionBody.product_info.id;
var productItemInterfaceResult = await this.restPostUrl(pobj, url);
pobj.actionBody.product_info.interface_info = productItemInterfaceResult.data;
pobj.actionType = "addOrder";
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
// console.log(pobj);
var result = await this.restPostUrl(pobj, reqUrl);
result.totalSum = actionBody.totalSum;
return result;
}
async delOrder(pobj, actionBody) {
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100025");
}
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
async getOrderInfo(pobj, actionBody) {
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
async getOrderDetails(pobj, actionBody) {
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
async getOrderDeliveryInfo(pobj, actionBody) {
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100290");
}
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
async getOrderDeliveryFlowInfo(pobj, actionBody) {
if (!actionBody.sourceOrderNo) {
return system.getResult(null, "actionBody.sourceOrderNo can not be empty,100300");
}
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
async getOrderDeliveryFlowList(pobj, actionBody) {
if (!actionBody.sourceOrderNoList) {
return system.getResult(null, "actionBody.sourceOrderNoList can not be empty,100070");
}
if (actionBody.sourceOrderNoList.length == 0) {
return system.getResult(null, "actionBody.sourceOrderNoList length can not be empty,100080");
}
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
async getOrderLogInfo(pobj, actionBody) {
if (!actionBody.sourceOrderNo) {
return system.getResult(null, "actionBody.sourceOrderNo can not be empty,100090");
}
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
async icOrderStatusNotify(pobj, actionBody) {
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100100");
}
var reqUrl = this.centerOrderUrl + "notifyaction/oporder/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
/**
* 获取H5支付地址
* @param {*} pobj
* @param {*} actionBody
*/
async getH5PayUrl(pobj, actionBody) {
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100110");
}
pobj.actionType = "getPayOrderInfo";
var orderUrl = settings.centerOrderUrl() + "action/order/springBoard";
var orderResult = await this.restPostUrl(pobj, orderUrl);
if (orderResult.status != 0) {
return orderResult;
}
pobj.actionBody.body_desc = orderResult.data.orderProduct.channelItemName;
pobj.actionBody.total_fee = Number(orderResult.data.receiptVoucher.totalSum) * 100;
pobj.actionBody.order_num = orderResult.data.receiptVoucher.sourceOrderNo;
pobj.actionBody.returl = orderResult.data.orderProduct.payAfterJumpH5Url || this.qifuPayAfterH5JumpUrl;
pobj.actionBody.notify_url = this.qifuH5PayNotifyUrl;
pobj.actionType = "getH5PayUrl";
var result = await this.restPostUrl(pobj, this.centerAppPayUrl);
if (result.status != 0) {
return result;
}
await this.cacheManager["TlPayLocker"].init(orderResult.data.receiptVoucher.sourceOrderNo);
return result;
}
/**
* 获取二维码
* @param {*} pobj
* @param {*} actionBody {orderNo:XXXX,opType:"wx"}---"wx":"微信","alipay":"支付宝"
*/
async getOrderQrCode(pobj, actionBody) {
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100120");
}
pobj.actionType = "getPayOrderInfo";
var orderUrl = settings.centerOrderUrl() + "action/order/springBoard";
var orderResult = await this.restPostUrl(pobj, orderUrl);
if (orderResult.status != 0) {
return orderResult;
}
//查询支付流水号是否已经支付
var receiptVoucher = orderResult.data.receiptVoucher;
pobj.actionType = "queryOrderStatus";
var url = this.centerAppUrl + "payment/paymentApi/queryOrder";
if (receiptVoucher.busPayOrderCode != receiptVoucher.wxPayOrderCode) {
pobj.actionBody.trxid = wxPayOrderCode;
var wxPayStatus = await this.restPostUrl(pobj, url);
if (wxPayStatus && wxPayStatus.code == 1 && wxPayStatus.data.trxstatus == "0000") {
return system.getResultFail(-100130, "订单已支付,请勿重复付款,100130");
}
}
if (receiptVoucher.busPayOrderCode != receiptVoucher.aliPayOrderCode) {
pobj.actionBody.trxid = aliPayOrderCode;
var aliPayStatus = await this.restPostUrl(pobj, url);
if (aliPayStatus && aliPayStatus.code == 1 && aliPayStatus.data.trxstatus == "0000") {
return system.getResultFail(-100140, "订单已支付,请勿重复付款,100140");
}
}
// pobj.actionBody.body_desc, pobj.actionBody.total_fee, pobj.actionBody.order_num, pobj.actionBody.op_type
pobj.actionBody.body_desc = orderResult.data.orderProduct.channelItemName;
pobj.actionBody.total_fee = Number(receiptVoucher.totalSum) * 100;
pobj.actionBody.order_num = receiptVoucher.sourceOrderNo;
pobj.actionBody.op_type = actionBody.opType;
pobj.actionType = "getOrderQrCode";
var result = await this.restPostUrl(pobj, this.centerAppPayUrl);
if (result.status != 0) {
return result;
}
//更新DB付款信息
var isPut = 0;
var setField = {};
if (opType == "wx") {
if (actionBody.trxid != receiptVoucher.wxPayOrderCode) {
setField.wxPayOrderCode = tResult.data.trxid;
receiptVoucher.wxPayOrderCode = tResult.data.trxid;
isPut = 1;
}
} else {
//支付宝
if (actionBody.trxid != receiptVoucher.aliPayOrderCode) {
setField.aliPayOrderCode = tResult.data.trxid;
receiptVoucher.aliPayOrderCode = tResult.data.trxid;
isPut = 1;
}
}
pobj.actionBody.isPut;
pobj.actionBody.setField = setField;
pobj.actionBody.receiptVoucherId = receiptVoucher.id;
pobj.actionBody.trxid = result.data.trxid;
pobj.actionType = "putReceiptVoucherInfo";
var putOrderResult = await this.restPostUrl(pobj, orderUrl);
if (putOrderResult.status != 0) {
return putOrderResult;
}
if (isPut > 0) {
await this.cacheManager["TlPayLocker"].init(receiptVoucher.sourceOrderNo);
}
result.wxPayOrderCode = receiptVoucher.wxPayOrderCode;
result.aliPayOrderCode = receiptVoucher.aliPayOrderCode;
return result;
}
/**
* 查询订单状态
* @param {*} pobj
* @param {*} actionBody {orderNo:XXXX,opType:"wx"}---"wx":"微信","alipay":"支付宝"
*/
async queryOrderStatus(pobj, actionBody) {
if (!actionBody.orderNo) {
return system.getResult(null, "actionBody.orderNo can not be empty,100150");
}
if (!actionBody.opType) {
return system.getResult(null, "actionBody.opType can not be empty,100160");
}
pobj.actionType = "getPayOrderInfo";
var orderUrl = settings.centerOrderUrl() + "action/order/springBoard";
var orderResult = await this.restPostUrl(pobj, url);
if (orderResult.status != 0) {
return orderResult;
}
//检查流水号是否已经支付
var receiptVoucher = orderResult.data.receiptVoucher;
var payTrxid = opType == "wx" ? receiptVoucher.wxPayOrderCode : receiptVoucher.aliPayOrderCode;
pobj.actionBody.trxid = payTrxid;
pobj.actionType = "queryOrderStatus";
var payStatus = await this.restPostUrl(pobj, this.centerAppPayUrl);
if (payStatus.data && payStatus.data.trxstatus == "0000") {
//TODO:处理支付成功的业务逻辑
// payStatus.data.client_ip = obj.client_ip || "";
// let attachList = [];
// if (payStatus.data.reqsn.indexOf("_") >= 0) {
// attachList = payStatus.data.reqsn.split("_");
// }
// else {
// attachList.push(payStatus.data.reqsn);
// }
// if (attachList.length != 2) {
// return { -120, msg: "reqsn参数错误,没有_标识" };
// }
// payStatus.data.out_trade_no = attachList[0];
// payStatus.data.company_id = attachList[1];
// return await this.utilstlbankSve.opBackNotify(payStatus.data, "页面回调");
}
else if (payStatus.data && payStatus.data.trxstatus == "3045") {
return system.getResultFail(-100170, "超时未支付,请刷新页面,100170");
}
return system.getResultFail(-100180, "请及时支付,100180");
}
/**
* 获取pc端支付二维码--不跟订单关联
* @param {*} pobj
* @param {*} actionBody
* "actionBody": {
"order_num": order.orderNo,
"total_fee": Number(order.totalSum) * 100,
"body_desc": order.itemName,
"op_type": obj.opType
}
*/
async getQrCode(pobj, actionBody) {
if (!actionBody.order_num) {
return system.getResult(null, "actionBody.order_num can not be empty,100190");
}
if (!actionBody.total_fee) {
return system.getResult(null, "actionBody.total_fee can not be empty,100200");
}
if (!actionBody.body_desc) {
return system.getResult(null, "actionBody.body_desc can not be empty,100210");
}
if (!actionBody.op_type) {
return system.getResult(null, "actionBody.op_type can not be empty,100220");
}
if (actionBody.op_type != "wx" && actionBody.op_type != "alipay") {
return system.getResult(null, "actionBody.op_type param error,100230");
}
return await this.restPostUrl(pobj, this.centerAppPayUrl);
}
/**
* 只是检查支付状态--不跟订单关联
* @param {*} pobj
* @param {*} actionBody { "trxid": payTrxid 支付流水号}
*/
async queryOrder(pobj, actionBody) {
if (!actionBody.trxid) {
return system.getResult(null, "actionBody.trxid can not be empty,100240");
}
return await this.restPostUrl(pobj, this.centerAppPayUrl);
}
async receiveCallBackNotify(parmas, client_ip) {
try {
if (!parmas || !parmas.trxcode) {
return system.getResult(null, "回调parmas中参数信息为空,100250");
}
//日志记录
this.logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "记录回调参数:,method=" + parmas.trxcode,
op: "service/impl/utilsSve/utilsOrderSve.js/receiveCallBackNotify",
content: JSON.stringify(parmas),
clientIp: client_ip || ""
});
var param = {
"actionBody": { parmas: parmas },
"client_ip": client_ip
};
var qftstr = await this.restClient.execPost(param, this.centerAppUrl + "payment/paymentApi/receiveCallBackNotify");
if (!qftstr.stdout) {
return system.getResult(null, "回调app中receiveCallBackNotify方法返回信息为空,100255");
}
var qftjson = JSON.parse(qftstr.stdout);
return qftjson;
} catch (e) {
this.logCtl.error({
optitle: "回调业务处理---error异常",
op: "center-app/app/base/service/impl/utilsSve/utilstlbankSve.js/receiveCallBackNotify",
content: "参数=" + JSON.stringify(parmas) + ",error:" + e.stack,
clientIp: client_ip || ""
});
return system.getResultFail(-200, e.stack);
}
}
async opBackNotify(parmas, client_ip) { //操作回调业务逻辑
try {
if (!parmas.uappid) {
return system.getResult(null, "uappid参数不能为空,100260");
}
//日志记录
this.logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "回调处理订单参数:,method=" + parmas.trxcode,
op: "service/impl/utilsSve/utilsOrderSve.js/opBackNotify",
content: JSON.stringify(parmas),
clientIp: client_ip || ""
});
var url = this.centerAppUrl + "payment/paymentApi/getAppInfo";
var opResult = await this.restPostUrl({ uappId: parmas.uappid }, url);
if (opResult.status != 0) {
opResult.msg = opResult.msg + ",100270";
return opResult;
}
var appInfo = opResult.data;
var resultSign = await this.verifySign(parmas, appInfo.uapp_secret);
if (!resultSign || resultSign.status != 0) {
return resultSign;
}
//获取充值业务锁
// await this.cacheManager["TlPayLocker"].init(parmas.out_trade_no);//---测试时放开
var locker = await this.cacheManager["TlPayLocker"].enter(parmas.out_trade_no);
if (!locker || locker != "1") {
this.logCtl.info({
appid: appInfo.uapp_id,
appkey: appInfo.uapp_key,
op: "service/impl/utilsSve/utilsOrderSve.js/opBackNotify",
content: "参数=" + JSON.stringify(parmas),
clientIp: parmas.client_ip || "",
optitle: "通联回调操作频繁---太频繁了,太频繁了"
});
return system.getResultFail(-200, "回调操作频繁---太频繁了,太频繁了");
}
if (parmas.trxcode == "VSP501") {
parmas.pay_type = "wx";
} else {
parmas.pay_type = "alipay";
}
parmas.appInfo = appInfo;
parmas.orderNo = parmas.out_trade_no;
//修改并返回订单支付状态,创建收款单
var url = this.centerOrderUrl + "opaction/opPayOrder/receivePayCallBackNotify";
var opResult = await this.restPostUrl(parmas, url);
if (opResult.status == 0) {
opResult.data.appInfo = {
uapp_id: appInfo.uapp_id,
uapp_key: appInfo.uapp_key,
app_code: appInfo.app_code,
app_name: appInfo.app_name
};
opResult.data.userInfo = {
channel_userid: opResult.data.order_info.channelUserId,
channel_username: opResult.data.order_info.channelUserId,
channel_nickname: opResult.data.order_info.channelUserId
};
var pobj = {
appInfo: opResult.data.appInfo,
actionBody: opResult.data
}
// this.utilsPushSve.pushBusInfo(opResult.data, "pushOrderBusiness",0);
this.utilsPushSve.pushBusInfo(pobj, "pushOrder", 0);
}
opResult.data = null;
return opResult;
} catch (e) {
await this.cacheManager["TlPayLocker"].release(parmas.out_trade_no);
this.logCtl.error({
optitle: "回调处理订单---error异常",
op: "center-app/app/base/service/impl/utilsSve/utilstlbankSve.js/opBackNotify",
content: "参数=" + JSON.stringify(parmas) + ",error:" + e.stack,
clientIp: client_ip || ""
});
return system.getResultFail(-200, e.stack);
}
}
async opH5AliDingPayBackNotify(parmas, client_ip) { //操作回调业务逻辑
try {
//日志记录
this.logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "阿里钉钉支付回调参数信息",
op: "service/impl/utilsSve/utilsOrderSve.js/opH5AliDingPayBackNotify",
content: JSON.stringify(parmas),
clientIp: client_ip || ""
});
if (!parmas.trade_status) {
return system.getResult(null, "trade_status参数不能为空,100470");
}
if (parmas.trade_status != "TRADE_FINISHED" && parmas.trade_status != "TRADE_SUCCESS") {
return system.getResult(null, "trade_status状态有误,100473");
}
// 2020 0621验签操作
var url = this.centerAppUrl + "payment/aliPayment/verifyAliPayReturnSign";
var opResult = await this.restPostUrl(parmas, url);
if (opResult.status != 0) {
opResult.msg = opResult.msg + ",100480";
return opResult;
}
// data:{
// orderNo: outTradeInfo[0],
// uappId: outTradeInfo[1],
// productId: outTradeInfo.length == 3 ? outTradeInfo[2] : 0
// }
// opResult.data = {
// orderNo: "TM36202004191028Sgir",
// uappId: 36,
// productId: 42
// };
// //获取充值业务锁
// await this.cacheManager["TlPayLocker"].init(opResult.data.orderNo);//---测试时放开
var locker = await this.cacheManager["TlPayLocker"].enter(opResult.data.orderNo);
if (!locker || locker != "1") {
this.logCtl.info({
appid: opResult.data.uappId,
appkey: "",
op: "service/impl/utilsSve/utilsOrderSve.js/opH5AliDingPayBackNotify",
content: "参数=" + JSON.stringify(parmas),
clientIp: parmas.client_ip || "",
optitle: "阿里回调操作频繁---太频繁了,太频繁了"
});
return system.getResultFail(-200, "阿里回调操作频繁---太频繁了,太频繁了");
}
parmas.appInfo = { appInfo: { uapp_id: opResult.data.uappId } };
parmas.orderNo = opResult.data.orderNo;
parmas.pay_type = "alipay";
//修改并返回订单支付状态,创建收款单
var url = this.centerOrderUrl + "opaction/opPayOrder/receivePayCallBackNotifyByAliDing";
var opOrderResult = await this.restPostUrl(parmas, url);
if (opOrderResult.status != 0) {
opOrderResult.data = null;
return opOrderResult;
}
opOrderResult.data.appInfo = {
uapp_id: opResult.data.uappId
};
opOrderResult.data.userInfo = {
channel_userid: opOrderResult.data.order_info.channelUserId,
channel_username: opOrderResult.data.order_info.channelUserId,
channel_nickname: opOrderResult.data.order_info.channelUserId
};
opOrderResult.data.orderNo = opResult.data.orderNo;
var pobj = {
appInfo: opOrderResult.data.appInfo,
actionBody: opOrderResult.data
}
this.utilsPushSve.pushBusInfo(pobj, "createAliTmApply", 1);
opOrderResult.data = null;
return opOrderResult;
} catch (e) {
await this.cacheManager["TlPayLocker"].release(parmas.out_trade_no);
this.logCtl.error({
optitle: "回调处理订单---error异常",
op: "center-app/app/base/service/impl/utilsSve/utilstlbankSve.js/opBackNotify",
content: "参数=" + JSON.stringify(parmas) + ",error:" + e.stack,
clientIp: client_ip || ""
});
return system.getResultFail(-200, e.stack);
}
}
async orderClose(pobj) {//阿里退款
if (!pobj.actionBody.orderNo) {
return system.getResult(null, "actionBody.prderNo can not be empty");
}
try {
pobj.actionType = "channeldelOrder";
await this.delOrder(pobj, pobj.actionBody);
pobj.actionType = "updateStausByRefundOrder";
var url = settings.centerOrderUrl() + "action/icapi/springBoard";
await this.execClient.execPost(pobj, url);
return system.getResultSuccess();
} catch (e) {
return system.getResultFail(-200, e.stack);
}
}
async aliPayNotify(parmas, client_ip) { // 支付宝回调
try {
console.log("支付宝回调参数信息--------------------start")
console.log(JSON.stringify(parmas))
console.log(typeof(parmas))
console.log(parmas.toString())
console.log("支付宝回调参数信息--------------------end")
//日志记录
this.logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "支付宝回调参数信息",
op: "service/impl/utilsSve/utilsOrderSve.js/aliPayNotify",
content: JSON.stringify(parmas),
// content: parmas.toString(),
clientIp: client_ip || ""
});
if (!parmas.trade_status) {
return system.getResult(null, "trade_status参数不能为空,100470");
}
if (parmas.trade_status != "TRADE_FINISHED" && parmas.trade_status != "TRADE_SUCCESS") {
return system.getResult(null, "trade_status状态有误,100473");
}
console.log("parmas.trade_status 校验通过--------------")
// 2020 0621 支付宝验签接口
var url = "https://yf-api.gongsibao.com/pay/v1/checkAliPaySign";
let params = {
"app": "ukgc", //应用名称 固定
"key": "a1519e2eab53dfb909e4c32a86b2ea2b", //应用 key 固定
"tData" : parmas
}
var sign = JSON.stringify(params);
// sign += "ab53dfb909e4c32a"
sign += this.paySecret
sign = md5(sign).toUpperCase()
params.sign = sign
console.log("准备验签名params-------------------start")
console.log(params)
console.log("准备验签名params-------------------end")
// let res = await axios.post(url, params)
// this.logCtl.info({
// optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "支付宝回调参数验签结果",
// op: "service/impl/utilsSve/utilsOrderSve.js/aliPayNotify",
// content: JSON.stringify(res),
// clientIp: client_ip || ""
// });
// if (res.status != 0) {
// res.msg = res.msg + ",100480";
// return res;
// }
// 模拟验签结果
var outTradeInfo = parmas.out_trade_no.split('-');
console.log("模拟验签结果--------------",outTradeInfo)
//
var opResult = {}
opResult.data = {
orderNo: outTradeInfo[0],
uappId: Number(outTradeInfo[1]),
productId: outTradeInfo.length == 3 ? Number(outTradeInfo[2]) : 0
}
// 2020 07.03 lin 修改 获取app信息 推送蜂擎使用
var url = this.centerAppUrl + "payment/paymentApi/getAppInfo";
var appInfoResult = await this.restPostUrl({ uappId: opResult.data.uappId }, url);
if (appInfoResult.status != 0) {
appInfoResult.msg = appInfoResult.msg + ",100270";
return appInfoResult;
}
var appInfo = appInfoResult.data;
// 拿锁
var locker = await this.cacheManager["TlPayLocker"].enter(opResult.data.orderNo);
console.log("拿锁结果",locker)
if (!locker || locker != "1") {
this.logCtl.info({
appid: opResult.data.uappId,
appkey: "",
op: "service/impl/utilsSve/utilsOrderSve.js/aliPayNotify",
content: "参数=" + JSON.stringify(parmas),
clientIp: parmas.client_ip || "",
optitle: "阿里回调操作频繁---太频繁了,太频繁了"
});
return system.getResultFail(-200, "阿里回调操作频繁---太频繁了,太频繁了");
}
parmas.appInfo = { appInfo: { uapp_id: opResult.data.uappId } };
parmas.orderNo = opResult.data.orderNo;
parmas.pay_type = "alipay";
//修改并返回订单支付状态,创建收款单
// 这里修改了order_info的状态(status/paytime等)
var url = this.centerOrderUrl + "opaction/opPayOrder/receivePayCallBackNotifyByAliDing";
var opOrderResult = await this.restPostUrl(parmas, url);
if (opOrderResult.status != 0) {
opOrderResult.data = null;
return opOrderResult;
}
opOrderResult.data.appInfo = {
uapp_id: opResult.data.uappId,
uapp_key: appInfo.uapp_key,
app_code: appInfo.app_code,
app_name: appInfo.app_name
};
opOrderResult.data.userInfo = {
channel_userid: opOrderResult.data.order_info.channelUserId,
channel_username: opOrderResult.data.order_info.channelUserId,
channel_nickname: opOrderResult.data.order_info.channelUserId
};
opOrderResult.data.orderNo = opResult.data.orderNo;
opOrderResult.data.order_info.pay_flow_no = parmas.trade_no;// 2020 0704 lin 新增 推送fq必填字段
opOrderResult.data.order_info.pay_channel = "支付宝";//付款方式
opOrderResult.data.order_info.pay_time = parmas.gmt_payment;//付款时间
opOrderResult.data.order_info.pay_payer_bank_no = parmas.buyer_email;//付款账号
opOrderResult.data.order_contact = opOrderResult.data.delivery_content.orderContact;
var pobj = {
appInfo: opOrderResult.data.appInfo,
actionBody: opOrderResult.data
}
// 推送
this.utilsPushSve.pushBusInfo(pobj, "pushOrder", 0);
opOrderResult.data = null;
return opOrderResult;
} catch (e) {
await this.cacheManager["TlPayLocker"].release(parmas.out_trade_no);
this.logCtl.error({
optitle: "回调处理订单---error异常",
op: "center-app/app/base/service/impl/utilsSve/utilsOrderSve.js/aliPayNotify",
content: "参数=" + JSON.stringify(parmas) + ",error:" + e.stack,
clientIp: client_ip || ""
});
return system.getResultFail(-200, e.stack);
}
}
async wxPayNotify(parmas, client_ip) { // 微信宝回调
try {
//日志记录
this.logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "微信回调参数信息",
op: "service/impl/utilsSve/utilsOrderSve.js/wxPayNotify",
content: JSON.stringify(parmas),
clientIp: client_ip || ""
});
if (!parmas.result_code) {
return system.getResult(null, "result_code参数不能为空,100670");
}
if (parmas.result_code != "SUCCESS") {
return system.getResult(null, "result_code状态有误,100673");
}
// 2020 0621 支付宝验签接口
// var url = "https://yf-api.gongsibao.com/pay/v1/checkWXPaySign";
// let params = {
// "app": "ukgc", //应用名称 固定
// "key": "a1519e2eab53dfb909e4c32a86b2ea2b", //应用 key 固定
// "tData" : parmas
// }
// var sign = JSON.stringify(params);
// sign += "ab53dfb909e4c32a"
// sign = md5(sign).toUpperCase()
// params.sign = sign
// let res = await axios.post(url, params)
// this.logCtl.info({
// optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "微信回调参数验签结果",
// op: "service/impl/utilsSve/utilsOrderSve.js/wxPayNotify",
// content: JSON.stringify(res),
// clientIp: client_ip || ""
// });
// if (res.status != 0) {
// res.msg = res.msg + ",100480";
// return res;
// }
// 模拟验签结果
var outTradeInfo = parmas.out_trade_no.split('-');
//
var opResult = {}
opResult.data = {
orderNo: outTradeInfo[0],
uappId: Number(outTradeInfo[1]),
productId: outTradeInfo.length == 3 ? Number(outTradeInfo[2]) : 0
}
// 拿锁
var locker = await this.cacheManager["TlPayLocker"].enter(opResult.data.orderNo);
if (!locker || locker != "1") {
this.logCtl.info({
appid: opResult.data.uappId,
appkey: "",
op: "service/impl/utilsSve/utilsOrderSve.js/wxPayNotify",
content: "参数=" + JSON.stringify(parmas),
clientIp: parmas.client_ip || "",
optitle: "微信回调操作频繁---太频繁了,太频繁了"
});
return system.getResultFail(-200, "微信回调操作频繁---太频繁了,太频繁了");
}
parmas.appInfo = { appInfo: { uapp_id: opResult.data.uappId } };
parmas.orderNo = opResult.data.orderNo;
// 注意 微信支付要写wx 不要wxpay等其他。c_order_receiptvoucher收款单的accountType会对应wx:微信"alipay":"支付宝","other":"其它"等其他方式
parmas.pay_type = "wx";
//修改并返回订单支付状态,创建收款单
// 这里修改了order_info的状态(status/paytime等)
// var url = this.centerOrderUrl + "opaction/opPayOrder/receivePayCallBackNotifyByAliDing";
var url = this.centerOrderUrl + "opaction/opPayOrder/receivePayCallBackNotifyByWX";
var opOrderResult = await this.restPostUrl(parmas, url);
if (opOrderResult.status != 0) {
opOrderResult.data = null;
return opOrderResult;
}
opOrderResult.data.appInfo = {
uapp_id: opResult.data.uappId
};
opOrderResult.data.userInfo = {
channel_userid: opOrderResult.data.order_info.channelUserId,
channel_username: opOrderResult.data.order_info.channelUserId,
channel_nickname: opOrderResult.data.order_info.channelUserId
};
opOrderResult.data.orderNo = opResult.data.orderNo;
var pobj = {
appInfo: opOrderResult.data.appInfo,
actionBody: opOrderResult.data
}
this.utilsPushSve.pushBusInfo(pobj, "createAliTmApply", 1);
opOrderResult.data = null;
return opOrderResult;
} catch (e) {
await this.cacheManager["TlPayLocker"].release(parmas.out_trade_no);
this.logCtl.error({
optitle: "回调处理订单---error异常",
op: "center-app/app/base/service/impl/utilsSve/utilstlbankSve.js/opBackNotify",
content: "参数=" + JSON.stringify(parmas) + ",error:" + e.stack,
clientIp: client_ip || ""
});
return system.getResultFail(-200, e.stack);
}
}
}
module.exports = UtilsOrderService;
var system = require("../../../system");
var settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
//产品操作类
class UtilsProductService extends AppServiceBase {
constructor() {
super();
}
//--------------------------------应用中心获取产品信息-start-----------------------------------------------------
/**
* 通过产品类别编码路径获取产品列表
* @param {*} pobj
* @param {*} actionBody pathCode 为类别编码路径,一级类下产品列表 sbfu,二级类下产品列表sbfu/sbzc
*/
async getProductList(pobj, actionBody) {
if (!actionBody.pathCode) {
return system.getResult(null, "actionBody.pathCode can not be empty,100330");
}
pobj.actionBody.pathCode = "/" + actionBody.pathCode + "/";
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
return await this.restPostUrl(pobj, url);
}
/**
* 获取产品列表及最低价
* @param pobj
* @param actionBody
* @returns {Promise<{msg: *, data, bizmsg: *|string, status: number}|any>}
*/
async getProductListH5(pobj, actionBody) {
if (!actionBody.pathCode) {
return system.getResult(null, "actionBody.pathCode can not be empty,100330");
}
pobj.actionType = 'getProductList';
pobj.actionBody.pathCode = "/" + actionBody.pathCode + "/";
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
let list = await this.restPostUrl(pobj, url);
if(!list.data){
return system.getResult(null,'product data is empty')
}
for(let item of list.data){
pobj.actionType = 'getMinPrice';
pobj.actionBody = {
product_id:item.product_id
}
let re = await this.restPostUrl(pobj,url);
item.price = re.data ? re.data.price : 0;
}
return list;
}
/**
* 获取产品详情
* @param {*} pobj
* @param {*} actionBody channelItemCode 渠道产品编码
*/
async getProductDetail(pobj, actionBody) {
if (!actionBody.channelItemCode) {
return system.getResult(null, "actionBody.channelItemCode can not be empty,100340");
}
var url = settings.centerAppUrl() + "action/opProduct/springBoard";
return await this.restPostUrl(pobj, url);
}
//--------------------------------应用中心获取产品信息--end----------------------------------------------------
/**
* 产品询价
* @param pobj.actionType ='getProductPrice'
* @param actionBody
* @returns {Promise<{msg: *, data, bizmsg: *|string, status: number}>}
*/
async getProductPrice(pobj,actionBody){
pobj.actionType = 'getProductPrice'
let url = settings.centerAppUrl() + "action/opProduct/springBoard";
return await this.restPostUrl(pobj, url);
}
}
module.exports = UtilsProductService;
const system = require("../../../system");
var settings = require("../../../../config/settings");
const querystring = require('querystring');
const AppServiceBase = require("../../app.base");
class UtilsPushService extends AppServiceBase {
constructor() {
super();
};
async aliBusiness2Fq(pobj, opType) {//供业务调用,在代码中调用,不在db中做配置进行调用
pobj.actionType = "getAppInterface";
var reqUrl = settings.centerAppUrl() + "action/opProduct/springBoard";
var productItemInterfaceResult = await this.restPostUrl(pobj, reqUrl);
pobj.interface_info = productItemInterfaceResult.data;
//日志记录
this.logCtl.info({
appid: pobj.appInfo ? pobj.appInfo.uapp_id || "" : "",
appkey: pobj.appInfo ? pobj.appInfo.uapp_key || "" : "",
requestId: pobj.requestId || "",
op: "service/impl/utilsSve/utilsPushSve.js/service/app.base.js/aliBusiness2Fq",
content: JSON.stringify(pobj),
resultInfo: productItemInterfaceResult.data ? JSON.stringify(productItemInterfaceResult.data) : "接口数据为空",
optitle: pobj.opType + "推送蜂擎获取的接口信息->aliBusiness2Fq",
});
if (pobj.interface_info) {
await this.pushBusInfo(pobj, opType, 1);
return system.getResultSuccess();
}
return system.getResult(null, "push Fail,interface_info data is empty");
}
async pushBusInfo(pobj, opType, isDelProductInfo) {//推送业务总入口
var interface_list = pobj.interface_info ? pobj.interface_info : pobj.actionBody.product_info.interface_info;
if (!interface_list) {
return system.getResult(null, "暂无推送配置");
}
var interface_list_temp = interface_list.filter(f => f.op_type == opType)
if (!interface_list_temp || interface_list_temp.length == 0) {
return system.getResult(null, "暂无【" + opType + "】的推送配置");
}
var self = this;
for (let index = 0; index < interface_list_temp.length; index++) {
const element = interface_list_temp[index];
await self.reflexAction(element, opType, pobj, isDelProductInfo);
}
}
async againPushBusInfo(pobj) {//再次推送业务总入口-重试
var interface_info = pobj.interface_info ? pobj.interface_info : pobj.actionBody.product_info.interface_info;
if (!interface_info) {
return system.getResult(null, "暂无推送配置");
}
var result = await this.reflexAction(interface_info, pobj.opType, pobj, pobj.isDelProductInfo || 1);
if (result.status != 0) {
return result;
}
return system.getResultSuccess();
}
async reflexAction(interface_info, opType, pobj, isDelProductInfo) {
var refResult = null;
pobj.interface_info = interface_info;
pobj.opType = opType;
pobj.isDelProductInfo = isDelProductInfo;
try {
if (interface_info.interface_type == "bd") {
if (!interface_info.method_name) {
return system.getResult(null, "产品接口参数信息有误,100350");
}//操作的方法名称
var invokeObj = system.getObject(interface_info.interface_url);
if (!invokeObj[interface_info.method_name]) {
return system.getResult(null, "产品接口参数方法信息有误,100360");
}
pobj.interface_params = interface_info.params;
var params = [pobj];
invokeObj[interface_info.method_name].apply(invokeObj, params);
}
else if (interface_info.interface_type == "yc") {
var actionBody = pobj.actionBody;
if (!interface_info.interface_url) {
return system.getResult(null, "产品接口interface_url参数不能为空,100370");
}
if (actionBody.product_info && actionBody.product_info.price_list) {
delete actionBody.product_info["price_list"];
}
if (actionBody.product_info && actionBody.product_info.interface_info) {
delete actionBody.product_info["interface_info"];
}
if (isDelProductInfo && isDelProductInfo == 1 && actionBody.product_info) {
delete actionBody["product_info"];
}//是否删除产品信息进行推送
refResult = await this.restPostUrl(pobj.actionBody, interface_info.interface_url);
if(refResult.code == 1) {
refResult.status = 0
}
this.disposePushResult(pobj, refResult, "ycUrlPush->reflexAction->refResult", this.pushlogFailType.NEWRPC);
}
return system.getResultSuccess();
} catch (e) {
var errorResult = system.getResult(null, "送异常-->reflexAction->" + e.stack)
return await this.disposePushResultFail(pobj, errorResult, "数据推送异常-->reflexAction-->errorResult", this.pushlogFailType.FAILLOG);
}
}
}
module.exports = UtilsPushService;
const AppServiceBase = require("../../app.base");
var settings = require("../../../../config/settings");
const system = require("../../../system");
//此类用来db中配置来进行调用-主要功能是推送阿里商标业务
class UtilsTmAliyunService extends AppServiceBase {
constructor() {
super();
//ICON 图标图样,CARD 身份证,ATTORNEY 授权书ossKey,PASSPORT 护照,BUSINESS_LICENSE 营业执照,LEGAL_NOTICE 法律声明,SUPPLEMENT 补正图片的上传
this.aliOssFileType = { ICON: "ICON", CARD: "CARD", ATTORNEY: "ATTORNEY", PASSPORT: "PASSPORT", BUSINESS_LICENSE: "BUSINESS_LICENSE", LEGAL_NOTICE: "LEGAL_NOTICE", SUPPLEMENT: "SUPPLEMENT" };
}
//推送委托书模板邮件(阿里云)
async sendAliWtsEmail(pobj) {
var ab = pobj.actionBody;
if (!ab.email) {
return system.getResult(null, "邮箱地址不能为空");
}
if (!ab.type) {
return system.getResult(null, "邮件类型不能为空");
}
var mailCilent = system.getObject("util.mailClient");
var url = "";
if (ab.type == "1") {
var sendRes = await mailCilent.sendMsg(ab.email, "商标代理委托书", "see", "商标代理委托书", null, null, [
{ filename: '商标代理委托书', path: 'http://gsb-zc.oss-cn-beijing.aliyuncs.com/igirl_channel_tmwtsdemo001.doc' }
]);
return system.getResultSuccess(sendRes);
} else if (ab.type == "2") {
var sendRes = await mailCilent.sendMsg(ab.email, "阿里云商标代理委托书", "see", "阿里云商标代理委托书", null, null, [
{ filename: '阿里云商标代理委托书', path: 'http://gsb-zc.oss-cn-beijing.aliyuncs.com/tmwtu2020041811188516gcjhvjwts.docx' }
]);
return system.getResultSuccess(sendRes);
} else if (ab.type == "3") {
var sendRes = await mailCilent.sendMsg(ab.email, "阿里云声明文件", "see", "阿里云声明文件", null, null, [
{ filename: '阿里云声明文件', path: 'http://gsb-zc.oss-cn-beijing.aliyuncs.com/tm_smwj202004181626725onjdaliyun.doc' }
]);
return system.getResultSuccess(sendRes);
} else {
return system.getResult(null, "邮件类型错误");
}
}
async tmCreateApplicant(pobj) {//创建商标申请人信息
var verifyResult = await this.opAliyunRpcVerifyParam(pobj);
var apply = pobj.actionBody.delivery_content.apply;
var orderContact = pobj.actionBody.delivery_content.orderContact;
var orderInfo = pobj.actionBody.order_info;
var tmInfo = pobj.actionBody.delivery_content.tm;
if (!orderInfo) {
verifyResult = system.getResult(null, "orderInfo data is empty,100450");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (Number(orderInfo.orderStatus) != 2) {
verifyResult = system.getResult(null, "orderInfo status is error,100453");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (!apply) {
verifyResult = system.getResult(null, "apply data is empty,100455");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (apply.customerType != "ent" && !apply.identityCardPic) {
verifyResult = system.getResult(null, "identityCardPic can not be empty,100456");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (apply.customerType == "ent" && !apply.businessLicensePic) {
verifyResult = system.getResult(null, "businessLicensePic can not be empty,100457");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (!apply.gzwtsUrl) {
verifyResult = system.getResult(null, "gzwtsUrl can not be empty,100458");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (!tmInfo) {
verifyResult = system.getResult(null, "tmInfo data is empty,100460");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (!tmInfo.picUrl) {
verifyResult = system.getResult(null, "tm picUrl data is empty,100461");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
var rpcParam = verifyResult.data;
var idCardOssKey = "";
var businessLicenceOssKey = "";
var legalNoticeOssKey = "";
var picUrl = "";
var authorizationOssKey = "";
if (verifyResult.status == 0) {
if (apply.customerType != "ent" && apply.identityCardPic) {
idCardOssKey = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.CARD, apply.identityCardPic, rpcParam);
if (!idCardOssKey) {
verifyResult = system.getResult(null, "identityCardPic ali oss upload is error,100462");
}
}
if (apply.customerType == "ent" && apply.businessLicensePic) {
businessLicenceOssKey = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.BUSINESS_LICENSE, apply.businessLicensePic, rpcParam);
if (!businessLicenceOssKey) {
verifyResult = system.getResult(null, "businessLicensePic ali oss upload is error,100464");
}
}
if (verifyResult.status == 0) {
if (apply.smwjUrl) {
legalNoticeOssKey = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.LEGAL_NOTICE, apply.smwjUrl, rpcParam);
if (!legalNoticeOssKey) {
verifyResult = system.getResult(null, "smwjUrl ali oss upload is error,100466");
}
}
if (tmInfo.picUrl) {
picUrl = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.ICON, tmInfo.picUrl, rpcParam);
if (!picUrl) {
verifyResult = system.getResult(null, "picUrl ali oss upload is error,100467");
}
}
if (apply.gzwtsUrl) {
authorizationOssKey = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.ATTORNEY, apply.gzwtsUrl, rpcParam);
if (!authorizationOssKey) {
verifyResult = system.getResult(null, "gzwtsUrl ali oss upload is error,100468");
}
}
}
}
if (verifyResult.status != 0) {
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.NEWRPC);
}
var actionBody = {
ContactName: orderContact.contactName || "",//String 否 张三 联系人姓名
ContactNumber: orderContact.mobile || "",//String 否 18611112222 联系人电话
ContactEmail: orderContact.email || "",//String 否 test@alibaba.com 联系人邮箱
ContactZipcode: apply.zipCode || "",//String 否 100000 联系人邮编
ContactAddress: apply.applyAddr,//String 否 北京市朝阳区绿地中心A座 联系人地址
ApplicantType: apply.customerType && apply.customerType == "ent" ? 2 : 1,//Integer 否 1 申请人类型 1, "个人";2, "企业"
ApplicantRegion: 1,//Integer 否 1 阿拉伯数字 1, "中国大陆";2, "中国香港";3, "中国澳门";4, "中国台湾";5, "国外"
ApplicantName: apply.name,//String 否 张三 申请人名称
CardNumber: apply.customerType && apply.customerType == "ent" ? apply.code : apply.identityCardNo,//String 否 123456 证件号码
Address: apply.applyAddr,//String 否 北京市朝阳区绿地中心A座 申请人地址
IdCardOssKey: idCardOssKey,//String 否 1219541161213057/card/ujd8hthwfdk.png 身份证ossKey
BusinessLicenceOssKey: businessLicenceOssKey,//String 否 1219541161213057/business_license/gmzl6cvbk48.png 营业执照ossKey
LegalNoticeOssKey: legalNoticeOssKey//String 否 1219541161213057/legal_notice/mlnpsjmaed.jpg 法律声明ossKey
// Province: apply.,//String 否 安徽省 省份
// EName: apply.,//String 否 zhang san 英文名称
// EAddress: apply.,//String 否 bei jing shi 英文地址
// Country: apply.,//String 否 2096 国家
// PassportOssKey: apply.,//String 否 1219541161213057/pass_port/gmzl16cvbk48.png 护照ossKey
// AuthorizationOssKey: apply.,//String 否 1219541161213057/attorney/gy378w6btam.jpg 授权书ossKey--联系了开发,创建申请人时不用填写,在创建商标时填写
};
var params = {
action: rpcParam.action,
reqbody: actionBody,
rpcParam: rpcParam
}
var applicantResult = await this.opAliyunRpcReq(pobj, params);
if (applicantResult.status != 0) {
applicantResult = await this.opAliyunRpcReq(pobj, params);
if (applicantResult.status != 0) {
return await this.disposePushResultFail(pobj, applicantResult, "ali->tmCreateApplicant->applicantResult", this.pushlogFailType.NEWRPC);
}
}
actionBody.ApplicantId = applicantResult.data.ApplicantId;
actionBody.product_id = pobj.actionBody.product_info.id;
var addActionBody = {
appInfo: { uapp_id: pobj.appInfo.uapp_id, uapp_key: pobj.appInfo.uapp_key },
apply: actionBody,
tm: []//商标信息
}
var classificationsResult = system.getResultSuccess();
var tmCreateResult = system.getResultSuccess();
var addtmCreate = 0;
var self = this;
for (let i = 0; i < pobj.actionBody.delivery_content.nclones.length; i++) {
const nclonesItem = pobj.actionBody.delivery_content.nclones[i];
classificationsResult = await self.getClassifications(pobj, nclonesItem, rpcParam);
if (classificationsResult.status != 0) {
classificationsResult = await self.getClassifications(pobj, nclonesItem, rpcParam);
if (classificationsResult.status != 0) {
classificationsResult.msg = "获取阿里尼斯数据为空,100469->" + classificationsResult.msg;
pobj.dbNclonesItem = nclonesItem;
self.disposePushResultFail(pobj, classificationsResult, "ali->tmCreateApplicant->classificationsResult", self.pushlogFailType.FAILLOG);
break;
}//第二次调用失败则尼斯调用失败
}
tmCreateResult = await self.tmCreate(pobj, tmInfo, rpcParam, picUrl, authorizationOssKey, classificationsResult.data, applicantResult.data.ApplicantId);
if (tmCreateResult.status != 0) {
tmCreateResult = await self.tmCreate(pobj, tmInfo, rpcParam, picUrl, authorizationOssKey, classificationsResult.data, applicantResult.data.ApplicantId);
if (tmCreateResult.status != 0) {
tmCreateResult.msg = "创建阿里商标数据为空,10471->" + tmCreateResult.msg;
pobj.dbTmInfo = tmInfo;
self.disposePushResultFail(pobj, tmCreateResult, "ali->tmCreateApplicant->classificationsResult", self.pushlogFailType.FAILLOG);
break;
}//第二次调用失败则创建商标失败
}
//保存渠道申请人及商标数据
addtmCreate++;
tmCreateResult.data.tmInfo.Classifications = classificationsResult.data;
tmCreateResult.data.tmInfo.tbCode = nclonesItem.tbCode;
tmCreateResult.data.tmInfo.AuthorizationOssKey = authorizationOssKey;
tmCreateResult.data.tmInfo.OrderId = tmCreateResult.data.OrderId.tostring();
addActionBody.tm.push(tmCreateResult.data.tmInfo);
}
if (addtmCreate == pobj.actionBody.delivery_content.nclones.length) {
self.addAliChannelTmApplicant(pobj, addActionBody);
return await self.disposePushResult(pobj, tmCreateResult, "ali->tmCreateApplicant->tmCreateResult", this.pushlogFailType.NEWRPC);
}//更新数据库渠道商标
else {
tmCreateResult = system.getResult(null, "创建ali商标申请人信息出错,10472");
return await self.disposePushResultFail(pobj, tmCreateResult, "ali->tmCreateApplicant->tmCreateResult", self.pushlogFailType.NEWRPC);
}
}
async updateAliTmApplicant(pobj) {//更新商标申请人信息
var verifyResult = await this.opAliyunRpcVerifyParam(pobj);
var apply = pobj.actionBody.apply;
var dbApplyResult = await this.getAliChannelTmDelivery(pobj);
if (dbApplyResult.status != 0) {
if (dbApplyResult.status == -130) {
var getAddParamResult = await this.getOrderProductDeliveryByOrderNo(pobj);
if (getAddParamResult.status == 0) {
getAddParamResult.data.actionBody.orderNo = pobj.actionBody.orderNo;
getAddParamResult.data.appInfo = pobj.appInfo;
getAddParamResult.data.interface_params = pobj.interface_params;
return await this.tmCreateApplicant(getAddParamResult.data);
}
}//为空则进行创建提交到阿里
verifyResult = dbApplyResult + ",100540";
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (!apply.gzwtsUrl) {
verifyResult = system.getResult(null, "gzwtsUrl can not be empty,100541");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
var dbApply = dbApplyResult.data.apply;
var dbTm = dbApplyResult.data.tm;
if (!dbApply) {
verifyResult = system.getResult(null, "tmInfo data is empty,100542");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (!dbTm) {
verifyResult = system.getResult(null, "dbTm data is empty,100543");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (verifyResult.status != 0) {
return await this.disposePushResultFail(pobj, verifyResult, "ali->updateAliTmApplicant->verifyResult", this.pushlogFailType.NEWRPC);
}
var rpcParam = verifyResult.data;
var idCardOssKey = "";
var businessLicenceOssKey = "";
var legalNoticeOssKey = "";
var authorizationOssKey = "";
if (verifyResult.status == 0) {
if (apply.customerType != "ent" && apply.identityCardPic) {
idCardOssKey = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.CARD, apply.identityCardPic, rpcParam);
if (idCardOssKey && idCardOssKey != dbApply.IdCardOssKey) {
dbApply.IdCardOssKey = idCardOssKey;
}
}
if (apply.customerType == "ent" && apply.businessLicensePic) {
businessLicenceOssKey = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.BUSINESS_LICENSE, apply.businessLicensePic, rpcParam);
if (businessLicenceOssKey && businessLicenceOssKey != dbApply.BusinessLicenceOssKey) {
dbApply.BusinessLicenceOssKey = businessLicenceOssKey;
}
}
if (apply.smwjUrl) {
legalNoticeOssKey = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.LEGAL_NOTICE, apply.smwjUrl, rpcParam);
if (legalNoticeOssKey && legalNoticeOssKey != dbApply.LegalNoticeOssKey) {
dbApply.LegalNoticeOssKey = legalNoticeOssKey;
}
}
authorizationOssKey = await this.getAliOssFileUrl("trade-mark-user-upload", pobj, this.aliOssFileType.ATTORNEY, apply.gzwtsUrl, rpcParam);
if (!authorizationOssKey) {
authorizationOssKey = dbApply.AuthorizationOssKey;
}
}
if (apply.zipCode && apply.zipCode != dbApply.ContactZipcode) {
dbApply.ContactZipcode = apply.zipCode;
}
if (apply.applyAddr && apply.applyAddr != dbApply.ContactAddress) {
dbApply.ContactAddress = apply.applyAddr;
}
if (apply.name && apply.name != dbApply.ApplicantName) {
dbApply.ApplicantName = apply.name;
}
if (apply.applyAddr && apply.applyAddr != dbApply.Address) {
dbApply.Address = apply.applyAddr;
}
dbApply.CardNumber = apply.customerType && apply.customerType == "ent" ? apply.code : apply.identityCardNo;//String 否 123456 证件号码
dbApply.ApplicantType = apply.customerType && apply.customerType == "ent" ? 2 : 1;//Integer 否 1 申请人类型 1, "个人";2, "企业"
// ContactName: orderContact.contactName || "",//String 否 张三 联系人姓名
// ContactNumber: orderContact.mobile || "",//String 否 18611112222 联系人电话
// ContactEmail: orderContact.email || "",//String 否 test@alibaba.com 联系人邮箱
if (apply.customerType != "ent" && !dbApply.IdCardOssKey) {
verifyResult = system.getResult(null, "identityCardPic can not be empty,100544");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (apply.customerType == "ent" && !dbApply.BusinessLicenceOssKey) {
verifyResult = system.getResult(null, "businessLicensePic can not be empty,100545");
return await this.disposePushResultFail(pobj, verifyResult, "ali->tmCreateApplicant->verifyResult", this.pushlogFailType.FAILLOG);
}
if (dbApply.ApplicantId) {
delete dbApply["ApplicantId"];
}
var params = {
action: rpcParam.action,
reqbody: dbApply,
rpcParam: rpcParam
}
var applicantResult = await this.opAliyunRpcReq(pobj, params);
if (applicantResult.status != 0) {
applicantResult = await this.opAliyunRpcReq(pobj, params);
if (applicantResult.status != 0) {
applicantResult.msg = "创建阿里商标申请人出错,100546->" + applicantResult.msg;
return await this.disposePushResultFail(pobj, applicantResult, "ali->updateAliTmApplicant->CreateApplicant->applicantResult", this.pushlogFailType.NEWRPC);
}
}
//绑定商标的oss委托书信息
dbApply.ApplicantId = applicantResult.data.ApplicantId;
dbApplyResult.data.apply = dbApply;
//授权委托书
var self = this;
var updateTm = 0;
var opUpdateTmResult = system.getResultSuccess();
for (let j = 0; j < dbApplyResult.data.tm.length; j++) {
var tmItem = dbApplyResult.data.tm[j];
if (tmItem) {
var bizId = ""
if (!tmItem.BizId) {
var getDingTmStatusResult = await self.getAliTmInfo(pobj, tmItem.OrderId, rpcParam);
if (getDingTmStatusResult.status != 0) {
pobj.dbTm = tmItem;
getDingTmStatusResult.msg = "查询阿里商标状态出错,100547->" + getDingTmStatusResult.msg;
self.disposePushResultFail(pobj, getDingTmStatusResult, "ali->updateAliTmApplicant->getDingTmStatusResult", self.pushlogFailType.FAILLOG);
break;
}
if (getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].ApplicationStatus != 2) {
getDingTmStatusResult.status = -1;
getDingTmStatusResult = "更新商标申请人信息失败,阿里商标状态不是阿里云审核不通过,不能进行修改,100558->" + getDingTmStatusResult.msg;
self.disposePushResultFail(pobj, getDingTmStatusResult, "ali->updateAliTmApplicant->getDingTmStatusResult", self.pushlogFailType.FAILLOG);
continue;
}
bizId = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].BizId;
dbApplyResult.data.tm[j].BizId = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].BizId;
dbApplyResult.data.tm[j].ApplicationStatus = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].ApplicationStatus;
dbApplyResult.data.tm[j].Note = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].Note;
dbApplyResult.data.tm[j].TotalPrice = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].TotalPrice;
}//处理ali 商标状态查询
else {
bizId = tmItem.BizId;
}
//绑定商标申请人信息(绑定授权书Oss文件)
dbApplyResult.data.tm[j].AuthorizationOssKey = authorizationOssKey;
var bindAliTmApplicantGzwtsUrlResult = await this.bindAliTmApplicantGzwtsUrl(pobj, rpcParam, dbApply.ApplicantId, bizId, authorizationOssKey);
if (bindAliTmApplicantGzwtsUrlResult.status != 0) {
pobj.dbTm = tmItem;
bindAliTmApplicantGzwtsUrlResult.msg = "绑定授权书Oss文件出错,100559->" + bindAliTmApplicantGzwtsUrlResult.msg;
self.disposePushResultFail(pobj, bindAliTmApplicantGzwtsUrlResult, "ali->updateAliTmApplicant->bindAliTmApplicantGzwtsUrlResult", self.pushlogFailType.FAILLOG);
break;
}
updateTm++;
}
}
if (updateTm == dbTm.length) {
self.updateAliChannelTmApplicant(pobj, dbApplyResult.data);
return await self.disposePushResult(pobj, opUpdateTmResult, "ali->updateAliTmApplicant->opUpdateTmResult", self.pushlogFailType.NEWRPC);
}//更新数据库渠道商标
else {
opUpdateTmResult = system.getResult(null, "更新ali商标申请人信息出错,100548");
return await self.disposePushResultFail(pobj, opUpdateTmResult, "ali->updateAliTmApplicant->opUpdateTmResult", self.pushlogFailType.NEWRPC);
}
}
//--------------------------------------------------内部辅助方法-------------------start-----------------
async tmCreate(pobj, tmInfo, rpcParam, picUrl, authorizationOssKey, classifications, applicantId) {//创建商标申请信息-内部使用-配合tmCreateApplicant方法使用
// 商标类型形式: 3: 字, 4: 图, 5: 字图
var trademarkNameType = 1;
if (tmInfo.tmFormType == "4") {
trademarkNameType = 2;
}
if (tmInfo.tmFormType == "5") {
trademarkNameType = 3;
tmInfo.tmName = tmInfo.tmName + "及图";
}
var actionBody = {
AutoPay: true,
TrademarkNameType: trademarkNameType,//String 否 1 商标申请类型 1-文字 2-图形 3-文字及图形
TrademarkName: tmInfo.tmName,//String 是 pop-test 商标名称
TrademarkComment: tmInfo.tmName,//String 否 测试 商标说明
TrademarkIcon: picUrl,//String 是 1219541161213057/icon/gii9s4oyg8.jpg 商标对应图案的ossKey,有彩色图标请填写彩色图标,没有请填写黑白图标
BlackAndWhiteIcon: picUrl,//String 否 1219541161213057/icon/gii9s4oyg8.jpg
ApplicationType: 1,//Integer 否 1 固定值1
ApplicantId: applicantId,//String 否 111 申请人ID,通过申请人API创建申请人获得,或者通过申请人列表查询接口获得
Classifications: JSON.stringify(classifications),//String 是 {"38":"380005,380024,380050,380040,38020148,380004,38010007,38020149,38020141,380053"} 商标分类
AuthorizationOssKey: authorizationOssKey,//String 否 1219541161213057/attorney/9cgvhk2yd1l.JPG 授权书ossKey
Channel: "aliTmH5"//String 否 pop接口测试 通道,调用方填写,独立标志,用于区分来源-自己随便定义
};
var params = {
action: "CreateTrademarkApplication",
reqbody: actionBody,
rpcParam: rpcParam
}
var tmCreateReslut = await this.opAliyunRpcReq(pobj, params);
if (tmCreateReslut.status == 0) {
tmCreateReslut.data.tmInfo = actionBody;
}
return tmCreateReslut;
// return system.getResultSuccess({ "orderId": "204426185080629" });
}
async bindAliTmApplicantGzwtsUrl(pobj, rpcParam, applicantId, bizId, authorizationOssKey) {//绑定商标申请人信息-(绑定授权书Oss文件)---内部使用
if (!authorizationOssKey) {
return system.getResult(null, "gzwtsUrl param is empty,100503");
}
var params = {
action: "BindApplicant",
reqbody: { ApplicantId: applicantId, AuthorizationOssKey: authorizationOssKey, BizId: bizId },
rpcParam: rpcParam
}
//BizId-----报 BizId is mandatory for this action--BizId是此操作的强制命令
var result = await this.opAliyunRpcReq(pobj, params);
if (result.status != 0) {
result = await this.opAliyunRpcReq(pobj, params);
}
return result;
}
async getAliOssFileUrl(bucketName, pobj, fileType, selfFileUrl, rpcParam) {
var fileUrl = "";
var resultInfo = await this.getAliOssInfo(pobj, fileType, rpcParam);
if (resultInfo.status != 0) {
resultInfo = await this.getAliOssInfo(pobj, fileType, rpcParam);
if (resultInfo.status != 0) {
return fileUrl;
}
}
let lastHostLength = resultInfo.data.Host.lastIndexOf('/');
let lastFileLength = selfFileUrl.lastIndexOf('/');
var params = {
"ossurl": selfFileUrl,
"endpoint": "https:" + resultInfo.data.Host.substring(0, lastHostLength),
"accessKeyId": resultInfo.data.AccessId,
"bucketName": bucketName,//"trade-mark-user-upload",
"filedir": resultInfo.data.FileDir,
"objectName": selfFileUrl.substring(lastFileLength + 1, selfFileUrl.length),
"encodePolicy": resultInfo.data.EncodedPolicy,
"signature": resultInfo.data.Signature
}
var ossFileResult = await this.getAliossjavaFileUrl(pobj, params);
if (ossFileResult.status == 0) {
fileUrl = ossFileResult.data;
}
return fileUrl;
}
async getAliOssInfo(pobj, fileType, rpcParam) {
var params = {
action: "GenerateUploadFilePolicy",
reqbody: { FileType: fileType },
rpcParam: rpcParam
}
var resultInfo = await this.opAliyunRpcReq(pobj, params);
return resultInfo;
}
async getClassifications(pobj, nclones, rpcParam) {
var self = this;
var aliNclThreesList = {};
var aliNclTwosList = [];
const nclOneItem = nclones;
var nclThreeList = nclOneItem.nclThree;
var getAliThreeList = [];
for (let j = 0; j < nclThreeList.length; j++) {
const nclThreeItem = nclThreeList[j];
var aliThreeList = null;
var aliNclTwosListIndex = aliNclTwosList.findIndex(f => f.pcode === nclThreeItem.pcode);
if (aliNclTwosListIndex < 0) {
var aliNclDataResult = await self.getAliNclInfo(pobj, nclThreeItem.pcode, rpcParam);
if (aliNclDataResult.status == 0) {
aliThreeList = aliNclDataResult.data;
aliNclTwosList.push({
pcode: nclThreeItem.pcode,
nclThree: aliThreeList
});
}
}//获取ali 的信息
else {
aliThreeList = aliNclTwosList[aliNclTwosListIndex].nclThree;
}
if (!aliThreeList) {
continue;
}
for (let k = 0; k < aliThreeList.length; k++) {
const aliNclThree = aliThreeList[k];
if (aliNclThree.ClassificationName == nclThreeItem.name) {
getAliThreeList.push(aliNclThree.ClassificationCode);
break;
}
}
}//一个大类下小项组装完毕
if (getAliThreeList.length == 0) {
return system.getResult(null, "获取阿里尼斯数据失败,100530");
}
aliNclThreesList[nclOneItem.code] = getAliThreeList.join(',');
return system.getResultSuccess(aliNclThreesList)
}
async getAliNclInfo(pobj, parentCode, rpcParam) {
var params = {
action: "ListClassifications",
reqbody: { ParentCode: parentCode },
rpcParam: rpcParam
}
var nclInfoResult = await this.opAliyunRpcReq(pobj, params);
if (nclInfoResult.status != 0 || !nclInfoResult.data || nclInfoResult.data.TotalCount == 0) {
return system.getResult(null, "ali ncl is empty,100465")
}
return system.getResultSuccess(nclInfoResult.data.Classifications.Classification);
}
async getAliTmInfo(pobj, orderId, rpcParam) {//通过阿里订单号获取阿里商标申请信息--内部调用
var tmStatusParams = {
action: "ListTrademarkApplications",
reqbody: { OrderId: orderId },
rpcParam: rpcParam
}
var getDingTmStatusResult = await this.opAliyunRpcReq(pobj, tmStatusParams);
if (getDingTmStatusResult.status != 0) {
getDingTmStatusResult = await this.opAliyunRpcReq(pobj, tmStatusParams);
}
return getDingTmStatusResult;
}
//-------------------------操作渠道商标信息
async addAliChannelTmApplicant(pobj, actionBody) {//新增ali渠道商标交付信息
var tmpPobj = {
actionType: "addAliChannelTmApplicant",
appInfo: pobj.appInfo,
actionBody: { deliveryData: actionBody, orderNo: pobj.actionBody.orderNo }
}
var reqUrl = settings.centerOrderUrl() + "opaction/opOrder/springBoard";
var result = await this.restPostUrl(tmpPobj, reqUrl);
if (result.status != 0) {
return await this.disposePushResultFail(tmpPobj, result, "ali->tmCreateApplicant->addChannelTmApplicantResult->新增ali渠道商标交付信息失败", this.pushlogFailType.FAILLOG);
}
return result;
}
async updateAliChannelTmApplicant(pobj, actionBody) {//新增ali渠道商标交付信息
var tmpPobj = {
actionType: "updateAliChannelTm",
appInfo: pobj.appInfo,
actionBody: { deliveryData: actionBody, orderNo: pobj.actionBody.orderNo }
}
var reqUrl = settings.centerOrderUrl() + "opaction/opOrder/springBoard";
var result = await this.restPostUrl(tmpPobj, reqUrl);
if (result.status != 0) {
return await this.disposePushResultFail(tmpPobj, result, "ali->tmCreateApplicant->addChannelTmApplicantResult->新增ali渠道商标交付信息失败", this.pushlogFailType.FAILLOG);
}
return result;
}
async getAliChannelTmDelivery(pobj) {//查询ali渠道商标交付信息
var tmpPobj = {
actionType: "getAliChannelTmDelivery",
appInfo: pobj.appInfo,
actionBody: { orderNo: pobj.actionBody.orderNo }
}
var reqUrl = settings.centerOrderUrl() + "opaction/opOrder/springBoard";
var result = await this.restPostUrl(tmpPobj, reqUrl);
return result;
}
async getAllAliChannelTmDelivery(pobj) {//查询ali渠道商标交付信息-内部方法
var tmpPobj = {
actionType: "getAllAliChannelTmDelivery",
appInfo: {},
actionBody: {}
}
var reqUrl = settings.centerOrderUrl() + "opaction/opOrder/springBoard";
var result = await this.restPostUrl(tmpPobj, reqUrl);
return result;
}
async getOrderProductDeliveryByOrderNo(pobj) {//获取订单产品及交付信息--用于钉钉商标推送
var tmpPobj = {
actionType: "getOrderProductDeliveryByOrderNo",
appInfo: pobj.appInfo,
actionBody: { orderNo: pobj.actionBody.orderNo }
}
var reqUrl = settings.centerOrderUrl() + "opaction/opOrder/springBoard";
var result = await this.restPostUrl(tmpPobj, reqUrl);
return result;
}
//--------------------------------------------------内部辅助方法-------------------end-----------------
//--------------------------------------------------供外部调用方法-----------------start---------------
async opAliDingInterfaceManage(pobj) {//操作阿里钉钉接口管理---外部调用
var verifyResult = await this.opAliyunRpcVerifyParam(pobj);
if (verifyResult.status != 0) {
return await this.disposePushResultFail(pobj, verifyResult, "ali->opAliDingInterfaceManage->verifyResult", this.pushlogFailType.FAILLOG);
}
var rpcParam = verifyResult.data;
var params = {
action: pobj.action,
reqbody: pobj.actionBody,
rpcParam: rpcParam
}
var result = await this.opAliyunRpcReq(pobj, params);
if (result.status != 0) {
result = await this.opAliyunRpcReq(pobj, params);
}
return result;
}
async taskAliTmUpdate() {//操作阿里商标更新任务---外部调用
var pobj = { actionBody: {} };
var dbAliAllTmListResult = await this.getAllAliChannelTmDelivery(pobj);
if (dbAliAllTmListResult.status != 0) {
dbAliAllTmListResult.msg = "操作阿里商标更新任务,查询的数据为空,100550->" + dbAliAllTmListResult.msg;
return await this.disposePushResultFail(pobj, dbAliAllTmListResult, "ali->opAliTmUpdateTask->dbAliAllTmListResult", this.pushlogFailType.FAILLOG);
}
var opResult = system.getResultSuccess();
var rpcParam = null;
var self = this;
for (let index = 0; index < dbAliAllTmListResult.data.length; index++) {
const element = dbAliAllTmListResult.data[index];
if (element) {
if (opResult.status != 0) {
break;
}
pobj.actionBody.orderNo = element.sourceOrderNo;
if (!rpcParam) {
pobj.appInfo = element.deliveryContent.appInfo;
var pushInterfaceResult = await self.getOpInterfaceByProductId(element.deliveryContent.appInfo, element.deliveryContent.product_id);
if (pushInterfaceResult.status != 0) {
pushInterfaceResult.msg = "操作阿里商标更新任务,查询的产品接口数据为空,100553->" + pushInterfaceResult.msg;
opResult = pushInterfaceResult;
self.disposePushResultFail(pobj, pushInterfaceResult, "ali->opAliTmUpdateTask->pushInterfaceResult", self.pushlogFailType.FAILLOG);
break;
}
var interface_list_temp = pushInterfaceResult.data.filter(f => f.op_type == "createAliTmApply");
if (!interface_list_temp || interface_list_temp.length == 0) {
opResult = system.getResult(null, "暂无【createAliTmApply】的推送配置,100555");
self.disposePushResultFail(pobj, opResult, "ali->opAliTmUpdateTask->interface_list_temp", self.pushlogFailType.FAILLOG);
break;
}
rpcParam = JSON.parse(interface_list_temp[0].params);
}
var tmUpdate = 0;
for (let i = 0; i < element.deliveryContent.tm.length; i++) {
const tmItem = element.deliveryContent.tm[i];
if (tmItem) {
var getDingTmStatusResult = await self.getAliTmInfo(pobj, tmItem.OrderId, rpcParam);
if (getDingTmStatusResult.status != 0 || getDingTmStatusResult.data.TotalCount == 0) {
getDingTmStatusResult.msg = "操作阿里商标更新任务,查询的阿里商标数据错误,100557->" + getDingTmStatusResult.msg;
opResult = getDingTmStatusResult;
self.disposePushResultFail(pobj, getDingTmStatusResult, "ali->opAliTmUpdateTask->getDingTmStatusResult", self.pushlogFailType.FAILLOG);
break;
}
var noteStr = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].Note;
if (noteStr) {
if (noteStr.lastIndexOf('}') < 0) {
element.deliveryContent.tm[i].Note = noteStr;
}
else {
var opNoteInfo = JSON.parse(noteStr);
if (opNoteInfo.txt) {
var txtList = opNoteInfo.txt.split('\n');
var txtStr = "";
for (let l = 0; l < txtList.length; l++) {
const temptxtStr = txtList[l];
if (temptxtStr) {
txtStr = txtStr + temptxtStr;
}
}
element.deliveryContent.tm[i].Note = txtStr;
}
}
}
element.deliveryContent.tm[i].BizId = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].BizId;
element.deliveryContent.tm[i].ApplicationStatus = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].ApplicationStatus;
element.deliveryContent.tm[i].TotalPrice = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].TotalPrice;
if (getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].SupplementStatus) {
element.deliveryContent.tm[i].SupplementStatus = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].SupplementStatus;
if (getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].SupplementId) {
element.deliveryContent.tm[i].SupplementId = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].SupplementId;
}
}
tmUpdate++;
//异步操作启服通商标状态更新
self.opSelfTmStatusUpdate(pobj, getDingTmStatusResult, element.deliveryContent.tm[i].Note, tmItem.tbCode, element.sourceOrderNo);
}
}
if (tmUpdate > 0) {
self.updateAliChannelTmApplicant(pobj, element.deliveryContent);
}
}
}
return opResult;
}
async opSelfTmStatusUpdate(pobj, getDingTmStatusResult, opNotes, tbCode, orderNo) {//异步操作启服通商标状态更新
var aliStatusResult = await this.aliStatusInfo(getDingTmStatusResult);
if (aliStatusResult.status != 0) {
aliStatusResult.msg = "异步操作启服通商标状态更新->阿里状态码表匹配失败->" + aliStatusResult.msg;
this.disposePushResultFail(pobj, aliStatusResult, "ali->opSelfTmStatusUpdate->aliStatusResult", this.pushlogFailType.FAILLOG);
return aliStatusResult;
}
var actionBody = {
orderNo: orderNo,
tbCode: tbCode,
tmStatus: aliStatusResult.data
}
if (opNotes) {
actionBody.opNotes = opNotes;
}
var reqUrl = settings.centerOrderUrl() + "notifyaction/internalCallsNotify/updateTmStatus";
var opResult = await this.execPostUrl(actionBody, reqUrl);
if (opResult.status != 0) {
opResult.msg = "异步操作启服通商标状态更新失败->" + opResult.msg;
this.disposePushResultFail(pobj, opResult, "ali->opSelfTmStatusUpdate->opResult", this.pushlogFailType.FAILLOG);
}
return opResult;
}
async aliStatusInfo(getDingTmStatusResult) {
// "1": "商标注册申请书", "2": "商标注册申请补正通知书", "3": "商标注册申请受理通知书", "4": "商标注册申请不予受理通知书", "5": "商标注册同日申请补送使用证据通知书",
// "6": "商标注册同日申请协商通知书商标注册同日申请抽签通知书", "7": "商标驳回通知书", "8": "商标部分驳回通知书", "9": "商标注册申请初步审定公告通知书",
// "10": "商标异议答辩通知书", "11": "异议裁定书", "12": "纸质版商标注册证", "13": "电子版商标注册证",
// "16": "已失败退款", "200": "已补正", "201": "超时未补正", "202": "补正已递交到商标局",
// "dsccl": "待上传材料", "dqrfa": "待确认方案", "fabtg": "方案不通过", "dsh": "待审核", "shbtg": "审核不通过", "ddj": "待递交", "ydj": "已递交", "djyc": "递交异常"
var self = this;
var aliStatus = system.getResult(null, "阿里状态码表对照有误!");
var supplementStatus = getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].SupplementStatus;
if (supplementStatus && supplementStatus > 2) {
switch (pobj.supplementStatus) {
case 2://需要补正,fileUrl为商标局补正文件
aliStatus.status = 0;
aliStatus.data = "2";
break;
case 4://已补正
aliStatus.status = 0;
aliStatus.data = "200";
break;
case 5://超时未补正
aliStatus.status = 0;
aliStatus.data = "201";
break;
case 6://补正已递交到商标局
aliStatus.status = 0;
aliStatus.data = "202";
break;
default:
break;
}
} else {
switch (getDingTmStatusResult.data.TrademarkApplications.TrademarkApplication[0].ApplicationStatus) {
case 1://待阿里审核(已支付)
aliStatus.status = 0;
aliStatus.data = "dsh";
break;
case 2://阿里云审不通过
aliStatus.status = 0;
aliStatus.data = "shbtg";
break;
case 3://阿里审核通过
aliStatus.status = 0;
aliStatus.data = "ddj";
break;
case 4://已失败退款(阿里)
aliStatus.status = 0;
aliStatus.data = "16";
break;
case 20://-已提交到商标局
aliStatus.status = 0;
aliStatus.data = "ydj";
break;
case 21://商标局已接受(⽂件:商标局回执)
aliStatus.status = 0;
aliStatus.data = "1";
break;
case 22://商标局不予受理 (⽂件:不予受理通知书)
aliStatus.status = 0;
aliStatus.data = "4";
break;
case 23://商标局受理通过(⽂件:受理通知书)
aliStatus.status = 0;
aliStatus.data = "3";
break;
case 29://-商标局部分驳回 (⽂件:部分驳回通知书)
aliStatus.status = 0;
aliStatus.data = "8";
break;
case 30://商标局驳回 (⽂件:驳回通知书)
aliStatus.status = 0;
aliStatus.data = "7";
break;
case 31://商标局审核通过 (⽂件:审核通过通知书)----初步审定公告
aliStatus.status = 0;
aliStatus.data = "9";
break;
case 99://申请成功结束 (⽂件:商标证通知书)---已下发商标注册证
aliStatus.status = 0;
aliStatus.data = "13";
break;
default:
break;
}
}
return aliStatus;
}
//--------------------------------------------------供外部调用方法-----------------end---------------
}
module.exports = UtilsTmAliyunService;
var system = require("../../../system");
var settings = require("../../../../config/settings");
const AppServiceBase = require("../../app.base");
const axios = require('axios')
const md5 = require('md5')
var AlipaySdk = require('alipay-sdk').default;
var WXPay = require('wx-pay');
var xml2js = require('xml2js');
//产品操作类
class UtilsUcommuneService extends AppServiceBase {
constructor() {
super();
this.centerOrderUrl = settings.centerOrderUrl();
this.centerChannelUrl = settings.centerChannelUrl();
this.redisClient = system.getObject("util.redisClient");
this.utilsAuthSve = system.getObject("service.utilsSve.utilsAuthSve");
this.paySecret = settings.paySecret()
}
//--------------------------------优客工厂相关接口-start-----------------------------------------------------
/**
* 根据优客token获取用户信息,生成userPin返回前端
* @param {*} pobj
* @param {*} actionBody userToken 为优客工厂的userToken
*/
async getUserInfo(pobj, actionBody) {
if (!actionBody.userToken) {
return system.getResult(null, "actionBody.token can not be empty,100410");
}
var url = settings.ucommuneUrl() + "third/getUserInfo"; // 调用优客工场接口 获取用户信息
// 拼接规则curl -k -H 'Content-type: application/json' -H 'authorization:{token}' -X POST {url} pobj作为发生错误时记录日志用
let result = await this.restPostWithHAuthorizationUrl(pobj, actionBody.userToken, url);
if (result.retCode == 0) { // 0成功 1失败
pobj.actionType = "getLoginByUserName";
pobj.actionBody.channelUserId = result.data.nationalCode + "-" + result.data.mobile; // 即:86_18512345678
pobj.actionBody.userName = result.data.mobile;
pobj.actionBody.nickName = result.data.name;
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);
if (tmpOpResult.status != 0 && tmpOpResult.status != 2060) {
return tmpOpResult;
}
return system.getResultSuccess({ userpin: tmpOpResult.data.userpin ? tmpOpResult.data.userpin : pobj.actionBody.userpin })
} else {
// 获取用户信息失败
return system.getResult(null, result);
}
}
/**
* 优客调取订单列表用
* @param {*} pobj
* @param {*} actionBody
*/
async ucommuneGetOrderList(pobj, actionBody) {
// ucommuneGetOrderList
var reqUrl = this.centerOrderUrl + "action/ucommuneOrder/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
console.log("-------------ucommuneGetOrderList result start---------------")
console.log(result)
console.log("-------------ucommuneGetOrderList result end---------------")
return result;
}
/**
* addOrder后进入支付页面获取支付金额 addorder返回totalsum 此接口可以不调用
* @param {*} pobj
* @param {*} actionBody orderNo orderIndo订单号
*/
async orderTotalSum(pobj, actionBody) {
pobj.actionType = "getOrderDetails" // 获取订单详细信息 totalsum为总金额,返回给前端
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
/**
* 点击确认支付后返回拼接字符串
* @param {*} pobj
* @param {*} actionBody orderNo orderIndo订单号
*/
async orderConfirm(pobj, actionBody) {
await this.orderConfirmValidate(pobj, actionBody);
pobj.actionType = "getPayOrderInfo" // 获取订单详细信息 用来拼接字符串 totalsum为总金额,返回给前端
var reqUrl = settings.centerOrderUrl() + "action/order/springBoard";
var orderResult = await this.restPostUrl(pobj, reqUrl);
if (orderResult.status != 0) {
// return system.getResult(null, "Failed to get orderResult or order has been paid 100470");
return system.getResult(null, orderResult);
} else {
if (actionBody.payWay == 1) { // 支付宝
try {
let creatPayRequrl = "https://yf-api.gongsibao.com/pay/v1/aliPay/getPrePayIdAliPay";
let params = {
"app": "ukgc",//固定
'body': orderResult.data.orderProduct.channelItemName,
"key": "a1519e2eab53dfb909e4c32a86b2ea2b",//固定
"notifyUrl": this.centerChannelUrl + "orderNotify/aliPayNotify",
"outTradeNo": orderResult.data.receiptVoucher.sourceOrderNo + "-" + pobj.appInfo.uapp_id.toString() + "-" + orderResult.data.orderProduct.id.toString(),
"productCode": orderResult.data.orderProduct.channelItemCode,
"subject": orderResult.data.orderProduct.channelItemName,
"timeoutExpress": '10m',
"totalAmount": orderResult.data.receiptVoucher.totalSum,
}
var sign = JSON.stringify(params);
// sign += "ab53dfb909e4c32a"
sign += this.paySecret
sign = md5(sign).toUpperCase()
params.sign = sign
let res = await axios.post(creatPayRequrl, params)
if (res.status == 200 && res.data.code == 200) {
await this.cacheManager["TlPayLocker"].init(orderResult.data.receiptVoucher.sourceOrderNo);
return system.getResultSuccess(res.data)
}
return system.getResult(null, res.data);
} catch (e) {
this.logCtl.error({
optitle: "alipay生成支付串---error异常",
op: "center-app/app/base/service/impl/utilsSve/utilsUcommuneSve.js/orderConfirm",
content: "参数=" + JSON.stringify(orderResult) + ",error:" + e.stack,
clientIp: pobj.client_ip || ""
});
return system.getResultFail(-200, e.stack);
}
// 之前写的 调用wx/alipay的方法,后续用不到会删掉
// let sign = await PayUtil.getSign(null,"1")
// let params = {
// "partner" : "2019022163300183" ,
// "seller_id" : "353494220@qq.com" ,
// // "out_trade_no" : orderResult.data.channelOrderNo ,
// "out_trade_no": orderResult.data.receiptVoucher.sourceOrderNo + "-" + pobj.appInfo.uapp_id.toString() + "-" + orderResult.data.orderProduct.id.toString(),
// "subject" : orderResult.data.orderProduct.channelItemName ,
// "body" : orderResult.data.orderProduct.channelItemName ,
// "total_fee" : Number(orderResult.data.receiptVoucher.totalSum) ,
// "service" : "alipay.trade.app.pay" ,
// "payment_type" : "1" ,
// "_input_charset" : "utf-8" ,
// "it_b_pay" : "10m" ,
// "notify_url" : this.centerChannelUrl + "orderNotify/aliPayNotify" ,
// "enable_paymethod" : "balance,moneyFund,coupon,pcredit,pcreditpayInstallment,creditCard,creditCardExpress,creditCardCartoon,credit_group,debitCardExpress,mcard,pcard,promotion" ,
// "sign" : sign ,
// "sign_type" : "RSA2",
// }
// let str = "";
// for(var k in params) {
// console.log(k)
// str += k + "=\"" + params[k] + "\"&";
// }
// str = str.substr(0,str.length-1)
// console.log(str)
// return system.getResultSuccess(str);
// let alipayAgentInformation = await this.redisClient.get("alipayAgentInformation")
// if(!alipayAgentInformation) {
// console.log("11111")
// let res = await axios.post('https://yf-api.gongsibao.com/pay/v1/getPayConfig',{
// "app": "ukgc", //应用名称 固定
// "key": "a1519e2eab53dfb909e4c32a86b2ea2b", //应用 key 固定
// "paymentType": "1", //支付方式 1 支付宝 3 微信
// "sign":"D6C4DE28278BC3AAF1C5B22E834F3850"
// })
// if(res.status == 200) {
// alipayAgentInformation = res.data
// await this.redisClient.set('alipayAgentInformation',JSON.stringify(res.data))
// console.log("缓存alipayAgentInformation")
// } else {
// return system.getResult(null, "actionBody.token can not be empty,100410");
// }
// }
// let agentInformation = JSON.parse(alipayAgentInformation)
// let alipay = new AlipaySdk({
// appId: agentInformation.appid,
// privateKey: agentInformation.publicKey,
// // alipayPublicKey: agentInformation.publicKey,
// });
// const params = {
// bizContent: {
// out_trade_no: '12312312321212', // 商户网站唯一订单号
// subject: encodeURIComponent('苹果电脑'),//商品的标题/交易标题/订单标题/订单关键字等
// total_amount: 0.2,//实际付款金额
// body: encodeURIComponent('Mac Pro1'),//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body
// product_code: 'QUICK_MSECURITY_PAY',
// notifyUrl:this.centerChannelUrl + "orderNotify/aliPayNotify"
// }
// }
// let alipayResponse = await alipay.exec('alipay.trade.app.pay', params);
// console.log(alipayResponse)
// return system.getResultSuccess(alipayResponse)
// var newobj = JSON.stringify(obj).replace(/\s*/g,"");
// newobj += "ab53dfb909e4c32a"
// newobj = md5(newobj).toUpperCase()
// obj.sign = newobj
// let res = await axios.post(reqUrl, obj)
// console.log(res);
// const params = {
// bizContent: {
// out_trade_no: '12312312321212', // 商户网站唯一订单号
// subject: encodeURIComponent('苹果电脑'),//商品的标题/交易标题/订单标题/订单关键字等
// total_amount: 0.2,//实际付款金额
// body: encodeURIComponent('Mac Pro1'),//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body
// product_code: 'QUICK_MSECURITY_PAY',
// notifyUrl:this.centerChannelUrl + "orderNotify/aliPayNotify"
// }
// }
// let alipayResponse = await this.alipay.exec('alipay.trade.app.pay', params);
// console.log(alipayResponse);
}
if (actionBody.payWay == 3) { // 微信
await this.cacheManager["TlPayLocker"].init(orderResult.data.receiptVoucher.sourceOrderNo);
let creatPayRequrl = "https://yf-api.gongsibao.com/pay/v1/createSign";
let params = {
"app": "ukgc",
"key": "a1519e2eab53dfb909e4c32a86b2ea2b",
"payParam": [
{
"name": "appid",
// 后期修改
// "value":"1"
"value": "wx6f3ebe44defe336a"
},
{
"name": "mch_id",
// "value":"1"
"value": "1232813602"
},
{
"name": "device_info",
"value": "1000"
},
{
"name": "body",
"value": "商标"
// "value":orderResult.data.orderProduct.channelItemName
},
{
"name": "nonce_str",
// "value":"ibuaiVcKdpRxkhJA"
"value": WxPayUtil.generateNonceString()
},
{
"name": "openid",
"value": "o7kgSs_2cuJxyBoIEWMwRUPfobLg"
},
{
"name": "notify_url",
"value": "http://"
// "value":this.centerChannelUrl + "orderNotify/wxPayNotify",
},
{
"name": "out_trade_no",
// "value": "OT37202006221758koyn-37-69"
"value": orderResult.data.receiptVoucher.sourceOrderNo + "-" + pobj.appInfo.uapp_id.toString() + "-" + orderResult.data.orderProduct.id.toString()
},
{
"name": "sign_type",
"value": "MD5"
},
{
"name": "total_fee",
"value": "399"
// "value":orderResult.data.receiptVoucher.totalSum,
},
// {
// "name":"spbill_create_ip",
// // "value":'1'
// "Value": '192.168.2.210',
// },
{
"name": "trade_type",
"value": "JSAPI"
}
],
"paymentType": "3"
}
// let params = {
// "app": "ukgc",//固定
// 'body': orderResult.data.orderProduct.channelItemName,
// "key": "a1519e2eab53dfb909e4c32a86b2ea2b",//固定
// "notifyUrl" : this.centerChannelUrl + "orderNotify/aliPayNotify",
// "outTradeNo": orderResult.data.receiptVoucher.sourceOrderNo + "-" + pobj.appInfo.uapp_id.toString() + "-" + orderResult.data.orderProduct.id.toString(),
// "totalFee" : orderResult.data.receiptVoucher.totalSum,
// "spbillCreateIp":'192.168.2.210',
// "tradeType":"JSAPI"
// }
var sign = JSON.stringify(params);
// sign += "ab53dfb909e4c32a"
sign += this.paySecret
sign = md5(sign).toUpperCase()
params.sign = sign
console.log(params)
let res = await axios.post(creatPayRequrl, params)
if (res.status == 200 && res.data.code == 200) {
await this.cacheManager["TlPayLocker"].init(orderResult.data.receiptVoucher.sourceOrderNo);
return system.getResultSuccess(res.data)
}
return system.getResult(null, res.data);
// 之前写的 调用wx/alipay的方法,后续用不到会删掉
// let sign = await PayUtil.getSign('wx6f3ebe44defe336a',"3")
// let wxpayJson = {
// "appid": "wx05b764a334ca0472",
// "noncestr": "fdbe012e2e11314b96402b32c0df26b7",
// "package": "Sign=WXPay",
// "partnerid": "1525494731",
// "prepayid": "wx221007210600552805dae6511340418300",
// "sign": "7BACA717B040DEEA7A8940CEC94A3318",
// "timestamp": "1592791641"
// }
// let wxAgentInformation = await this.redisClient.get("wxAgentInformation")
// if(!wxAgentInformation) {
// console.log("11111")
// let res = await axios.post('https://yf-api.gongsibao.com/pay/v1/getPayConfig',{
// "app": "ukgc", //应用名称 固定
// "key": "a1519e2eab53dfb909e4c32a86b2ea2b", //应用 key 固定
// "paymentType": "3", //支付方式 1 支付宝 3 微信
// "sign":"23F763A515AEF5DFC0A2BC04CC21463F"
// })
// if(res.status == 200) {
// wxAgentInformation = res.data
// await this.redisClient.set('wxAgentInformation',JSON.stringify(res.data))
// console.log("缓存wxAgentInformation")
// } else {
// return system.getResult(null, "actionBody.token can not be empty,100410");
// }
// }
// let agentInformation = JSON.parse(wxAgentInformation)
// var unifiedorderUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
// const opts = {
// out_trade_no: '12312312321212', // 商户网站唯一订单号
// total_fee: 0.2,//实际付款金额
// body: encodeURIComponent('Mac Pro1'),//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body
// spbill_create_ip: this.centerChannelUrl,
// notify_url:this.centerChannelUrl + "orderNotify/aliPayNotify",
// trade_type: 'NATIVE',
// attach: ""
// }
// opts.nonce_str = opts.nonce_str || WxPayUtil.generateNonceString();
// opts.appid = agentInformation.appid;
// opts.mch_id = agentInformation.mchid;
// opts.device_info = "WEB";
// opts.sign = WxPayUtil.sign(opts);
// var postXml = WxPayUtil.buildXML({ xml: opts });
// axios.post(unifiedorderUrl, postXml).then(function(result) {
// // console.log("微信付款单请求result.data",result.data);
// WxPayUtil.parseXML(result.data,function(json){
// func(json)
// });
// }).catch(function(error){
// console.log("微信生成付款单错误",error);
// })
// let wepay = new WXPay({
// appId: agentInformation.appid,
// mch_id: agentInformation.mchid,
// });
// let res = await wepay.createUnifiedOrder({
// body: '扫码支付测试',
// out_trade_no: '20140703'+Math.random().toString().substr(2, 10),
// total_fee: 1,
// spbill_create_ip: '192.168.2.210',
// notify_url: 'http://wxpay_notify_url',
// trade_type: 'NATIVE',
// product_id: '1234567890'
// },function(err,res) {
// console.log(err);
// console.log(res);
// })
// console.log(res)
// let res = await axios.post(reqUrl,obj)
// console.log(res);
// console.log(this.WXpay)
// var wxpay = this.WXpay;
// var out_trade_no='20160203'+Math.random().toString().substr(2, 10);
// wxpay.createUnifiedOrder({
// body: '充值兑换宝币',
// out_trade_no: out_trade_no,
// total_fee: 1,
// spbill_create_ip: '192.168.2.210',
// notify_url: 'http://www.gongsibao.com',
// trade_type: 'NATIVE',
// product_id: '1234567890'
// },function(err, res) {
// console.log(res);
// return system.getResult(res)
// })
}
}
}
/**
* 点击确认支付后返回拼接字符串 orderConfirm 的验证数据方法
* @param {*} pobj
* @param {*} actionBody orderNo orderIndo订单号
*/
async orderCheck(pobj, actionBody) {
pobj.actionType = "getOrderDetails" // 获取订单详细信息 totalsum为总金额,返回给前端
var reqUrl = this.centerOrderUrl + "action/order/springBoard";
var result = await this.restPostUrl(pobj, reqUrl);
return result;
}
/**
* 点击确认支付后返回拼接字符串 orderConfirm 的验证数据方法
* @param {*} pobj
* @param {*} actionBody orderNo orderIndo订单号
*/
async orderConfirmValidate(pobj, actionBody) {
if (!actionBody.orderNo) { // 订单号
return system.getResult(null, "actionBody.orderNo can not be empty,100430");
}
if (!actionBody.payWay) { // 支付方式 1 支付宝 3微信
return system.getResult(null, "actionBody.payWay can not be empty,100440");
}
if (actionBody.payWay != 1 || actionBody.payWay != 3) { // payway 非1非3
return system.getResult(null, "actionBody.payWay is eoor values,100450");
}
}
/**
* 订单详情
* @param {*} pobj
* @param {*} actionBody orderNo orderIndo订单号
*/
async ucommuneGetOrderDetail(pobj, actionBody) {
return system.getResultSuccess()
}
//--------------------------------优客工厂相关接口--end----------------------------------------------------
}
// 之前写的 调用wx/alipay的方法,后续用不到会删掉
PayUtil = {
getSign: async function (appid, paymentType) {
let requrl = "https://yf-api.gongsibao.com/pay/v1/createSign"
let params = {
"app": "ukgc",
"key": "a1519e2eab53dfb909e4c32a86b2ea2b",
"payParam": [
{
"name": "app_id",
"value": appid || "2019022163300183"
},
{
"name": "charset",
"value": "UTF-8"
},
{
"name": "method",
"value": "alipay.trade.app.pay"
},
{
"name": "sign_type",
"value": "RSA2"
},
{
"name": "timestamp",
"value": Date.now().toString()
},
{
"name": "version",
"value": "1.0"
}
],
"paymentType": paymentType,
}
var signstr = JSON.stringify(params);
signstr += "ab53dfb909e4c32a"
signstr = md5(signstr).toUpperCase()
params.sign = signstr
let res = await axios.post(requrl, params)
if (res.data.code = 200) {
return res.data.value
}
return system.getResult(null, "Failed to get sign, 100460");
},
}
module.exports = UtilsUcommuneService;
WxPayUtil = {
generateNonceString: function (length) {
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var maxPos = chars.length;
var noceStr = "";
for (var i = 0; i < (length || 32); i++) {
noceStr += chars.charAt(Math.floor(Math.random() * maxPos));
}
return noceStr;
}
}
\ No newline at end of file
const system = require("../system");
const moment = require('moment')
const settings = require("../../config/settings");
const md5 = require("MD5");
class ServiceBase {
constructor(gname, daoName) {
this.db = system.getObject("db.common.connection").getCon();
this.cacheManager = system.getObject("db.common.cacheManager");
this.daoName = daoName;
this.dao = system.getObject("db." + gname + "." + daoName);
this.restS = system.getObject("util.restClient");
}
/**
* 验证签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
*/
async verifySign(params, app_key) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
if (!params.sign) {
return system.getResult(null, "请求参数sign为空");
}
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey] && !(params[tKey] instanceof Array)) {
signArr.push(tKey + "=" + params[tKey]);
}
}
if (signArr.length == 0) {
return system.getResult(null, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
if (params.sign != resultTmpSign) {
return system.getResult(null, "返回值签名验证失败");
}
return system.getResultSuccess();
}
/**
* 创建签名
* @param {*} params 要验证的参数
* @param {*} app_key 应用的校验key
*/
async createSign(params, app_key) {
if (!params) {
return system.getResultFail(-310, "请求参数为空");
}
var signArr = [];
var keys = Object.keys(params).sort();
if (keys.length == 0) {
return system.getResultFail(-330, "请求参数信息为空");
}
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey] && !(params[tKey] instanceof Array)) {
signArr.push(tKey + "=" + params[tKey]);
}
}
if (signArr.length == 0) {
return system.getResultFail(-350, "请求参数组装签名参数信息为空");
}
var resultSignStr = signArr.join("&") + "&key=" + app_key;
var resultTmpSign = md5(resultSignStr).toUpperCase();
return system.getResultSuccess(resultTmpSign);
}
/**
* 验证参数信息不能为空
* @param {*} params 验证的参数
* @param {*} verifyParamsCount 需要验证参数的数量,如至少验证3个,则传入3
* @param {*} columnList 需要过滤掉的验证参数列表,格式:[]
*/
async verifyParams(params, verifyParamsCount, columnList) {
if (!params) {
return system.getResult(null, "请求参数为空");
}
if (!columnList) {
columnList = [];
}
var keys = Object.keys(params);
if (keys.length == 0) {
return system.getResult(null, "请求参数信息为空");
}
if (keys.length < verifyParamsCount) {
return system.getResult(null, "请求参数不完整");
}
var tResult = system.getResultSuccess();
for (let k = 0; k < keys.length; k++) {
const tKeyValue = keys[k];
if (columnList.length == 0 || columnList.indexOf(tKeyValue) < 0) {
if (!tKeyValue) {
tResult = system.getResult(null, k + "参数不能为空");
break;
}
}//白名单为空或不在白名单中,则需要验证不能为空
}
return tResult;
}
async apiCallWithAk(url, params) {
var acckapp = await this.cacheManager["ApiAccessKeyCache"].cache(settings.appKey);
var acck = acckapp.accessKey;
//按照访问token
var restResult = await this.restS.execPostWithAK(params, url, acck);
if (restResult) {
if (restResult.status == 0) {
var resultRtn = restResult.data;
return resultRtn;
} else {
await this.cacheManager["ApiAccessKeyCache"].invalidate(settings.appKey);
return null;
}
}
return null;
}
// async apiCallWithAkNoWait(url,params){
// var acckapp=await this.cacheManager["ApiAccessKeyCache"].cache(settings.appKey);
// var acck=acckapp.accessKey;
// //按照访问token
// var restResult=await this.restS.execPostWithAK(params,url,acck);
// if(restResult){
// if(restResult.status==0){
// var resultRtn=restResult.data;
// return resultRtn;
// }else{
// await this.cacheManager["ApiAccessKeyCache"].invalidate(settings.appKey);
// return null;
// }
// }
// return null;
// }
static getDaoName(ClassObj) {
return ClassObj["name"].substring(0, ClassObj["name"].lastIndexOf("Service")).toLowerCase() + "Dao";
}
async findAndCountAll(obj) {
const apps = await this.dao.findAndCountAll(obj);
return apps;
}
async refQuery(qobj) {
return this.dao.refQuery(qobj);
}
async bulkDeleteByWhere(whereParam, t) {
return await this.dao.bulkDeleteByWhere(whereParam, t);
}
async bulkDelete(ids) {
var en = await this.dao.bulkDelete(ids);
return en;
}
async delete(qobj) {
return this.dao.delete(qobj);
}
async create(qobj) {
return this.dao.create(qobj);
}
async update(qobj, tm = null) {
return this.dao.update(qobj, tm);
}
async updateByWhere(setObj, whereObj, t) {
return this.dao.updateByWhere(setObj, whereObj, t);
}
async customExecAddOrPutSql(sql, paras = null) {
return this.dao.customExecAddOrPutSql(sql, paras);
}
async customQuery(sql, paras, t) {
return this.dao.customQuery(sql, paras, t);
}
async findCount(whereObj = null) {
return this.dao.findCount(whereObj);
}
async findSum(fieldName, whereObj = null) {
return this.dao.findSum(fieldName, whereObj);
}
async getPageList(pageIndex, pageSize, whereObj = null, orderObj = null, attributesObj = null, includeObj = null) {
return this.dao.getPageList(pageIndex, pageSize, whereObj, orderObj, attributesObj, includeObj);
}
async findOne(obj) {
return this.dao.findOne(obj);
}
async findById(oid) {
return this.dao.findById(oid);
}
/*
返回20位业务订单号
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;
}
/*
len:返回长度
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('');
}
}
module.exports = ServiceBase;
var sha1 = require('sha1'),
events = require('events'),
emitter = new events.EventEmitter(),
xml2js = require('xml2js');
// 微信类
var Weixin = function(path) {
this.data = '';
this.msgType = 'text';
this.fromUserName = '';
this.toUserName = '';
this.funcFlag = 0;
this.path=path;
}
// 验证
Weixin.prototype.checkSignature = function(req) {
// 获取校验参数
this.signature = req.query.signature,
this.timestamp = req.query.timestamp,
this.nonce = req.query.nonce,
this.echostr = req.query.echostr;
// 按照字典排序
var array = [this.token, this.timestamp, this.nonce];
array.sort();
// 连接
var str = sha1(array.join(""));
// 对比签名
if(str == this.signature) {
return true;
} else {
return false;
}
}
// ------------------ 监听 ------------------------
// 监听文本消息
Weixin.prototype.textMsg = function(callback) {
emitter.on("weixinTextMsg", callback);
return this;
}
// 监听图片消息
Weixin.prototype.imageMsg = function(callback) {
emitter.on("weixinImageMsg", callback);
return this;
}
// 监听地理位置消息
Weixin.prototype.locationMsg = function(callback) {
emitter.on("weixinLocationMsg", callback);
return this;
}
// 监听链接消息
Weixin.prototype.urlMsg = function(callback) {
emitter.on("weixinUrlMsg", callback);
return this;
}
// 监听事件
Weixin.prototype.eventMsg = function(callback) {
emitter.on("weixinEventMsg", callback);
return this;
}
// ----------------- 消息处理 -----------------------
/*
* 文本消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType text
* Content 文本消息内容
* MsgId 消息id,64位整型
*/
Weixin.prototype.parseTextMsg = function() {
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"content" : this.data.Content[0],
"msgId" : this.data.MsgId[0],
}
emitter.emit("weixinTextMsg", msg);
return this;
}
/*
* 图片消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType image
* Content 图片链接
* MsgId 消息id,64位整型
*/
Weixin.prototype.parseImageMsg = function() {
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"picUrl" : this.data.PicUrl[0],
"msgId" : this.data.MsgId[0],
}
emitter.emit("weixinImageMsg", msg);
return this;
}
/*
* 地理位置消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType location
* Location_X x
* Location_Y y
* Scale 地图缩放大小
* Label 位置信息
* MsgId 消息id,64位整型
*/
Weixin.prototype.parseLocationMsg = function(data) {
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"locationX" : this.data.Location_X[0],
"locationY" : this.data.Location_Y[0],
"scale" : this.data.Scale[0],
"label" : this.data.Label[0],
"msgId" : this.data.MsgId[0],
}
emitter.emit("weixinLocationMsg", msg);
return this;
}
/*
* 链接消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType link
* Title 消息标题
* Description 消息描述
* Url 消息链接
* MsgId 消息id,64位整型
*/
Weixin.prototype.parseLinkMsg = function() {
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"title" : this.data.Title[0],
"description" : this.data.Description[0],
"url" : this.data.Url[0],
"msgId" : this.data.MsgId[0],
}
emitter.emit("weixinUrlMsg", msg);
return this;
}
/*
* 事件消息格式:
* ToUserName 开发者微信号
* FromUserName 发送方帐号(一个OpenID)
* CreateTime 消息创建时间 (整型)
* MsgType event
* Event 事件类型,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件)
* EventKey 事件KEY值,与自定义菜单接口中KEY值对应
*/
Weixin.prototype.parseEventMsg = function() {
var eventKey = '';
if (this.data.EventKey) {
eventKey = this.data.EventKey[0];
}
var msg = {
"toUserName" : this.data.ToUserName[0],
"fromUserName" : this.data.FromUserName[0],
"createTime" : this.data.CreateTime[0],
"msgType" : this.data.MsgType[0],
"event" : this.data.Event[0],
"eventKey" : eventKey,
"appk":this.path,
}
emitter.emit("weixinEventMsg", msg);
return this;
}
// --------------------- 消息返回 -------------------------
// 返回文字信息
Weixin.prototype.sendTextMsg = function(msg) {
var time = Math.round(new Date().getTime() / 1000);
var funcFlag = msg.funcFlag ? msg.funcFlag : this.funcFlag;
var output = "" +
"<xml>" +
"<ToUserName><![CDATA[" + msg.toUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + msg.fromUserName + "]]></FromUserName>" +
"<CreateTime>" + time + "</CreateTime>" +
"<MsgType><![CDATA[" + msg.msgType + "]]></MsgType>" +
"<Content><![CDATA[" + msg.content + "]]></Content>" +
"<FuncFlag>" + funcFlag + "</FuncFlag>" +
"</xml>";
this.res.type('xml');
this.res.send(output);
return this;
}
// 返回音乐信息
Weixin.prototype.sendMusicMsg = function(msg) {
var time = Math.round(new Date().getTime() / 1000);
var funcFlag = msg.funcFlag ? msg.funcFlag : this.funcFlag;
var output = "" +
"<xml>" +
"<ToUserName><![CDATA[" + msg.toUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + msg.fromUserName + "]]></FromUserName>" +
"<CreateTime>" + time + "</CreateTime>" +
"<MsgType><![CDATA[" + msg.msgType + "]]></MsgType>" +
"<Music>" +
"<Title><![CDATA[" + msg.title + "]]></Title>" +
"<Description><![CDATA[" + msg.description + "DESCRIPTION]]></Description>" +
"<MusicUrl><![CDATA[" + msg.musicUrl + "]]></MusicUrl>" +
"<HQMusicUrl><![CDATA[" + msg.HQMusicUrl + "]]></HQMusicUrl>" +
"</Music>" +
"<FuncFlag>" + funcFlag + "</FuncFlag>" +
"</xml>";
this.res.type('xml');
this.res.send(output);
return this;
}
// 返回图文信息
Weixin.prototype.sendNewsMsg = function(msg) {
var time = Math.round(new Date().getTime() / 1000);
//
var articlesStr = "";
for (var i = 0; i < msg.articles.length; i++)
{
articlesStr += "<item>" +
"<Title><![CDATA[" + msg.articles[i].title + "]]></Title>" +
"<Description><![CDATA[" + msg.articles[i].description + "]]></Description>" +
"<PicUrl><![CDATA[" + msg.articles[i].picUrl + "]]></PicUrl>" +
"<Url><![CDATA[" + msg.articles[i].url + "]]></Url>" +
"</item>";
}
var funcFlag = msg.funcFlag ? msg.funcFlag : this.funcFlag;
var output = "" +
"<xml>" +
"<ToUserName><![CDATA[" + msg.toUserName + "]]></ToUserName>" +
"<FromUserName><![CDATA[" + msg.fromUserName + "]]></FromUserName>" +
"<CreateTime>" + time + "</CreateTime>" +
"<MsgType><![CDATA[" + msg.msgType + "]]></MsgType>" +
"<ArticleCount>" + msg.articles.length + "</ArticleCount>" +
"<Articles>" + articlesStr + "</Articles>" +
"<FuncFlag>" + funcFlag + "</FuncFlag>" +
"</xml>";
this.res.type('xml');
this.res.send(output);
return this;
}
// ------------ 主逻辑 -----------------
// 解析
Weixin.prototype.parse = function() {
if(this.data){
this.msgType = this.data.MsgType[0] ? this.data.MsgType[0] : "text";
switch(this.msgType) {
case 'text' :
this.parseTextMsg();
break;
case 'image' :
this.parseImageMsg();
break;
case 'location' :
this.parseLocationMsg();
break;
case 'link' :
this.parseLinkMsg();
break;
case 'event' :
this.parseEventMsg();
break;
}
}
}
// 发送信息
Weixin.prototype.sendMsg = function(msg) {
switch(msg.msgType) {
case 'text' :
this.sendTextMsg(msg);
break;
case 'music' :
this.sendMusicMsg(msg);
break;
case 'news' :
this.sendNewsMsg(msg);
break;
}
}
// Loop
Weixin.prototype.loop = function(req, res) {
// 保存res
this.res = res;
var self = this;
// 获取XML内容
var buf = '';
req.setEncoding('utf8');
req.on('data', function(chunk) {
buf += chunk;
});
// 内容接收完毕
req.on('end', function() {
xml2js.parseString(buf, function(err, json) {
if (err) {
err.status = 400;
} else {
req.body = json;
}
});
if(req.body){
self.data = req.body.xml;
}
self.parse();
});
}
module.exports = Weixin;
var fs = require("fs");
var objsettings = require("../config/objsettings");
var settings = require("../config/settings");
class System {
static declare(ns) {
var ar = ns.split('.');
var root = System;
for (var i = 0, len = ar.length; i < len; ++i) {
var n = ar[i];
if (!root[n]) {
root[n] = {};
root = root[n];
} else {
root = root[n];
}
}
}
static register(key, ClassObj) {
if (System.objTable[key] != null) {
throw new Error("相同key的对象已经存在");
} else {
let obj = new ClassObj();
System.objTable[key] = obj;
}
return System.objTable[key];
}
static getResult(data, opmsg = "操作成功", req) {
return {
status: !data ? -1 : 0,
msg: opmsg,
data: data || null,
bizmsg: req && req.session && req.session.bizmsg ? req.session.bizmsg : "empty"
};
}
static getErrResult2(errmsg) {
return this.getResult2(null, null, null, errmsg);
}
static getResult2(data, req, okmsg = "操作成功", errmsg = "操作失败") {
var result = {
status: 0,
msg: okmsg,
data: data,
};
if (req && req.session && req.session.bizmsg) {
result.bizmsg = req.session.bizmsg;
req.session.bizmsg = null;
} else {
result.bizmsg = "empty";
}
if (!data) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
static getResult3(data, req, okmsg = "操作成功", errmsg = "操作失败") {
var total = data.total;
data = data.hits;
var sources = [];
data.forEach(function (d) {
sources.push(d._source);
})
var result = {
status: 0,
msg: okmsg,
total: total,
data: sources,
};
if (req && req.session && req.session.bizmsg) {
result.bizmsg = req.session.bizmsg;
req.session.bizmsg = null;
} else {
result.bizmsg = "empty";
}
if (!data) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
static getResult4(j, req, okmsg = "操作成功", errmsg = "操作失败") {
var aggs = j.aggregations;
var codes_count = aggs.ncl_one_codes_count;
var bucketlist = codes_count.buckets;
var bucklist = [];
bucketlist.forEach(function (d) {
bucklist.push(d);
})
var data = j.hits;
var total = data.total;
var hit = data.hits;
var sources = [];
hit.forEach(function (d) {
sources.push(d._source);
})
var result = {
status: 0,
msg: okmsg,
total: total,
data: sources,
buckets: bucklist,
};
if (req && req.session && req.session.bizmsg) {
result.bizmsg = req.session.bizmsg;
req.session.bizmsg = null;
} else {
result.bizmsg = "empty";
}
if (!hit) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
static getResultjuhe4(j, req, okmsg = "操作成功", errmsg = "操作失败") {
var aggs = j.aggregations;
var codes_count = aggs.ncl_one_codes_count;
var bucketlist = codes_count.buckets;
var bucklist = [];
bucketlist.forEach(function (d) {
bucklist.push(d);
})
var result = {
status: 0,
msg: okmsg,
buckets: bucklist,
};
if (!bucklist) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
static getResultjuhetwo(j, req, okmsg = "操作成功", errmsg = "操作失败") {
var aggs = j.aggregations;
var notice_count = aggs.notice_count;
var bucketlist = notice_count.buckets;
var bucklist = [];
bucketlist.forEach(function (d) {
var notice_issue = d.key;
var date = d.date_max.value;
var data = {
notice_issue: notice_issue,
date: date
}
bucklist.push(data);
})
var result = {
status: 0,
msg: okmsg,
buckets: bucklist,
};
if (!bucklist) {
result.status = -1;
result.msg = errmsg;
}
return result;
}
/**
* 请求返回成功
* @param {*} data 操作成功返回的数据
* @param {*} okmsg 操作成功的描述
*/
static getResultSuccess(data, okmsg = "success") {
return {
status: 0,
msg: okmsg,
data: data || null,
};
}
/**
* 请求返回成功 自定义
* @param {*} data 操作成功返回的数据
* @param {*} okmsg 操作成功的描述
*/
static getResultCustomSuccess(data, okmsg = "success") {
return {
status: 0,
msg: okmsg,
...data
};
}
/**
* 请求返回失败
* @param {*} status 操作失败状态,默认为-1
* @param {*} errmsg 操作失败的描述,默认为fail
* @param {*} data 操作失败返回的数据
*/
static getResultFail(status = -1, errmsg = "fail", data = null) {
return {
status: status,
msg: errmsg,
data: data,
};
}
static getObject(objpath) {
var pathArray = objpath.split(".");
var packageName = pathArray[0];
var groupName = pathArray[1];
var filename = pathArray[2];
var classpath = "";
if (filename) {
classpath = objsettings[packageName] + "/" + groupName;
} else {
classpath = objsettings[packageName];
filename = groupName;
}
var objabspath = classpath + "/" + filename + ".js";
if (System.objTable[objabspath] != null) {
console.log(objabspath, "get cached obj....");
return System.objTable[objabspath];
} else {
console.log("no cached...");
var ClassObj = require(objabspath);
return System.register(objabspath, ClassObj);
}
}
static getUiConfig(appid) {
var configPath = settings.basepath + "/app/base/db/metadata/" + appid + "/index.js";
if (settings.env == "dev") {
delete require.cache[configPath];
}
var configValue = require(configPath);
return configValue;
}
static getUiConfig2(appid) {
var configPath = settings.basepath + "/app/base/db/metadata/index.js";
// if(settings.env=="dev"){
// console.log("delete "+configPath+"cache config");
// delete require.cache[configPath];
// }
delete require.cache[configPath];
var configValue = require(configPath);
return configValue[appid];
}
static get_client_ip(req) {
var ip = req.headers['x-forwarded-for'] ||
req.ip ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket && req.connection.socket.remoteAddress) || '';
var x = ip.match(/(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/);
if (x) {
return x[0];
} else {
return "localhost";
}
};
static y2f(y) {
if (!y) {
return 0;
}
return (Number(y) * 100).toFixed(0);
}
static f2y(f) {
if (!f) {
return 0;
}
return parseFloat((Number(f) / 100).toFixed(2));
}
static f2y4list(list, fields, prev) {
if (!list || list.length == 0 || !fields || fields.length == 0) {
return;
}
prev = prev || "";
for (var item of list) {
for (var f of fields) {
var v = item[f];
if (v) {
try {
item[f + "_y"] = prev + parseFloat((Number(v) / 100).toFixed(2));
} catch (error) {
console.log(error);
}
}
}
}
}
}
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
System.exTime = 4 * 3600;//缓存过期时间,4小时
System.objTable = {};
//缓存失效
System.cacheInvalidation = -88;
System.noLogin = -99;
//访问token失效,请重新获取
System.tokenFail = 1000;
//appKey授权有误
System.appKeyError = 1100;
//应用处于待审核等待启用状态
System.waitAuditApp = 1110;
//渠道应用处于待审核等待启用状态
System.waitAuditSelfApp = 1120;
//用户处于待审核等待启用状态
System.getUserInfoFail = 1140;
//访问appid失效,请重新获取
System.appidFail = 1200;
//签名验证失败,请重新获取
System.signFail = 1300;
//获取访问token失败
System.getAppInfoFail = 1130;
//已经存在信息
System.existData = 1400;
module.exports = System;
\ No newline at end of file
const Client = require('aliyun-api-gateway').Client;
var RPCClient = require('@alicloud/pop-core').RPCClient;
const system = require("../system");
class aliyunClient {
constructor() {
this.pushlogSve = system.getObject("service.common.pushlogSve");
}
getAliClient() {
return new RPCClient({
accessKeyId: "LTAI1pJs7KQizBe2",//对应的aliuid 是 30039057
accessKeySecret: "MMNibebAPqR9AnX5YWHnSL2tHMSIoL",
endpoint: "https://companyreg.aliyuncs.com",
apiVersion: "2020-03-06"
});
}
async post(aliReqUrl, key, secret, actionBody) {
const client = new Client(key, secret);
var param = {
data: actionBody,
timeout: 20000,
headers: {
accept: 'application/json'
}
};
console.log(JSON.stringify(param), "______________峰擎---阿里云参数_______");
var result = await client.post(aliReqUrl, param);
console.log(JSON.stringify(result), "______________峰擎---阿里云返回结果_______");
return result;
}
//阿里接口
async reqbyget(obj, cbk) {
var action = obj.action;
var reqbody = obj.reqbody;
try {
var reqAliclient = this.getAliClient();// { ... this.aliclient };
if (obj.apiVersion) {
reqAliclient.apiVersion = obj.apiVersion;
}
var res = await reqAliclient.request(action, reqbody, {
timeout: 3000, // default 3000 ms
formatAction: true, // default true, format the action to Action
formatParams: true, // default true, format the parameter name to first letter upper case
method: 'GET', // set the http method, default is GET
headers: {}, // set the http request headers
});
this.pushlogSve.createDb({
op: "old-reqbyget",
content: JSON.stringify(obj),//推送的参数信息
resultInfo: JSON.stringify(res),
returnType: '1',
logLevel: '1',
opTitle: "old-reqbyget推送阿里信息返回成功"
});
return system.getResultSuccess(res);
} catch (e) {
this.pushlogSve.createFailLogDb({
appid: obj.appInfo ? obj.appInfo.uapp_id || "" : "",
appkey: obj.appInfo ? obj.appInfo.uapp_key || "" : "",
requestId: obj.requestId || "",
content: JSON.stringify(obj),//推送的参数信息
resultInfo: "error:" + JSON.stringify(e),
clientIp: obj.clientIp || "",
failType: 1,
opTitle: "old-reqbyget推送阿里信息返回异常",
pushNumber: obj.pushNumber || 1
});
return system.getResultFail(-200, "出现异常,error:" + e.stack);
}
}
async reqCustomByGet(obj, cbk) {
var action = obj.action;
var reqbody = obj.reqbody;
var rpcParam = obj.rpcParam;
var reqAliclient = this.getAliClient();// { ...self.aliclient };
if (rpcParam.accessKeyId) {
reqAliclient.accessKeyId = rpcParam.accessKeyId;
}
if (rpcParam.accessKeySecret) {
reqAliclient.accessKeySecret = rpcParam.accessKeySecret;
}
if (rpcParam.endpoint) {
reqAliclient.endpoint = rpcParam.endpoint;
}
if (rpcParam.apiVersion) {
reqAliclient.apiVersion = rpcParam.apiVersion;
}
var res = await reqAliclient.request(action, reqbody, {
timeout: 3000, // default 3000 ms
formatAction: true, // default true, format the action to Action
formatParams: true, // default true, format the parameter name to first letter upper case
method: 'GET', // set the http method, default is GET
headers: {}, // set the http request headers
});
console.log(action, "action...........");
console.log(reqbody, "reqbody...........");
return system.getResultSuccess(res);
}
// async reqCustomByPost(obj, cbk) {
// var action = obj.action;
// var reqbody = obj.reqbody;
// var rpcParam = obj.rpcParam;
// var reqAliclient = { ... this.aliclient };
// if (rpcParam.accessKeyId) {
// reqAliclient.accessKeyId = rpcParam.accessKeyId;
// }
// if (rpcParam.accessKeySecret) {
// reqAliclient.accessKeySecret = rpcParam.accessKeySecret;
// }
// if (rpcParam.endpoint) {
// reqAliclient.endpoint = rpcParam.endpoint;
// }
// if (rpcParam.apiVersion) {
// reqAliclient.apiVersion = rpcParam.apiVersion;
// }
// var res = await reqAliclient.request(action, reqbody, {
// timeout: 3000, // default 3000 ms
// formatAction: true, // default true, format the action to Action
// formatParams: true, // default true, format the parameter name to first letter upper case
// method: 'POST', // set the http method, default is GET
// headers: {}, // set the http request headers
// });
// return system.getResultSuccess(res);
// }
}
module.exports = aliyunClient;
const system = require("../../system");
const uuidv4 = require('uuid/v4');
const md5 = require("MD5");
class PushUtils {
constructor() {
this.logCtl = system.getObject("service.common.oplogSve");
this.execClient = system.getObject("util.execClient");
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
async getCachePushItemUrl(merchant_id) {
var cacheManager = system.getObject("db.common.cacheManager");
return await cacheManager["MerchantPushUrlCache"].cache(merchant_id, null, 3600);
}
/**
* 多次推送到第三方数据
* @param {*} reqUrl 请求推送的url
* @param {*} params 推送的参数
*/
async pushMany(reqUrl, params) {
try {
params.requestid = this.getUUID();
var rtn = this.execClient.execPost(params, reqUrl);
//TODO:可以做多次推送,规则待定
// var result = JSON.parse(rtn.stdout);
// if (result && result.code == 200) {
// var resultdata = result.data;
// return { code: 1, msg: "success" };
// } else {
// return { code: -1, msg: "err" };
// }
} catch (e) {
this.logCtl.error({
optitle: "多次推送到第三方数据异常error",
op: url + ";params=" + JSON.stringify(params) + ";reqid=" + params.requestid,
content: e.stack,
clientIp: pobj.clientIp
});
}
}
async createSign(params, appId) {
var cacheManager = system.getObject("db.common.cacheManager");
var appInfo = await cacheManager["ApiAppKeyCheckCache"].cache(appId, null, 3000);
var signArr = [];
var keys = Object.keys(params).sort();
for (let k = 0; k < keys.length; k++) {
const tKey = keys[k];
if (tKey != "sign" && params[tKey]) {
signArr.push(tKey + "=" + params[tKey]);
}
}
var resultSignStr = signArr.join("&") + "&key=" + appInfo.appSecret;
return md5(resultSignStr).toUpperCase();
}
}
module.exports = PushUtils;
var excel = require('exceljs');
const system=require("../system");
const uuidv4 = require('uuid/v4');
const fs=require("fs");
class ExcelClient {
constructor() {
this.columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
this.ossClient=system.getObject("util.ossClient");
this.filedownloadDao = system.getObject("db.filedownloadDao");
}
async download(params) {
var self = this;
var title = params.title || "";
var code = params.code || uuidv4();
var fileName = params.fileName || code + ".xlsx";
var filePath = params.filePath || "/tmp/" + fileName;
var rows = params.rows || [];
var user = params.user || {};
var wb = new excel.Workbook();
wb.properties.date1904 = true;
var sheet = wb.addWorksheet("sheet1");
var headers = rows[0];
console.log(headers, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2 headers");
if(title) {
sheet.addRow([title]);
sheet.getCell("A1").font = {
    name: '微软雅黑',
    family: 4,
    size: 12,
    bold: true
};
sheet.getCell('A1').alignment = { vertical: 'middle', horizontal: 'center' };
var colkey = 0;
if(headers.length > 0) {
colkey = headers.length - 1;
}
var endColumn = this.columns[colkey] || "A";
sheet.mergeCells("A1:" + endColumn + "1");
}
for(var r of rows) {
sheet.addRow(r);
}
wb.xlsx.writeFile(filePath).then(async function(d) {
var rtn = await self.ossClient.upfile(fileName, filePath);
fs.unlink(filePath,function(err){});
var obj = {
user_id : user.id || 0,
userName : user.userName || "",
code : code,
fileName : fileName,
filePath : rtn.url || "",
isDownload : false,
}
var obj = await self.filedownloadDao.create(obj);
});
}
}
module.exports = ExcelClient;
var childproc = require('child_process');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const uuidv4 = require('uuid/v4');
class ExecClient {
constructor() {
this.cmdPostPattern = "curl --user admines:adminGSBes. -k -H 'Content-type: application/json' -d '{data}' {url}";
this.cmdGetPattern = "curl -G -X GET '{url}'";
this.cmdPushDataPostPattern = "curl -k -H 'Content-type: application/json' -H 'token:{tk}' -H 'request-id:{requestId}' -d '{data}' {url}";
this.cmdFeishuGetPattern = "curl -X GET -k -H 'Content-Type: application/json' -H 'Authorization: {Authorization}' -d '{data}' {url} ";
this.cmdFeishuPostPattern = "curl -k -H 'Content-type: application/json' -H 'Authorization: {Authorization}' -d '{data}' {url}";
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
async exec(cmd) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
const { stdout, stderr } = await exec(cmd);
return { stdout, stderr };
}
async exec2(cmd) {
return exec(cmd, { encoding: "base64" });
}
FetchPostCmd(subData, url) {
var data = JSON.stringify(subData);
var cmd = this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
console.log(cmd);
return cmd;
}
FetchFeishuPostCmd(subData, url) {
var data = JSON.stringify(subData);
var cmd = this.cmdFeishuPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{Authorization\}/g, "Bearer "+subData.token);
console.log(cmd);
return cmd;
}
FetchPushDataPostCmd(subData, url, token, requestId) {
var requestId = requestId || this.getUUID();
var data = JSON.stringify(subData);
var cmd = this.cmdPushDataPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{tk\}/g, token).replace(/\{requestId\}/g, requestId);
console.log(cmd);
return cmd;
}
async execPost(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec(cmd);
return result;
}
async execFeishuPost(subData, url) {
let cmd = this.FetchFeishuPostCmd(subData, url);
var result = await this.exec(cmd);
return result;
}
async execPushDataPost(subData, url, token, requestId) {
let cmd = this.FetchPushDataPostCmd(subData, url, token, requestId);
var result = await this.exec(cmd);
return result;
}
async execPost2(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
var result = await this.exec2(cmd);
return result;
}
FetchGetCmd(subData, url) {
var cmd = this.cmdGetPattern.replace(
/\{data\}/g, subData).replace(/\{url\}/g, url);
console.log(cmd);
return cmd;
}
//飞书小程序GET请求
FetchFeishuGetCmd(subData, url) {
var cmd = this.cmdFeishuGetPattern.replace(
/\{data\}/g, subData).replace(/\{url\}/g, url).replace(/\{Authorization\}/g, "Bearer "+subData.user_access_token);
console.log(cmd);
return cmd;
}
async execFeishuGet(subData, url) {
let cmd = this.FetchFeishuGetCmd(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execGet(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execGet2(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
console.log(cmd);
var result = await this.exec2(cmd);
return result;
}
async execGetTimeOut(subData, url, timeOut = 5000) {
//timeOut,单位是毫秒
let cmd = this.FetchGetCmd(subData, url);
var options = {
timeout: timeOut,
};
const { stdout, stderr } = await exec(cmd, options);
return { stdout, stderr };
}
}
module.exports = ExecClient;
// var x=new RestClient();
// x.execGet("","http://www.163.com").then(function(r){
// console.log(r.stdout);
// console.log(r.stderr);
// });
// var log4js = require('log4js');
var settings=require("../../config/settings");
class LogClient{
constructor(){
// log4js.configure(settings.basepath+"/app/config/log4js.json");
// this.logerApp=log4js.getLogger("app");
// this.logerHttp=log4js.getLogger("http");
}
}
module.exports=LogClient;
var nodemailer = require('nodemailer');
class MailClient{
constructor(){
this.mailer=nodemailer.createTransport({
host:"smtp.mxhichina.com",
service: 'aliyun',
secureConnection: true,
port: 465,
auth: {
user: 'czhd_ip@gongsibao.com',
pass: 'HANtang2018'
}
});
}
//嵌入图片
// var mailOptions = {
// from: 'bsspirit ',
// to: 'xxxxx@163.com',
// subject: 'Embedded Image',
// html: '<b>Hello world ✔</b><br/>Embedded image: <img src="cid:00000001"/>',
// attachments: [{
// filename: '01.png',
// path: './img/r-book1.png',
// cid: '00000001'
// }]
// }
//发送邮件
// var mailOptions = {
// from: 'bsspirit ',
// to: 'xxxxx@163.com',
// subject: 'Hello ✔',
// text: 'Hello world ✔',
// html: '<b>Hello world ✔</b>' // html body
// attachments: [
// {
// filename: 'text0.txt',
// content: 'hello world!'
// },
// {
// filename: 'text1.txt',
// path: './attach/text1.txt'
// }
// ]
// };
async sendMsg(to,title,text,html,cc,bcc,atts){
var options={
from: "czhd_ip@gongsibao.com", // sender address
to: to, // list of receivers
cc: cc||'',
bcc: bcc||'',
subject: title, // Subject line
text: text || '', // plaintext body
html: html || '',// html body
attachments: atts||[
]
};
var self=this;
var p=new Promise(function(resv,rej){
self.mailer.sendMail(options, function(error, info){
if(error){
return rej(error);
}else{
return resv(info.response);
}
});
});
return p;
}
}
module.exports=MailClient;
// var d=new MailClient();
// d.sendMsg("zhuangbing@gongsibao.com","test","see","hello txt",null,null,[
// {
// filename: 'text1.jpg',
// path: 'https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_3369154019592833720182216128337mmexport1540195729827.jpg'
// }
// ]).then(r=>{
// console.log(r);
// }).catch(e=>{
// console.log(e);
// });
var co = require('co');
var OSS = require('ali-oss');
const request = require("request");
const fs = require("fs");
class OSSClient {
constructor() {
this.client = new OSS({
endpoint: 'https://oss-cn-beijing.aliyuncs.com',
accessKeyId: 'LTAI4GC5tSKvqsH2hMqj6pvd',
accessKeySecret: '3KV9nIwW8qkTGlrPmAe3HnR3fzM6r5'
});
this.client.useBucket('gsb-zc');
}
async downfile(key) {
var me = this;
var result = await co(function* () {
var result = yield me.client.get(key, '/tmp/' + key);
return result;
});
return result;
}
async upfile(key, filepath) {
var me = this;
var result = await co(function* () {
var result = yield me.client.put(key, filepath);
return result;
})
return result;
}
async putBuffer(key, buf) {
try {
var result = await this.client.put(key, buf);
console.log(result);
return result
} catch (e) {
console.log(e);
return null
}
}
async aliurl2zcurl(key) {
var filename=key.split("/").pop().split("?")[0];
var writeStream = fs.createWriteStream("/tmp/tmpfile.jpg");
var self=this;
request(key).pipe(writeStream);
writeStream.on('finish', function () {
self.upfile(filename, "/tmp/tmpfile.jsp").then(function (result) {
console.log(result.res.requestUrls[0]);
return result.res.requestUrls[0];
});
})
}
}
module.exports = OSSClient;
// var oss = new OSSClient();
// var key = "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_86315541780601882019212740188%E4%B9%A6.jpg";
// oss.downossurlfile(key);
// /tmp/zc_86315541780601882019212740188%E4%B9%A6.jpg
// oss.upfile("20200412aaa.jpg","/tmp/zc_86315541780601882019212740188%E4%B9%A6.jpg").then(function(result){
// console.log(result);
// });
// oss.upfile(key,"/usr/devws/OMC/igirl-api/r3.jpg").then(function(result){
// console.log(result);
// });
// oss.downfile(key).then(function(result){
// console.log(result);
// });
const system = require("../system");
const redis = require("redis");
const settings = require("../../config/settings");
const bluebird = require("bluebird");
bluebird.promisifyAll(redis);
class RedisClient {
constructor() {
const redisConfig = settings.redis();
this.client = null;
if (!redisConfig.password) {
this.client = redis.createClient({
host: redisConfig.host,
port: redisConfig.port,
db: redisConfig.db,
retry_strategy: function (options) {
// if (options.error && options.error.code === 'ECONNREFUSED') {
// // End reconnecting on a specific error and flush all commands with
// // a individual error
// return new Error('The server refused the connection');
// }
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands
// with a individual error
return new Error('Retry time exhausted');
}
if (options.attempt > 10) {
// End reconnecting with built in error
return 10000;
}
// reconnect after
return Math.min(options.attempt * 100, 3000);
}
});
} else {
this.client = redis.createClient({
host: redisConfig.host,
port: redisConfig.port,
password: redisConfig.password,
db: redisConfig.db,
retry_strategy: function (options) {
// if (options.error && options.error.code === 'ECONNREFUSED') {
// // End reconnecting on a specific error and flush all commands with
// // a individual error
// return new Error('The server refused the connection');
// }
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands
// with a individual error
return new Error('Retry time exhausted');
}
if (options.attempt > 10) {
// End reconnecting with built in error
return 10000;
}
// reconnect after
return Math.min(options.attempt * 100, 3000);
}
});
}
// return client.multi().get('foo').execAsync().then(function(res) {
// console.log(res); // => 'bar'
// });
this.client.on("error", function (err) {
console.log("Error " + err);
// //日志记录
// logCtl.error({
// optitle:"redis this.client.on异常:",
// op:"base/utils/redisClient/this.client.on",
// content:err,
// clientIp:""
// });
});
this.subclient = this.client.duplicate();
this.subclient.on("error", function (err) {
console.log("Error " + err);
// //日志记录
// logCtl.error({
// optitle:"redis this.subclient.on异常:",
// op:"base/utils/redisClient/this.subclient.on",
// content:err,
// clientIp:""
// });
});
var self = this;
this.subclient.on("message", async function (channel, message) {
console.log(channel, '------------- redis message ------------------- ');
if (self.taskmanager) {
if (channel == "task") {
if (message == "newtask") {
(async (that) => {
var msg2 = await that.rpop("tasklist");
if (msg2) {
console.log("taskName+++++" + msg2);
var msgs2 = msg2.split("_");
var action = msgs2[0];
var taskName = msgs2[1];
var exp = msgs2[2];
await that.taskmanager.addTask(taskName, exp);
}
})(self)
} else {
(async (msg, that) => {
var msgs = msg.split("_");
var action = msgs[0];
if (action == "delete") {
var taskName = msgs[1];
await that.taskmanager.deleteTask(taskName);
}
})(message, self);
}
}
}
if (self.chatserver) {
if (channel != "task") {
var message = JSON.parse(message);
console.log(message, "------------------------------------------ publish message");
if (channel == "brc") {//如果是广播频道,则发送广播到客户端
self.chatserver.server.emit("brc", message);
} else if (self.chatserver.users[channel]) {
if (message.type) {
self.chatserver.users[channel].client.emit(message.type, message.data);
} else {
//持久化
self.chatserver.users[channel].client.emit("chatmsg", message);
}
}
}
}
});
}
async subscribe(channel, chatserver) {
if (!this.chatserver) {
this.chatserver = chatserver;
}
return this.subclient.subscribeAsync(channel);
}
async unsubscribe(channel) {
//this.chatserver=null;
return this.subclient.unsubscribeAsync(channel);
}
async subscribeTask(channel, taskmanager) {
if (!this.taskmanager) {
this.taskmanager = taskmanager;
}
return this.subclient.subscribeAsync(channel);
}
async publish(channel, msg) {
console.log(channel + ":" + msg);
return this.client.publishAsync(channel, msg);
}
async rpush(key, val) {
return this.client.rpushAsync(key, val);
}
async llen(key) {
return this.client.llenAsync(key);
}
async rpushWithEx(key, val, t) {
var p = this.rpush(key, val);
this.client.expire(key, t);
return p;
}
async rpop(key) {
return this.client.rpopAsync(key);
}
async lpop(key) {
return this.client.lpopAsync(key);
}
async lrem(key, val) {
return this.client.lremAsync(key, 1, val);
}
async ltrim(key, s, e) {
return this.client.ltrimAsync(key, s, e);
}
async clearlist(key) {
await this.client.ltrim(key, -1, -1);
await this.client.ltrim(key, 1, -1);
return 0;
}
async flushall() {
console.log("sss");
return this.client.flushallAsync();
}
async keys(p) {
return this.client.keysAsync(p);
}
async set(key, val) {
if (typeof val == "undefined" || typeof key == "undefined") {
console.log("......................cache val undefined");
console.log(key);
return null;
}
return this.client.setAsync(key, val);
}
async setWithEx(key, val, t) {
var p = this.client.setAsync(key, val);
this.client.expire(key, t);
return p;
}
async get(key) {
return this.client.getAsync(key);
}
async delete(key) {
return this.client.delAsync(key);
}
async hmset(key, jsonObj) {
return this.client.hmsetAsync(key, jsonObj);
}
async hmsetWithEx(key, jsonObj, t) {
var p = this.client.hmsetAsync(key, jsonObj);
this.client.expire(key, t);
return p;
}
async hgetall(key) {
return this.client.hgetallAsync(key);
}
async hincrby(key, f, n) {
return this.client.hincrbyAsync(key, f, n);
}
async sadd(key, vals) {
await this.client.saddAsync(key, ...vals);
return this.scard(key);
}
async scard(key) {
return this.client.scardAsync(key);
}
async srem(key, val) {
return this.client.sremAsync(key, val);
}
async sismember(key, val) {
return this.client.sismemberAsync(key, val);
}
async smembers(key) {
return this.client.smembersAsync(key);
}
async exists(key) {
return this.client.existsAsync(key);
}
async incr(key) {
return this.client.incrAsync(key);
}
}
module.exports = RedisClient;
// var client=new RedisClient();
// (async ()=>{
// await client.rpush("tasklist","xxx");
// await client.rpush("tasklist","xxx");
// var len=await client.llen("tasklist");
// //await client.clearlist("tasklist");
// len=await client.llen("tasklist");
// console.log(len);
// })()
// client.keys('*').then(s=>{
// console.log(s);
// });
// let clients = {};
// clients.watcher = redis.createClient({ ... } );
// clients.alterer = clients.watcher.duplicate();
// client.sadd("h",["ok","jy","ok"]).then(function(r){
// console.log(r);
// });
// client.smembers("h").then(function(r){
// console.log(r);
// });
// client.sismember("h","ok").then(function(r){
// console.log(r);
// });
// console.dir(client);ti.exec( callback )回调函数参数err:返回null或者Array,出错则返回对应命令序列链中发生错误的错误信息,这个数组中最后一个元素是源自exec本身的一个EXECABORT类型的错误
// r.set("hello","oooo").then(function(result){
// console.log(result);
// });
// r.get("hello").then(function(result){
// console.log(result);
// });
// client.hmset("user_1",{name:"jy",age:13}).then(function(r){
// console.log(r);
//
// });
// client.hincrby("user_1","age",2).then(function(r){
// console.log(r);
// setTimeout(function(){
// client.hgetall("user_1").then(function(u){
// console.log(u);
// });
// },3000);
// });
var childproc = require('child_process');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const querystring = require('querystring');
var settings = require("../../config/settings");
const uuidv4 = require('uuid/v4');
class RestClient {
constructor() {
this.cmdGetPattern = "curl {-G} -k -d '{data}' {url}";
this.cmdPostPattern = "curl -k -H 'Content-type: application/json' -d '{data}' '{url}'";
this.cmdPostPatternWithAK = "curl -k -H 'Content-type: application/json' -H 'AccessKey:{ak}' -H 'request-id:{requestId}' -d '{data}' {url}";
this.cmdPostWithHValue = "curl -k -H 'Content-type: application/json' -H 'ak:{ak}' -d '{data}' {url}";
this.cmdDownLoadFilePattern = "curl -G -o {fileName} {url}";
this.cmdPostPattern2 = "curl -k -H 'Content-type: application/x-www-form-urlencoded' -d '{data}' {url}";
// form-data形式post data参数类型 md5=2&data=1
this.cmdPostPattern5 = "curl -k --data '{data}' {url}";
// authorization=[token]
this.cmdPostpatternToken = "curl -k -H 'Content-type: application/json' -H 'authorization:{token}' -X POST {url}"
}
getUUID() {
var uuid = uuidv4();
var u = uuid.replace(/\-/g, "");
return u;
}
FetchGetCmd(subData, url) {
var cmd = this.cmdGetPattern.replace(/\{\-G\}/g, "-G").replace(
/\{data\}/g, subData).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd(subData, url) {
var data = JSON.stringify(subData);
var cmd = this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmdWithAK(subData, url, acck) {
var data = JSON.stringify(subData);
var requestId = this.getUUID();
var cmd = this.cmdPostPatternWithAK.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{ak\}/g, acck).replace(/\{requestId\}/g, requestId);
return cmd;
}
FetchPostCmdWithHValue(subData, url, hValue) {
var data = JSON.stringify(subData);
var cmd = this.cmdPostWithHValue.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{ak\}/g, hValue);
return cmd;
}
FetchrestPostWithHAuthorizationUrl(userToken, url) {
var cmd = this.cmdPostpatternToken.replace(/\{url\}/g, url).replace(/\{token\}/g, userToken);
return cmd;
}
FetchPostCmd2(subData, url) {
var data = subData;
var cmd = this.cmdPostPattern2.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd5(subData, url) {
var data = subData;
var cmd = this.cmdPostPattern5.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchDownLoadCmd(outfname, url) {
// console.log(this.cmdPattern);
var cmd = this.cmdDownLoadFilePattern.replace(/\{fileName\}/g, outfname).replace(
/\{url\}/g, url);
return cmd;
}
async exec(cmd, options) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
if (options) {
const { stdout, stderr } = await exec(cmd, options);
return { stdout, stderr };
} else {
const { stdout, stderr } = await exec(cmd);
return { stdout, stderr };
}
}
async execDownload(url, outfname) {
let cmd = this.FetchDownLoadCmd(outfname, url);
var result = await this.exec(cmd);
return result;
}
async execGet(subData, url) {
let cmd = this.FetchGetCmd(subData, url);
var result = await this.exec(cmd);
return result;
}
async execGet2(subData, url) {
var data = querystring.stringify(subData);
let cmd = this.FetchGetCmd(data, url);
var result = await this.exec(cmd);
return result;
}
async execPost(subData, url) {
let cmd = this.FetchPostCmd(subData, url);
console.log(cmd, "cmd............");
var result = await this.exec(cmd, {
maxBuffer: 10000 * 1024
});
return result;
}
async execPostWithAK(subData, url, ak) {
let cmd = this.FetchPostCmdWithAK(subData, url, ak);
var result = await this.exec(cmd, {
maxBuffer: 1024 * 1024 * 15
});
var rtn = result.stdout;
if (rtn) {
return JSON.parse(rtn);
} else {
return null;
}
}
async execPostWithHValue(subData, url, hValue) {
let cmd = this.FetchPostCmdWithHValue(subData, url, hValue);
console.log(cmd, "cmd............");
var result = await this.exec(cmd, {
maxBuffer: 1024 * 1024 * 15
});
return result;
}
async restPostWithHAuthorizationUrl(userToken, url) {
let cmd = this.FetchrestPostWithHAuthorizationUrl(userToken, url);
console.log(cmd, "cmd............");
var result = await this.exec(cmd, {
maxBuffer: 1024 * 1024 * 15
});
return result;
}
async execPost2(subData, url) {
let cmd = this.FetchPostCmd2(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execPost3(subData, url) {
let cmd = this.FetchPostCmd3(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execGet3(url) {
let cmd = this.FetchGetCmd3(url);
console.log("execGet3-----01");
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execPostESignBao(subData, url) {
let cmd = this.FetchPostCmd4(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execPostForm(subData, url) {
let cmd = this.FetchPostCmd5(subData, url);
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
async execCustomPostESignBao(cmd) {
console.log(cmd);
var result = await this.exec(cmd);
return result;
}
test() {
console.log("hello");
}
}
module.exports = RestClient;
// var x=new RestClient();
// x.execGet("","http://www.163.com").then(function(r){
// console.log(r.stdout);
// console.log(r.stderr);
// });
const system=require("../system");
class SmsClient{
constructor(){
this.smsTeml="http://123.57.156.109:4103/api/Send";
this.restClient=system.getObject("util.restClient");
}
async sendMsg(to,content){
var txtObj ={
"appId":8,
"mobilePhone":to,
"content":content
}
return this.restClient.execPost(txtObj,this.smsTeml);
}
}
module.exports=SmsClient;
// var util = require('util');
// var ssdb = require('ssdb-node');
// const settings = require("../../config/settings");
// const bluebird = require("bluebird");
// bluebird.promisifyAll(ssdb);
// class SsdbClient {
// constructor() {
// this.pool = new ssdb({
// port: 8888,
// host: '192.168.18.26',
// auth: 'lowlogslowlogslowlogslowlogYsy123',
// authCallback:""
// });
// }
// async set(obj) {
// var key = obj.key;
// var value = obj.value;
// return new Promise((resolve, reject) => {
// this.pool.set(key, value, function (err, data) {
// if (err) {
// reject(err)
// } else {
// resolve(data)
// }
// });
// })
// }
// async get(obj) {
// var key = obj.key;
// return new Promise((resolve, reject) => {
// this.pool.get(key, function (err, data) {
// if (err) {
// reject(err)
// } else {
// resolve(data)
// }
// });
// })
// }
// }
// module.exports = SsdbClient;
\ No newline at end of file
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var methodOverride = require('method-override');
var cookierParser = require('cookie-parser');
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var bodyParser = require('body-parser');
var multer = require('multer');
var errorHandler = require('errorhandler');
var settings = require('./settings');
var system = require('../base/system');
var routes = require('./routes');
const logCtl = system.getObject("service.common.oplogSve");
const clientRedis = system.getObject("util.redisClient").client;
//const tm=system.getObject("db.taskManager");
module.exports = function (app) {
app.set('port', settings.port);
app.set('views', settings.basepath + '/app/front/entry');
app.set('view engine', 'ejs');
app.use(methodOverride());
app.use(cookierParser());
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
routes(app);//初始化路由
app.use(express.static(path.join(settings.basepath, '/app/front/entry/public')));
app.all('*', function (req, res, next) {
req.objs = system;
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
// res.header('Access-Control-Allow-Credentials', 'true');
res.header('content-type', 'text/html;charset=UTF-8');
if (req.method == 'OPTIONS') {
res.send(200); //让options请求快速返回/
}
else {
next();
}
});
if (settings.env == "dev") {
app.use(session(
{
name: 'devdemosid',
cookie: { maxAge: 3600000 },
rolling: true,
resave: false,
saveUninitialized: false,
secret: 'uwotm8',
store: new RedisStore({
client: clientRedis,
}),
}));
} else {
app.use(session(
{
name: 'demosid',
cookie: { maxAge: 3600000 },
rolling: true,
resave: false,
saveUninitialized: false,
secret: 'uwotm8',
store: new RedisStore({
client: clientRedis,
}),
}));
}
// development only
if ('development' == app.get('env')) {
app.use(errorHandler());
} else {
app.use(function (err, req, res) {
console.log("prod error handler...........................................");
console.log(err);
logCtl.error({
optitle: "environment 调用异常error:",
op: req.url,
content: e.toString(),
clientIp: system.get_client_ip(req),
agent: req.headers["user-agent"],
});
//logerApp.error("prod error handler",err);
res.send("link index");
});
}
};
var settings = {
redis: {
host: "43.247.184.32",
port: 8967,
password: "Gongsibao2018",
db: 8,
},
database: {
dbname: "igirl_api",
user: "write",
password: "write",
config: {
host: '43.247.184.35',
port: 8899,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 90000000,
idle: 1000000
},
debug: false,
dialectOptions: {
requestTimeout: 999999,
// timezone: '+8:00'
// instanceName:'DEV'
} //设置MSSQL超时时间
}
},
reqEsDevUrl: "http://192.168.4.249:9200/",
reqHomePageDevUrl: "http://zcchannel.apps.com:4003/",
reqAuthUrl: "http://sj.app.com:4002/auth"
};
module.exports = settings;
var path= require('path');
var basepath=path.normalize(path.join(__dirname, '../..'));
var settings = {
// web:path.join(basepath,"app/base/controller/impl"),
api:path.join(basepath,"app/base/api/impl"),
util:path.join(basepath,"app/base/utils"),
service:path.join(basepath,"app/base/service/impl"),
db:path.join(basepath,"app/base/db/impl"),
tool:path.join(basepath,"app/base/tool"),
service2:path.join(basepath,"app/base/service"),
};
module.exports = settings;
var fs=require("fs");
var path=require("path");
var system = require('../base/system');
module.exports = function (app) {
var routePath=__dirname+"/routes";
fs.readdir(routePath,function(err,rs){
if(rs){
rs.forEach(function(r){
var func=require(routePath+"/"+r);
func.call(null,app);
});
}
});
};
var url=require("url");
var qr=require("qr-image")
module.exports = function (app) {
app.get('/api/qc', function(req,res){
var params = url.parse(req.url,true);
var detailLink = params.query.detailLink;
try {
var img = qr.image(detailLink,{size :10});
console.log(detailLink)
res.writeHead(200, {'Content-Type': 'image/png'});
img.pipe(res);
} catch (e) {
res.writeHead(414, {'Content-Type': 'text/html'});
res.end('<h1>414 Request-URI Too Large</h1>');
}
});
};
var url = require("url");
var 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');
module.exports = function (app) {
//-----------------------新的模式---------web---------开始
app.use('/tlpay/aliPayNotify', async function (req, res) {
try {
var client_ip = system.get_client_ip(req);
var result = await utilsOrderSve.opH5AliDingPayBackNotify(req.body, client_ip);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "记录阿里钉钉支付回调处理结果",
op: "center-channel/tlpay/aliPayNotify",
content: "支付回调处理结果:" + JSON.stringify(result),
clientIp: client_ip || ""
});
if (result.status != 0) {
return res.end("FAIL");
}
return res.end("success");
} catch (error) {
logCtl.error({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "阿里钉钉支付回调处理异常",
op: "center-channel/tlpay/aliPayNotify",
content: "回调参数:req=" + JSON.stringify(req) + "error:" + error.stack,
clientIp: client_ip || ""
});
}
});
app.use('/tlpay/notify', async function (req, res) {
try {
var client_ip = system.get_client_ip(req);
var result = await utilsOrderSve.receiveCallBackNotify(req.body, client_ip);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "记录回调处理结果:,method=" + req.body.trxcode,
op: "center-channel/tlpay/notify",
content: "回调参数:" + JSON.stringify(req.body) + "回调结果:" + JSON.stringify(result),
clientIp: client_ip || ""
});
if (result.status != 0) {
return res.end("FAIL");
}
return res.end("success");
} catch (error) {
logCtl.error({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "记录回调处理结果异常:,method=" + req.body.trxcode,
op: "center-channel/tlpay/notify",
content: "回调参数:" + JSON.stringify(req.body) + "error:" + error.stack,
clientIp: client_ip || ""
});
}
});
app.use('/tlpay/opBackNotify', async function (req, res) {
try {
var client_ip = system.get_client_ip(req);
var result = await utilsOrderSve.opBackNotify(req.body, client_ip);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "回调处理订单结果:,method=" + req.body.trxcode,
op: "center-channel/tlpay/opBackNotify",
content: "回调参数:" + JSON.stringify(req.body) + "回调处理订单结果:" + JSON.stringify(result),
clientIp: client_ip || ""
});
res.end(JSON.stringify(result));
} catch (error) {
logCtl.error({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "记录回调处理结果异常:,method=" + req.body.trxcode,
op: "center-channel/tlpay/opBackNotify",
content: "回调参数:" + JSON.stringify(req.body) + "error:" + error.stack,
clientIp: client_ip || ""
});
}
});
//----------------------飞书小程序---------------------------------------------开始
//飞书通知
app.use('/feishu/notify', async function (req, res) {
try {
var client_ip = system.get_client_ip(req);
var result = await utilsFeishuSve.notify(req.body);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "飞书小程序记录回调处理结果,method=notify",
op: "app/config/routes/api.js/feishu/notify",
content: "回调参数:" + JSON.stringify(req.body) + "回调结果:" + JSON.stringify(result),
clientIp: client_ip || ""
});
var returnObj = JSON.stringify(result);
return res.end(returnObj);
} catch (error) {
logCtl.error({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "飞书小程序记录回调处理结果异常:,method=notify",
op: "app/config/routes/api.js/feishu/notify",
content: "回调参数:" + JSON.stringify(req.body) + "error:" + error.stack,
clientIp: client_ip || ""
});
}
});
app.use('/feishu/login', async function (req, res) {
try {
var result = system.getResult(null, "login fail");
// console.log(req,"/feishu/login++++++++++++++++++++++++++++++++++++++");
var client_ip = system.get_client_ip(req);
var pobj = req.query;
var token = pobj.state || "";
if (!token) {
result.msg = "req headers token can not be empty";
result.data = null;
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;
}
pobj.appInfo = result.data;
result = await utilsFeishuSve.checkAndLogin(pobj);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "飞书小程序记录回调处理结果,method=login",
op: "app/config/routes/api.js/feishu/notify",
content: "回调参数:" + JSON.stringify(pobj) + "回调结果:" + JSON.stringify(result),
clientIp: client_ip || ""
});
var returnObj = JSON.stringify(result);
return res.end(returnObj);
} catch (error) {
logCtl.error({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "飞书小程序记录回调处理结果异常:,method=login",
op: "app/config/routes/api.js/feishu/notify",
content: "回调参数:" + JSON.stringify(req.query) + "error:" + error.stack,
clientIp: client_ip || ""
});
}
});
//----------------------飞书小程序---------------------------------------------结束
// app-ali支付回调通知
app.use('/orderNotify/aliPayNotify', async function (req, res) {
try{
var client_ip = system.get_client_ip(req);
var result = await utilsOrderSve.aliPayNotify(req.body, client_ip);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "记录支付宝回调处理结果 api层",
op: "center-channel/orderNotify/aliPayNotify",
content: "支付回调处理结果:" + JSON.stringify(result),
clientIp: client_ip || ""
});
if (result.status != 0) {
return res.end("FAIL");
}
return res.end("success");
} catch(e) {
logCtl.error({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "支付宝回调处理异常 api层",
op: "center-channel/orderNotify/aliPayNotify",
content: "回调参数:req=" + JSON.stringify(req) + "error:" + e.stack,
clientIp: client_ip || ""
});
}
});
// app-wx支付回调
app.use('/orderNotify/wxPayNotify', async function (req, res) {
try{
var body = "";
req.on('data', function(data) {
body += data;
});
req.on('end', async function() {
xml2js.parseString(body, { trim: true, explicitArray: false, explicitRoot: false }, async function(err, json) {
var client_ip = system.get_client_ip(req);
var result = await utilsOrderSve.wxPayNotify(json);
logCtl.info({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "记录微信支付回调处理结果",
op: "center-channel/orderNotify/wxPayNotify",
content: "支付回调处理结果:" + JSON.stringify(result),
clientIp: client_ip || ""
});
if (result.status != 0) {
return res.end("FAIL");
}
return res.end("success");
})
})
} catch(e) {
logCtl.error({
optitle: (new Date()).Format("yyyy-MM-dd hh:mm:ss") + "微信回调处理异常",
op: "center-channel/orderNotify/wxPayNotify",
content: "回调参数:req=" + JSON.stringify(req) + "error:" + e.stack,
clientIp: client_ip || ""
});
}
});
app.all("/web/*", async function (req, res, next) {
var result = system.getResult(null, "req method must is post");
if (req.method != "POST") {
res.end(JSON.stringify(result));
return;
}
if (!req.body.actionType) {
result.msg = "actionType can not be empty";
res.end(JSON.stringify(result));
return;
}
if (["getAppTokenByHosts", "getAppTokenByAppKey", "test"].indexOf(req.body.actionType) >= 0) {
req.body.actionBody.appHosts = req.host;
next();
return;
}
if (req.body.actionType == "receiveCallBackNotify") {
req.body.actionBody.app_hosts = req.host;
next();
return;
}
var token = req.headers["token"] || "";
if (!token) {
result.msg = "req headers token can not be empty";
result.data = null;
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 = ["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"
];
if (lst.indexOf(req.body.actionType) >= 0) {
var userpin = req.headers["userpin"] || "";
if (!userpin) {
result.status = system.noLogin;
result.msg = "req headers userpin can not be empty";
result.data = null;
res.end(JSON.stringify(result));
return;
} else {
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();
});
app.get('/web/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname = req.params["gname"];
classPath = gname + "." + classPath;
var tClientIp = system.get_client_ip(req);
req.clientIp = tClientIp; req
req.uagent = req.headers["user-agent"];
req.classname = classPath;
var params = [];
params.push(gname);
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = system.getObject("api." + classPath);
if (invokeObj["doexecMethod"]) {
p = invokeObj["doexecMethod"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
app.post('/web/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname = req.params["gname"];
var params = [];
classPath = gname + "." + classPath;
var tClientIp = system.get_client_ip(req);
req.clientIp = tClientIp;
req.uagent = req.headers["user-agent"];
req.classname = classPath;
params.push(gname);
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = system.getObject("api." + classPath);
if (invokeObj["doexecMethod"]) {
p = invokeObj["doexecMethod"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
//-----------------------新的模式---------web---------结束
//-----------------------新的模式---------api---------开始
app.all("/api/*", async function (req, res, next) {
var result = system.getResult(null, "req method must is post");
if (req.method != "POST") {
res.end(JSON.stringify(result));
return;
}
if (["getAppTokenByHosts", "getAppTokenByAppKey"].indexOf(req.body.actionType) >= 0) {
req.body.actionBody.appHosts = req.host;
next();
return;
}
if (req.path.indexOf("/taskapi/") >= 0) {
next();
return;
}
if (!req.body.actionType) {
result.msg = "actionType can not be empty";
res.end(JSON.stringify(result));
return;
}
var token = req.headers["token"] || "";
if (!token) {
result.msg = "req headers token can not be empty";
result.data = null;
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) {
var userpin = req.headers["userpin"] || "";
if (!userpin) {
result.status = system.noLogin;
result.msg = "req headers userpin can not be empty";
result.data = null;
res.end(JSON.stringify(result));
return;
} else {
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();
});
app.get('/api/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname = req.params["gname"];
classPath = gname + "." + classPath;
var tClientIp = system.get_client_ip(req);
req.clientIp = tClientIp; req
req.uagent = req.headers["user-agent"];
req.classname = classPath;
var params = [];
params.push(gname);
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = system.getObject("api." + classPath);
if (invokeObj["doexecMethod"]) {
p = invokeObj["doexecMethod"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
app.post('/api/:gname/:qname/:method', function (req, res) {
var classPath = req.params["qname"];
var methodName = req.params["method"];
var gname = req.params["gname"];
var params = [];
classPath = gname + "." + classPath;
var tClientIp = system.get_client_ip(req);
req.clientIp = tClientIp;
req.uagent = req.headers["user-agent"];
req.classname = classPath;
params.push(gname);
params.push(methodName);
params.push(req.body);
params.push(req.query);
params.push(req);
var p = null;
var invokeObj = system.getObject("api." + classPath);
if (invokeObj["doexecMethod"]) {
p = invokeObj["doexecMethod"].apply(invokeObj, params);
}
p.then(r => {
res.end(JSON.stringify(r));
});
});
//-----------------------新的模式---------api---------结束
};
\ No newline at end of file
var url = require("url");
var system = require("../../base/system");
var fs = require('fs');
var marked = require("marked");
module.exports = function (app) {
app.get('/doc', function (req, res) {
if (!req.query.key) {
res.send("文件不存在!!!");
return;
}
if (req.query.key != "doc12345789") {
res.send("文件不存在!!!!!!");
return;
}
var path = process.cwd() + "/app/front/entry/public/apidoc/README.md";
fs.readFile(path, function (err, data) {
if (err) {
console.log(err);
res.send("文件不存在!");
} else {
console.log(data);
str = marked(data.toString());
res.render('apidoc', { str });
}
});
});
app.get('/doc/:forder', function (req, res) {
var path = process.cwd() + "/app/front/entry/public/apidoc/README.md";
fs.readFile(path, function (err, data) {
if (err) {
console.log(err);
res.send("文件不存在!");
} else {
console.log(data);
str = marked(data.toString());
res.render('apidoc', { str });
}
});
});
app.get('/doc/api/:forder/:fileName', function (req, res) {
if (req.url != "/doc/api/platform/fgbusinesschance.md") {
if (!req.query.key) {
res.send("文件不存在!!!");
return;
}
if (req.query.key != "doc12345789") {
res.send("文件不存在!!!!!!");
return;
}
}
var forder = req.params["forder"];
var fileName = req.params["fileName"] || "README.md";
var path = process.cwd() + "/app/front/entry/public/apidoc";
if (forder) {
path = path + "/" + forder + "/" + fileName;
} else {
path = path + "/" + fileName;
}
fs.readFile(path, function (err, data) {
if (err) {
console.log(err);
res.send("文件不存在!");
} else {
console.log(data);
str = marked(data.toString());
console.log(str);
res.render('apidoc', { str });
}
});
});
};
var fs=require("fs");
var settings=require("../settings");
var glob = require("glob");
var system = require('../../base/system');
// var bizcompCache={};
// async function asycReadFile(path){
// var p=new Promise(function(reslv,reject){
// fs.readFile(path,function(err,r){
// if(err){
// reject(err);
// }else{
// reslv(r);
// }
// });
// });
// return p;
// }
// async function buildComponent(compname){
// if(bizcompCache[compname] && settings.env=="prod"){
// return bizcompCache[compname];
// }else{
// var htmlpath=settings.basepath+"/app/front/vues/pages/"+compname+"/"+compname+".html";
// var jspath=settings.basepath+"/app/front/vues/pages/"+compname+"/"+compname+".js";
// var html= await asycReadFile(htmlpath);
// var tmpl=html.toString("utf-8");
// var js= await asycReadFile(jspath);
// var jsstr=js.toString("utf-8");
// jsstr=jsstr.replace("${tmpl}",tmpl);
// bizcompCache[compname]=jsstr;
// return jsstr;
// }
// }
module.exports = function (app) {
app.get('/vue/comp/base',function(req,res){
var vuePath=settings.basepath+"/app/front/vues/base";
var baseComps=[];
var rs=glob.sync(vuePath+"/**/*.vue");
if(rs){
rs.forEach(function(r){
var comp="";
if(settings.env=="dev"){
delete require.cache[r];
comp=require(r).replace(/\n/g,"");
}else{
comp=require(r).replace(/\n/g,"");
}
baseComps.push(comp);
});
res.end(JSON.stringify(baseComps));
}
});
app.get('/vue/comp/:cname',function(req,res){
var componentName=req.params.cname;
var theme=req.headers["theme"];
var hostname=req.hostname;
buildComponent(componentName,theme,hostname).then(function(r){
res.end(escape(r.replace(/\n/g,"")));
// res.end(r);
});
});
};
var path = require('path');
var AlipaySdk = require('alipay-sdk').default;
var WXPay = require('wx-pay');
const tenpay = require('tenpay');
var ENVINPUT = {
DB_HOST: process.env.DB_HOST,
DB_PORT: process.env.DB_PORT,
DB_USER: process.env.DB_USER,
DB_PWD: process.env.DB_PWD,
REDIS_HOST: process.env.REDIS_HOST,
REDIS_PORT: process.env.REDIS_PORT,
REDIS_PWD: process.env.REDIS_PWD,
DB_NAME: process.env.CENTER_CHANNEL_DB_NAME,
REDIS_DB: process.env.CENTER_CHANNEL_REDIS_DB,
APP_ENV: process.env.APP_ENV ? process.env.APP_ENV : "dev"
};
var settings = {
env: ENVINPUT.APP_ENV,
appKey: "201911061250",
secret: "f99d413b767f09b5dff0b3610366cc46",
salt: "%iatpD1gcxz7iF#B",
cacheprefix: "centerChannel",
usertimeout: 3600,//单位秒
basepath: path.normalize(path.join(__dirname, '../..')),
port: process.env.NODE_PORT || 4012,
entProfileUrl: function () {
if (this.env == "dev") {
return "https://entprofile.gongsibao.com/";
} else {
return "https://entprofile.gongsibao.com/";
}
},
aliossjavaUrl: function () {
if (this.env == "dev") {
return "http://192.168.2.109:8080/uploadfile";
} else {
return "http://aliossjava-service/uploadfile";
}
},
qifuPayAfterH5JumpUrl: function () {
if (this.env == "dev") {
return "http://tm.qifu.gongsibao.com:4012/#/home/indent_list";
} else {
return "http://tm.qifu.gongsibao.com/#/home/indent_list";
}
},
qifuPayAfterPcJumpUrl: function () {
if (this.env == "dev") {
return "http://tm.qifu.gongsibao.com:4012/#/home/indent_list";
} else {
return "http://tm.qifu.gongsibao.com/#/home/indent_list";
}
},
qifuH5PayNotifyUrl: function () {
if (this.env == "dev") {
return "http://gsb.qifu.gongsibao.com:4012/tlpay/notify";
} else {
return "http://gsb.qifu.gongsibao.com/tlpay/notify";
}
},
paasUrl: function () {
if (this.env == "dev") {
return "http://p.apps.com:4001/";
} else {
return "https://open.gongsibao.com/";
}
},
centerAppUrl: function () {
if (this.env == "dev") {
return "http://centerapp.apps.com:4010/";
} else {
return "http://center-app-service/";
}
},
centerChannelUrl: function () {
if (this.env == "dev") {
return "http://60.205.209.94:4012/"
} else {
// return "channel的正式环境" 6.30修改目前只用作生成alipay/wx的通知回调地址
return "http://youke.qifu.gongsibao.com/"
}
},
gatewayUrl: function () {
if (this.env == "dev") {
return "http://192.168.0.106:4005/";
} else {
return "https://channelgateway-api.gongsibao.com/";
}
},
centerOrderUrl: function () {
if (this.env == "dev") {
return "http://centerorder.apps.com:4011/";
} else {
return "http://center-order-service/";
}
},
igirlWeburl: function(){
if (this.env == "dev") {
return "http://127.0.0.1:3000/";
} else {
return "http://igirl-service/";
}
},
centerCacheUrl:function(){
if(this.env=='dev'){
return "http://123.57.217.203:30005/";
}else{
return "http://specialprofile-service/"
}
},
reqTransferurl: function () {
if (this.env == "dev") {
return "http://192.168.18.61:3003/";
} else {
return "http://jiaxiya-service/";
}
},
reqEsAddr: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return "http://43.247.184.94:7200/";//localsettings.reqEsDevUrl;
} else {
return "http://43.247.184.94:7200/";
}
},
reqZcApi: function () {
if (this.env == "dev") {
return "http://zcapi.apps.com:4002/";//localsettings.reqEsDevUrl;
} else {
return "http://zcapi-service/";//k8s服务名称
}
},
pushFqbossDataUrl: function () {
if (this.env == "dev") {
return "http://192.168.18.141:3000/";//localsettings.reqEsDevUrl;
} else {
return "https://fqgirl.gongsibao.com/";
}
},
ucommuneUrl: function () {
if (this.env == "dev") {
return "https://m-dev.ucommune.com/"// 优客测试环境
} else {
// return "https://m.ucommune.com/"// 优客正式环境
return "https://m.ucommune.com/"// 6.29lin修改为测试环境。原因优客 目前还没有正式环境
}
},
apiconfig: {
opLogUrl: function () {
return settings.reqEsAddr() + "center_channel_log/_doc?pretty";
},
opLogEsIsAdd: function () {
return 1;
},
},
homePage: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return localsettings.reqHomePageDevUrl;
} else {
return "http://boss.gongsibao.com/";
}
},
redis: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return localsettings.redis;
} else {
return {
host: ENVINPUT.REDIS_HOST,
port: ENVINPUT.REDIS_PORT,
password: ENVINPUT.REDIS_PWD,
db: ENVINPUT.REDIS_DB,
};
}
},
database: function () {
if (this.env == "dev") {
var localsettings = require("./localsettings");
return localsettings.database;
} else {
return {
dbname: ENVINPUT.DB_NAME,
user: ENVINPUT.DB_USER,
password: ENVINPUT.DB_PWD,
config: {
host: ENVINPUT.DB_HOST,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 90000000,
idle: 1000000
},
debug: false,
dialectOptions: {
requestTimeout: 999999,
// instanceName:'DEV'
} //设置MSSQL超时时间
},
};
}
},
alipay: function() {// 没有在使用 确定不需要后会去掉
return new AlipaySdk({
// appId: payConfig.ali.appId,
// privateKey: payConfig.ali.privateKey,
// alipayPublicKey: payConfig.ali.publicKey,
});
},
wxpay: function() {// 没有在使用 确定不需要后会去掉
return WXPay({
appid: 'wx6f3ebe44defe336a',
mch_id: '1232813602',
partner_key: 'sinotone2014sinotone2014sinotone', //微信商户平台API密钥
//pfx: fs.readFileSync('./wxpay_cert.p12'), //微信商户平台证书
//pfx: "sinotone2014sinotone2014sinotone"
})
// const config = {
// appid: 'wx6f3ebe44defe336a',
// mchid: '1232813602',
// partnerKey: 'sinotone2014sinotone2014sinotone',
// };
// return new tenpay(config);
},
paySecret: function() {
if (this.env == "dev") {
// return "ab53dfb909e4c32a";
return "34cdecaac35b1d8d"// 7.1之前测试环境的secret无法使用,测试/正式全部使用同一个secret
} else {
return "34cdecaac35b1d8d";// 6.29lin新增 小黑给的secret
}
},
ucommuneOperatorPhone: function() {
if (this.env == "dev") {
return "13911391996"// 7.7修改测试环境优客 辅助/担保订单推送业务员手机号
} else {
return "15754717260";// 7.7修改正式环境优客 辅助/担保订单推送业务员手机号 刘文悦
}
}
};
module.exports = settings;
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="keywords" content="api文档">
<meta name="baidu-site-verification" content="lATAxZAm8y" />
<meta name="viewport" content="width=device-width, initial-scale=0.8, maximum-scale=0.8, user-scalable=1">
<link href="https://cdn.bootcss.com/github-markdown-css/2.8.0/github-markdown.min.css" rel="stylesheet">
</head>
<body>
<div style="width:100%;text-align: center;font-size: 20px;">
渠道接入API文档
</div>
<div class="markdown-body" style="margin-left:40px;" id="doc-page">
<%- str%>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh-CN">
<body>
<div style="width:100%;text-align: center;font-size: 20px;">
ok
</div>
</body>
</html>
\ No newline at end of file
## 调用接口方式
### (一). 业务接口地址前面都加/web,且actionProcess参数可以不用填写
  1 [获取token信息](doc/api/appDesc/newDemoDesc.md#getToken)
  2 [通用接口示例](doc/api/appDesc/newDemoDesc.md#demo)
## ------------------以下为业务接口-------------------------
## 1. 工商检索相关接口
  1 [工商检索中心](doc/api/opTrademark/icbcSearch.md)
## 2. 商标检索相关接口
  1 [商标检索中心](doc/api/opTrademark/tmSearch.md)
## 3. 专利检索相关接口
  1 [专利检索中心](doc/api/patentDesc/patent.md)
## 4. 证照相关接口
  1 [证照相关推荐](doc/api/licensesDesc/license.md)
## 5. 用户中心相关接口
  1 [用户中心](doc/api/platform/user.md)
## 6. 产品中心相关接口
  1 [产品中心接口](doc/api/platform/product.md)
## 7. 订单中心相关接口
  1 [订单中心接口](doc/api/platform/order.md)
## 8. 支付中心相关接口
  1 [支付中心接口](doc/api/paymentDesc/payment.md)
## 9. 商标订单相关接口
  1 [商标订单接口](doc/api/platform/tmOrder.md)
## 10. 工商订单相关接口
  1 [工商订单接口](doc/api/platform/icbcOrder.md)
## 11. 政策相关接口
  1 [政策接口](doc/api/platform/policy.md)
## 12. ICP订单相关接口
  1 [ICP订单接口](doc/api/platform/icpOrder.md)
## 13. Logo订单相关接口
  1 [Logo订单接口](doc/api/platform/logoOrder.md)
## 14. 复购商机相关接口
  1 [复购商机相关接口](doc/api/platform/fgbusinesschance.md)
\ No newline at end of file
<a name="menu" href="/doc">返回主目录</a>
1. [获取app信息](#appParams)
1. [获取token](#getToken)
1. [通用接口示例](#demo)
## **<a name="appParams"> 获取app信息</a>**
[返回到目录](#menu) <a name="menu" href="/doc">返回主目录</a>
#### 请求接口之前需要向合作方获取如下参数:
#### appkey:2019090811
#### secret:f99d413b767f09b5dff0b3610366cc46
#### 参数说明:appkey、secret为获取请求头token的参数。
## **<a name="getToken"> 获取token</a>**
[返回到目录](#menu) <a name="menu" href="/doc">返回主目录</a>
##### URL
[/auth/accessAuth/getToken]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"appkey": "2019090811", //Y string appkey
"secret": "f99d413b767f09b5dff0b3610366cc46"//Y string 密钥
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"token": "40d64e586551405c9bcafab87266bc04" //token用于其他接口请求时,放在请求头中
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
```
## **<a name="demo"> 通用接口示例</a>**
[返回到目录](#menu) <a name="menu" href="/doc">返回主目录</a>
##### URL
[/auth/accessAuth]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
所有请求接口在请求前,必须获取token,并把token放在请求头Headers中,无特殊说明请求方式统一为POST请求。
通用请求接口示例:
请求头中需要传递的参数:tokenrequest-id
请求参数:
{
"actionProcess": "jd", //Y string 执行的渠道名称
"actionType": "demo", //Y string 渠道执行的类型
"actionBody": { //N JSON 要传递的body信息
"userId": "019101116473600000", //N string 用户ID
"userName": "张三" //N string 用户名称
}
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"opDesc": "京东云合作"
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
返回值参数说明:
status 返回状态,0为成功,否则为失败
msg 成功或失败信息描述
data 接口返回的数据信息
requestId 请求头中的request-id,作为接口调用跟踪
```
<a name="menu" href="/doc">返回主目录</a>
1. [获取token](#getToken)
1. [通用接口示例](#demo)
## **<a name="getToken"> 获取token</a>**
[返回到目录](#menu) <a name="menu" href="/doc">返回主目录</a>
##### URL
[/web/auth/accessAuth/getAppTokenByHosts]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"actionType":"getAppTokenByHosts",//固定写法就行
"actionBody":{}
}
```
##### 或
##### URL
[/api/auth/accessAuth/getAppTokenByAppKey]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"actionType":"getAppTokenByAppKey",//固定写法就行
"actionBody":{
"appkey": "2019090811", //Y string appkey
"secret": "f99d413b767f09b5dff0b3610366cc46"//Y string 密钥
}
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"token": "40d64e586551405c9bcafab87266bc04" //token用于其他接口请求时,放在请求头中
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
```
## **<a name="demo"> 通用接口示例(创建渠道用户信息)</a>**
[返回到目录](#menu) <a name="menu" href="/doc">返回主目录</a>
##### URL
[/web/auth/accessAuth/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
所有请求接口在请求前,必须获取token,并把token放在请求头Headers中,无特殊说明请求方式统一为POST请求。
通用请求接口示例:
请求头中需要传递的参数:token
请求参数:
{
"actionType": "loginUserByChannelUserId", //Y string 渠道执行的类型
"actionBody": {
"channelUserId":"sy-test" //Y string 渠道用户ID
}
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"userpin": "3440126a4a6e4c2d890a818d5d1dd1e9"//用户登录后的userpin
},
"requestId": "1596022b5f654379899e6b113a473d2e"
}
返回值参数说明:
status 返回状态,0为成功,否则为失败
msg 成功或失败信息描述
data 接口返回的数据信息
requestId 请求头中的request-id,作为接口调用跟踪
```
<a name="menu" href="/doc">返回主目录</a>
1. [根据公司得到推荐要办的证书](#getLicenses)
1. [获取企业高薪信息数量](#gxCountByAuthor)
1. [获取企业高薪信息列表](#gxListByAuthor)
1. [获取企业游戏出版及运营数量](#gameCountByAuthor)
1. [获取企业游戏出版及运营信息列表](#gameListByAuthor)
1. [获取企业证照信息数量](#licenseCountByAuthor)
1. [获取企业证照信息列表](#licenseListByAuthor)
1. [获取企业域名信息数量](#ipCountByAuthor)
1. [获取企业域名信息列表](#ipListByAuthor)
1. [获取企业的分支机构(从企查查获取)](#getQccBranches)
1. [获取企业所有证照数量](#getcountAll)
## **<a name="getLicenses"> 根据公司得到推荐要办的证书</a>**
[返回到目录](#menu)
##### URL
[/action/licenseQuery/getLicenses]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getLicenses
``` javascript
{
"name": "中国专利信息中心"//公司名称
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data:{
recommend: [
'高新企业认证', '广播电视节目制作经营许可证', '网络文化经营许可证', '网络游戏运营备案'
]
},
bizmsg: 'empty'
}
```
## **<a name="gxCountByAuthor"> 获取企业高薪信息数量</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/gxCountByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:gxCountByAuthor
``` javascript
{
"author": "中国专利信息中心"//公司名称
}
```
#### 返回结果
```javascript
{ status: 0, msg: '操作成功', data: 5370, bizmsg: 'empty' }
```
## **<a name="gxListByAuthor"> 获取企业高薪信息列表</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/gxListByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:gxListByAuthor
``` javascript
{
"author": "中国专利信息中心",//公司名称
"page_size":10,
"current_page":0
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data: {
total: 1,
data: [
{
area: '广州',//地区
address: '广州市番禺区南村镇兴业路南侧地段(2号厂房)',//企业地址
year: 2018,//年份
businessScope:
'家用厨房电器具制造;其他家用电力器具制造;其他非电力家用器具制造;塑料薄膜制造;日用塑料制品制造;泵及真空设备制造;液压和气压动力机械及元件制造;制冷、空调设备制造;风动和电动工具制造;电子测量仪器制造;实验分析仪器制造;电气机械设备销售;家用电器批发;塑料制品批发;电子产品批发;技术进出口;货物进出口(专营专控商品除外);',//经营范围
certificateNo: 'GR201844010345',//证书编号
techType: '国家高新' //类型
}
]
},
bizmsg: 'empty'
}
```
## **<a name="gameCountByAuthor"> 获取企业游戏出版及运营数量</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/gameCountByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:gameCountByAuthor
``` javascript
{
"author": "中国专利信息中心"//公司名称
"type":""//游戏证照类型,取值:[网络游戏出版备案,网络游戏运营备案]
}
```
#### 返回结果
```javascript
{ status: 0, msg: '操作成功', data: 5370, bizmsg: 'empty' }
```
## **<a name="gameListByAuthor"> 获取企业游戏出版及运营信息列表</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/gameListByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:gameListByAuthor
``` javascript
{
"author": "中国专利信息中心",//公司名称
"type":""//游戏证照类型,取值:[网络游戏出版备案,网络游戏运营备案]
"page_size":10,
"current_page":0
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data: {
total: 1,
data: [
{
game_name: '武侠乂',//游戏名称
symbol: '国新出审[2019]3526号',//文号
publishing_number: 'ISBN 978-7-498-07137-8',//出版物号
operation_record: '网络游戏运营备案',//游戏运营证照
publish_time: '2019-12-20',//出版时间
declaration_category: '客户端',//申报类别
publishing_record: '网络游戏出版备案',//游戏出版证照
industry_type: '文化、体育和娱乐业,科学研究和技术服务业',//行业类型
publishing_unit: '安徽新华电子音像出版社',//出版单位
operation_unit: '皖新文化科技有限公司' //运营单位
}
]
},
bizmsg: 'empty'
}
```
## **<a name="licenseCountByAuthor"> 获取企业证照信息数量</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/licenseCountByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:licenseCountByAuthor
``` javascript
{
"author": "中国专利信息中心"//公司名称
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data: {
total: 5,
data: [
{
"key": "网络文化经营许可证",
"doc_count": 25106
},
{
"key": "广播电视节目制作经营许可证",
"doc_count": 10232
},
{
"key": "ICP许可证",
"doc_count": 4930
},
{
"key": "IDC许可证",
"doc_count": 538
},
{
"key": "EDI许可证",
"doc_count": 33
}
]
},
bizmsg: 'empty'
}
```
## **<a name="licenseListByAuthor"> 获取企业证照信息列表</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/licenseListByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:licenseListByAuthor
``` javascript
{
"author": "中国专利信息中心",//公司名称
"licence":""//证照类型,取值:[参见上个接口返回结果]
"page_size":10,
"current_page":0
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data: {
total: 1,
data: [
{
start_date:'2010-01-01',//开始时间
end_date: '2022-09-18',//到期时间
licence: 'IDC许可证',//证照类型
licence_no: 'B1-20172237',//证书编号
companyName: '上海橙域网络科技有限公司',//企业名称
service_category: '互联网数据中心业务、互联网接入服务业务',//业务种类
industry_type: '信息传输、软件和信息技术服务业'//行业类型
}
]
},
bizmsg: 'empty'
}
```
## **<a name="ipCountByAuthor"> 获取企业域名信息数量</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/ipCountByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:ipCountByAuthor
``` javascript
{
"author": "中国专利信息中心"//公司名称
}
```
#### 返回结果
```javascript
{ status: 0, msg: '操作成功', data: 5370, bizmsg: 'empty' }
```
## **<a name="ipListByAuthor"> 获取企业域名信息列表</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/ipListByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:ipListByAuthor
``` javascript
{
"author": "中国专利信息中心",//公司名称
"page_size":10,
"current_page":0
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"total": 1,
"data": [
{
"card_num": "合字B1.B2-20090001",//备案号
"web_adress": "http://202.108.152.218:8088/IcpProject_ISP/",//域名信息
"phone": "010-65195500",//电话
"company_name": "东方口岸科技有限公司",//公司名
"phone2": null,//电话2
"phone1": "86-010-65195500"//电话1
}
]
},
"bizmsg": "empty",
"requestId": "0af38a83679640b380d149e9dd4283de"
}
```
## **<a name="getQccBranches"> 获取企业的分支机构(从企查查获取)</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/getQccBranches]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getQccBranches
``` javascript
{
"author": "中国专利信息中心"//公司名称
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": [
{
"CompanyId": "0e0a10f1836581a149f94d5acc8b6e57",
"RegNo": "913301000536684269",
"Name": "淘宝(中国)软件有限公司杭州分公司",
"BelongOrg": "杭州市市场监督管理局",
"CreditCode": null,
"OperName": null
},
{
"CompanyId": "71778d7fbdff57abbee278e176ea5177",
"RegNo": "F07696",
"Name": "淘宝(中国)软件有限公司北京分公司",
"BelongOrg": "北京市工商行政管理局",
"CreditCode": null,
"OperName": null
},
{
"CompanyId": "eeeb65c2f4db65f7fc741976eba86e55",
"RegNo": "9111010568690357X0",
"Name": "北京朝阳分公司",
"BelongOrg": "北京市工商行政管理局朝阳分局",
"CreditCode": null,
"OperName": null
}
],
"bizmsg": "empty",
"requestId": "aef807873b8d4d0da53e3866bfba132d"
}
```
## **<a name="getcountAll"> 获取企业所有证照数量</a>**
[返回到目录](#menu)
##### URL
[/action/enterpriseQuery/getcountAll]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getcountAll
``` javascript
{
"author": "中国专利信息中心"//公司名称
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"知产证照": 764,
"互联网经营": 0,
"食品": 0,
"网络文化": 0,
"特种资质": 1
},
"bizmsg": "empty",
"requestId": "b31ff49f10f0457481228804a9711f18"
}
```
\ No newline at end of file
<a name="menu" href="/doc">返回主目录</a>
1. [企业近似查询](#getCompanyInfoByLikeName)
1. [企业注册信息精确查询](#getEntregistryByCompanyName)
1. [工商核名](#icheming)
## **<a name="getCompanyInfoByLikeName"> 企业近似查询</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getCompanyInfoByLikeName
``` javascript
{
"likestr": "北京"
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": [
{
"entId": 188568958,
"province": "北京",
"domainEntName": "爱陌客(北京)文化传媒有限责任公司",
"entName": "爱陌客(北京)文化传媒有限责任公司",
"entLegalperson": "王林",
"entStatus": "存续",
"capitalUnit": "万人民币",
"capitalStandard": "50000000.000",
"foundedTime": "2019-4-24",
"regLocation": "北京市顺义区高丽营镇北高路99号4号楼2层202室",
"creditCode": "91110113MA01JPD53X"
},
{
"entId": 140981646,
"province": "北京",
"domainEntName": "中国铁路北京局集团有限公司",
"entName": "中国铁路北京局集团有限公司",
"entLegalperson": "赵春雷",
"entStatus": "存续",
"capitalUnit": null,
"capitalStandard": "24895969.000",
"foundedTime": "1993-4-22",
"regLocation": "北京市海淀区复兴路6号",
"creditCode": "91110000100013669B"
}
],
"requestid": "0f6a38044034475eb47e80a78d3bdd6c"
}
```
## **<a name="getEntregistryByCompanyName"> 企业注册信息精确查询</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getEntregistryByCompanyName
``` javascript
{
"companyName":"北京创知厚德科技有限公司"
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"name": "北京创知厚德科技有限公司",
"legalRepresentative": "王静波",
"managementState": "存续",
"registeredCapital": "100.000万人民币",
"foundedTime": "",
"creditCode": "91110105MA00723E4F",
"registrID": "110105021672563",
"organizationCode": "MA00723E4",
"companyType": "0",
"registerOffice": "北京市工商行政管理局朝阳分局",
"businessAddress": "北京市朝阳区创远路36号院10号楼1层102",
"scope": "技术开发、技术咨询、技术服务;商标代理;版权贸易;经济贸易咨询;企业策划;设计、制作、代理、发布广告;市场调查;企业管理咨询;组织文化艺术交流活动(不含演出);承办展览展示活动;影视策划;翻译服务;酒店管理;销售文具用品、体育用品、机械设备、五金交电(不从事实体店铺经营)、电子产品、通讯设备、计算机、软件及辅助设备;工程和技术研究;计算机系统服务;基础软件服务;应用软件服务(不含医用软件);软件开发;出租办公用房;机动车公共停车场服务;会议服务;房地产信息咨询;房地产开发;物业管理。(企业依法自主选择经营项目,开展经营活动;依法须经批准的项目,经相关部门批准后依批准的内容开展经营活动;不得从事本市产业政策禁止和限制类项目的经营活动。)",
"dateIssue": "2018-3-9",
"companyProvince": "北京",
"companyOrgType": "有限责任公司",
"businessTerm": "2016-7-20至2036-7-19",
"requestId": "a4e2b6fdd079427a9291f491058987e3"
},
"requestId": "a66073a67d454559a10f2961c83ace37"
}
```
## **<a name="icheming"> 工商核名</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:icheming
``` javascript
{
"cityname":"北京",//城市名称
"keyword":"创知",//公司名称
"btname":"科技",//行业名称
"orgname":"有限公司",//公司类型名称
"sitcity":1
//地区在名称中的位置,eg:
// 1: cityname + keyword + btname + orgname
// 2: keywords = keyword + (cityname) + btname + orgname
// 3: keywords = keyword + btname + (cityname) +orgname
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"code":"200",
"level":"低",//通过核名的通过率,值:“高”,“中”,低
"point":400,//核名的评分
"cityList":[//与字号一致的地区名称列表
],
"brandList":[//与字号相同的驰名商标列表
],
"sensitiveList":[//与字号相同的敏感词列表
],
"similarCityList":[//与字号名称相似公司列表
{
"id":0,
"name":"北京<em>创知</em>厚德科技有限公司",//企业名称
"title":"",
"pinyin":"",//如是拼音相同,返回命中词的拼音;其他返回“”
"per":90,//相似度评分,约值
"type":"",
"levels":"高"
},
{
"id":0,
"name":"北京<em>创知</em>翼网络科技有限公司",
"title":"",
"pinyin":"",
"per":86,
"type":"",
"levels":"高"
},
{
"id":0,
"name":"北京领<em>创知</em>域文化科技有限公司",
"title":"",
"pinyin":"",
"per":83,
"type":"",
"levels":"高"
}
],
"identicalCityList":[//与地区、字号、行业相同公司列表
{
"id":0,
"name":"北京<em>创知</em>科技有限公司",
"title":"",
"pinyin":"",
"per":100,
"type":"",
"levels":"高"
}
],
"msg":"查询完成"
},
"bizmsg":"empty",
"requestid":"d90f8647d1ce499d93b92a9827e9860a"
}
```
\ No newline at end of file
<a name="menu" href="/doc">返回主目录</a>
1. [商标精确检索接口](#findTrademarkNameAccurate)
1. [近似商标查询接口](#findTrademarkName)
1. [商标申请号查询接口](#findTrademarkzchAccurate)
1. [申请人查询接口](#findTrademarkzcr)
1. [获取检索图片url](#getCropperPic)
1. [图形检索](#imagequery)
1. [图形检索查询](#findImageSearch)
1. [商标详情查询接口](#tradeMarkDetail)
1. [最新商标查询](#sbzuixinsearch)
1. [近12期初审公告查询接口](#noticequeryTMZCSQ)
1. [公告列表检索接口](#noticequery)
1. [注册公告详情查询](#noticezcggsearch)
1. [初审公告详情查询接口](#noticesearch)
1. [查询商标申请企业信息接口](#getCompanyInfoNoUser)
1. [尼斯详情接口](#getNclDetail)
1. [获取尼斯群组](#gettwoNcl)
1. [尼斯分类检索](#nclFuwuSearch)
1. [商标智能分析](#bycznfx)
1. [商标报告](#tmreport)
## **<a name="findTrademarkNameAccurate"> 商标精确检索接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:findTrademarkNameAccurate
``` javascript
{
"tmName": "萌颜",//商标名称
"sqlbtabkey": "",//商标类别
"flzttabkey": "",//法律状态
"sqnftabkey": "",//申请年份
"ncl": [],//尼斯大类
"xcl": [],//尼斯群组
"nclNum": [],//尼斯大类
"pageSize": 20,//每页数量
"currentPage": 1 //当前页
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"rows": [
{
"sbmc": "萌颜",//商标名称
"sbpy": null,//商标拼音
"sbyw": null,//商标英文
"gjfl": "28",//国际分类
"gjflname": "28类 健身器材",//国际分类名称
"sbzch": "37208280",//商标注册号
"sblx": "普通商标",//商标类型
"sbzt": "申请中",//商标状态
"sqrq": "2019-04-01",//申请日期
"csrq": "",//初审日期
"zcrq": "",//注册日期
"csggym": null,//初审公告页码
"zcr": "北京联大共享科技有限公司",//注册人
"jzrq": "",//截止日期
"csggqh": "",//初审公告期号
"zcggqh": "",//注册公告期号
"csgg": null,//初审公告
"zcgg": null,//注册公告
"zcggym": null,//注册公告页码
"yzcr": null,//原注册人
"zcdz": "北京市房山区良乡凯旋大街建设路18号-D740",//注册地址
"zcren": null,//注册人
"zcdzen": null,//注册地址英文
"dljg": "北京创知厚德科技有限公司",//代理机构
"zxzt": "",//最新状态
"spfwxm": "",//商品服务码
"lcxx": "",//流程信息
"sbqz": "2812,2804,2803,2807,2802,2801",//商标群组
"logo": "http://43.247.184.94:7170/Img/000/372/082/80A/1412d976-0078-47ec-bcd7-8c631dec9ff6.jpg"//商标图样
}
],
"code_counts": [//尼斯大类聚合统计
{
"key": "3",
"keyvalue": "03类 日化用品",//大类名称
"keycount": 3 //大类数量-----------------以下雷同
},
{
"key": "9",
"keyvalue": "09类 科学仪器",
"keycount": 3
},
{
"key": "10",
"keyvalue": "10类 医疗器械",
"keycount": 1
},
{
"key": "14",
"keyvalue": "14类 珠宝钟表",
"keycount": 1
},
{
"key": "18",
"keyvalue": "18类 皮革皮具",
"keycount": 3
},
{
"key": "20",
"keyvalue": "20类 家具",
"keycount": 1
},
{
"key": "25",
"keyvalue": "25类 服装鞋帽",
"keycount": 1
},
{
"key": "26",
"keyvalue": "26类 钮扣拉链",
"keycount": 1
},
{
"key": "27",
"keyvalue": "27类 地毯席垫",
"keycount": 2
},
{
"key": "28",
"keyvalue": "28类 健身器材",
"keycount": 1
},
{
"key": "35",
"keyvalue": "35类 广告销售",
"keycount": 1
},
{
"key": "38",
"keyvalue": "38类 通讯服务",
"keycount": 1
},
{
"key": "41",
"keyvalue": "41类 教育娱乐",
"keycount": 1
},
{
"key": "42",
"keyvalue": "42类 科技服务",
"keycount": 2
},
{
"key": "44",
"keyvalue": "44类 医疗园艺",
"keycount": 1
},
{
"key": "45",
"keyvalue": "45类 社会服务",
"keycount": 1
}
],
"status_counts": [//商标状态聚合
{
"key": 1,
"keyvalue": "申请中",//状态名称
"keycount": 3 //数量
},
{
"key": 3,
"keyvalue": "已注册",
"keycount": 16
},
{
"key": 4,
"keyvalue": "已无效",
"keycount": 5
}
],
"no_code_counts": [//未注册大类统计
{
"name": "01类 化学原料" //大类名称
},
{
"name": "02类 颜料油漆"
},
{
"name": "04类 燃料油脂"
},
{
"name": "05类 医药"
},
{
"name": "06类 金属材料"
},
{
"name": "07类 机械设备"
},
{
"name": "08类 手工器械"
},
{
"name": "11类 灯具空调"
},
{
"name": "12类 运输工具"
},
{
"name": "13类 军火烟火"
},
{
"name": "15类 乐器"
},
{
"name": "16类 办公用品"
},
{
"name": "17类 橡胶制品"
},
{
"name": "19类 建筑材料"
},
{
"name": "21类 厨房洁具"
},
{
"name": "22类 绳网袋蓬"
},
{
"name": "23类 纱线丝"
},
{
"name": "24类 布料床单"
},
{
"name": "29类 食品"
},
{
"name": "30类 方便食品"
},
{
"name": "31类 农林生鲜"
},
{
"name": "32类 啤酒饮料"
},
{
"name": "33类 酒"
},
{
"name": "34类 烟草烟具"
},
{
"name": "36类 金融物管"
},
{
"name": "37类 建筑修理"
},
{
"name": "39类 运输贮藏"
},
{
"name": "40类 材料加工"
},
{
"name": "43类 餐饮住宿"
}
],
"year_counts": [//注册年份统计
{
"key": 2019,//年份
"keycount": 3//数量
},
{
"key": 2018,
"keycount": 7
},
{
"key": 2017,
"keycount": 8
},
{
"key": 2016,
"keycount": 3
},
{
"key": 2015,
"keycount": 3
}
],
"count": 24 //总数
},
"bizmsg": "empty"
}
```
## **<a name="findTrademarkName"> 近似商标查询接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:findTrademarkName
``` javascript
{
"tmName": "萌颜",//商标名称
"sqlbtabkey": "",//商标类别
"flzttabkey": "",//法律状态
"sqnftabkey": "",//申请年份
"ncl": [],//尼斯大类
"xcl": [],//尼斯群组
"nclNum": [],//尼斯大类
"sbtjdata":["近似", "变字", "拼音", "同义词", "形近字", "换序", "包含该商标"],//商标筛选条件
"pageSize": 20,//每页数量
"currentPage": 1 //当前页
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"rows": [
{
"sbmc": "萌颜",//商标名称
"sbpy": null,//商标拼音
"sbyw": null,//商标英文
"gjfl": "28",//国际分类
"gjflname": "28类 健身器材",//国际分类名称
"sbzch": "37208280",//商标注册号
"sblx": "普通商标",//商标类别
"sbzt": "申请中",//商标状态
"sqrq": "2019-04-01",//申请日期
"csrq": "",//初审日期
"zcrq": "",//注册日期
"csggym": null,//初审公告页码
"zcr": "北京联大共享科技有限公司",//注册人
"jzrq": "",//截止日期
"csggqh": "",//初审公告期号
"zcggqh": "",//注册公告期号
"csgg": null,//初审公告
"zcgg": null,//注册公告
"zcggym": null,//注册公告页码
"yzcr": null,//原注册人
"zcdz": "北京市房山区良乡凯旋大街建设路18号-D740",//注册地址
"zcren": null,//注册人英文
"zcdzen": null,//注册地址英文
"dljg": "北京创知厚德科技有限公司",//代理机构
"zxzt": "",//最新状态
"spfwxm": "",//商品服务项目
"lcxx": "",//流程信息
"sbqz": "2812,2804,2803,2807,2802,2801",//商标群组
"logo": "http://43.247.184.94:7170/Img/000/372/082/80A/1412d976-0078-47ec-bcd7-8c631dec9ff6.jpg"//商标图样
}
],
"code_counts": [//尼斯大类统计
{
"key": "3",
"keyvalue": "03类 日化用品",//大类名称
"keycount": 3//数量
},
{
"key": "9",
"keyvalue": "09类 科学仪器",
"keycount": 3
},
{
"key": "10",
"keyvalue": "10类 医疗器械",
"keycount": 1
},
{
"key": "14",
"keyvalue": "14类 珠宝钟表",
"keycount": 1
},
{
"key": "18",
"keyvalue": "18类 皮革皮具",
"keycount": 3
},
{
"key": "20",
"keyvalue": "20类 家具",
"keycount": 1
},
{
"key": "25",
"keyvalue": "25类 服装鞋帽",
"keycount": 1
},
{
"key": "26",
"keyvalue": "26类 钮扣拉链",
"keycount": 1
},
{
"key": "27",
"keyvalue": "27类 地毯席垫",
"keycount": 2
},
{
"key": "28",
"keyvalue": "28类 健身器材",
"keycount": 1
},
{
"key": "35",
"keyvalue": "35类 广告销售",
"keycount": 1
},
{
"key": "38",
"keyvalue": "38类 通讯服务",
"keycount": 1
},
{
"key": "41",
"keyvalue": "41类 教育娱乐",
"keycount": 1
},
{
"key": "42",
"keyvalue": "42类 科技服务",
"keycount": 2
},
{
"key": "44",
"keyvalue": "44类 医疗园艺",
"keycount": 1
},
{
"key": "45",
"keyvalue": "45类 社会服务",
"keycount": 1
}
],
"status_counts": [//状态统计
{
"key": 1,
"keyvalue": "申请中",//状态
"keycount": 3//数量
},
{
"key": 3,
"keyvalue": "已注册",
"keycount": 16
},
{
"key": 4,
"keyvalue": "已无效",
"keycount": 5
}
],
"no_code_counts": [//未注册尼斯大类
{
"name": "01类 化学原料"
},
{
"name": "02类 颜料油漆"
},
{
"name": "04类 燃料油脂"
},
{
"name": "05类 医药"
},
{
"name": "06类 金属材料"
},
{
"name": "07类 机械设备"
},
{
"name": "08类 手工器械"
},
{
"name": "11类 灯具空调"
},
{
"name": "12类 运输工具"
},
{
"name": "13类 军火烟火"
},
{
"name": "15类 乐器"
},
{
"name": "16类 办公用品"
},
{
"name": "17类 橡胶制品"
},
{
"name": "19类 建筑材料"
},
{
"name": "21类 厨房洁具"
},
{
"name": "22类 绳网袋蓬"
},
{
"name": "23类 纱线丝"
},
{
"name": "24类 布料床单"
},
{
"name": "29类 食品"
},
{
"name": "30类 方便食品"
},
{
"name": "31类 农林生鲜"
},
{
"name": "32类 啤酒饮料"
},
{
"name": "33类 酒"
},
{
"name": "34类 烟草烟具"
},
{
"name": "36类 金融物管"
},
{
"name": "37类 建筑修理"
},
{
"name": "39类 运输贮藏"
},
{
"name": "40类 材料加工"
},
{
"name": "43类 餐饮住宿"
}
],
"year_counts": [//年份统计
{
"key": 2019,//年份
"keycount": 3//数量
},
{
"key": 2018,
"keycount": 7
},
{
"key": 2017,
"keycount": 8
},
{
"key": 2016,
"keycount": 3
},
{
"key": 2015,
"keycount": 3
}
],
"count": 24//总数
},
"bizmsg": "empty"
}
```
## **<a name="findTrademarkzchAccurate"> 商标申请号查询接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:findTrademarkzchAccurate
``` javascript
{
"regNum": "5912089",//注册号
"sqlbtabkey": "",//申请类别
"flzttabkey": "",//法律状态
"sqnftabkey": "",//申请年份
"xcl": [],//商标群组
"pageSize": 20,//每页数量
"currentPage": 1//当前页
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"rows": [
{
"sbmc": "张三",//商标名称
"sbpy": "zhangsan",//商标拼音
"sbyw": null,//商标英文
"gjfl": "9",//国际分类
"gjflname": "09类 科学仪器",//国际分类名称
"sbzch": "5912089",//商标注册号
"sblx": "特殊商标",//商标类型
"sbzt": "已注册",//商标状态
"sqrq": "2007-02-12",//申请日期
"csrq": "2009-09-13",//初审日期
"zcrq": "2009-12-13",//注册日期
"csggym": 1225,//初审公告页码
"zcr": "魏文道***",//注册人
"jzrq": "2019-12-13",//截止日期
"csggqh": "第1183期",//初审公告期号
"zcggqh": "第1195期",//注册公告期号
"csgg": 1183,//初审公告
"zcgg": 1195,//注册公告
"zcggym": 125,//注册公告页码
"yzcr": "魏文道441523********5511",//原注册人
"zcdz": "广东省东莞市谢岗镇金海路26号",//注册地址
"zcren": null,//注册人英文
"zcdzen": null,//注册地址英文
"dljg": "深圳市顺天达专利商标代理有限公司",//代理机构
"zxzt": "",//最新状态
"spfwxm": "",//商品服务项目
"lcxx": "",//流程信息
"sbqz": "0919",//商标群组
"logo": "http://43.247.184.94:7170/Img/000/059/120/89A/d09d464f-d709-44bb-b635-16a86487e96d.jpg"//商标图样
}
],
"code_counts": [//尼斯大类统计
{
"key": "9",
"keyvalue": "09类 科学仪器",//大类名称
"keycount": 1 //数量
}
],
"status_counts": [//状态统计
{
"key": 3,
"keyvalue": "已注册",//状态
"keycount": 1 //数量
}
],
"year_counts": [//年份统计
{
"key": 2007,//年份
"keycount": 1//数量
}
],
"count": 1//总数
},
"bizmsg": "empty"
}
```
## **<a name="findTrademarkzcr"> 申请人查询接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:findTrademarkzcr
``` javascript
{
"regMan": "北京联大共享科技",//申请人
"sqlbtabkey": "",//申请类别
"flzttabkey": "",//法律状态
"sqnftabkey": "",//申请年份
"zcrname": "",//注册人姓名
"xcl": [],//尼斯群组
"pageSize": 20,//每页数量
"currentPage": 1//当前页
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"rows": [
{
"sbmc": "清仕",//商标名称
"sbpy": null,//商标拼音
"sbyw": null,//商标英文
"gjfl": "21",//国际分类
"gjflname": "21类 厨房洁具",//国际分类名称
"sbzch": "37560296",//商标注册号
"sblx": "普通商标",//商标类型
"sbzt": "申请中",//商标状态
"sqrq": "2019-04-16",//申请日期
"csrq": "",//初审日期
"zcrq": "",//注册日期
"csggym": null,//初审公告页码
"zcr": "北京联大共享科技有限公司",//注册人
"jzrq": "",//截止日期
"csggqh": "",//初审公告期号
"zcggqh": "",//注册公告期号
"csgg": null,//初审公告
"zcgg": null,//注册公告
"zcggym": null,//注册公告页码
"yzcr": null,//原注册人
"zcdz": "北京市房山区良乡凯旋大街建设路18号-D740",//注册地址
"zcren": null,//注册人英文
"zcdzen": null,//注册地址英文
"dljg": "北京创知厚德科技有限公司",//代理机构
"zxzt": "",//最新状态
"spfwxm": "",//商品服务项目
"lcxx": "",//流程信息
"sbqz": "2106,2107,2108,2101,2105,2112,2110,2114",//商标群组
"logo": "http://43.247.184.94:7170/Img/000/375/602/96A/23d3b156-bc42-4413-91cf-55249d165a12.jpg"//商标图样
}
],
"code_counts": [//尼斯大类统计
{
"key": "3",
"keyvalue": "03类 日化用品",//大类名称
"keycount": 2//数量
},
{
"key": "9",
"keyvalue": "09类 科学仪器",
"keycount": 8
},
{
"key": "14",
"keyvalue": "14类 珠宝钟表",
"keycount": 1
},
{
"key": "16",
"keyvalue": "16类 办公用品",
"keycount": 3
},
{
"key": "21",
"keyvalue": "21类 厨房洁具",
"keycount": 1
},
{
"key": "25",
"keyvalue": "25类 服装鞋帽",
"keycount": 2
},
{
"key": "26",
"keyvalue": "26类 钮扣拉链",
"keycount": 1
},
{
"key": "28",
"keyvalue": "28类 健身器材",
"keycount": 2
},
{
"key": "29",
"keyvalue": "29类 食品",
"keycount": 1
},
{
"key": "30",
"keyvalue": "30类 方便食品",
"keycount": 2
},
{
"key": "32",
"keyvalue": "32类 啤酒饮料",
"keycount": 1
},
{
"key": "33",
"keyvalue": "33类 酒",
"keycount": 2
},
{
"key": "35",
"keyvalue": "35类 广告销售",
"keycount": 13
},
{
"key": "36",
"keyvalue": "36类 金融物管",
"keycount": 3
},
{
"key": "37",
"keyvalue": "37类 建筑修理",
"keycount": 1
},
{
"key": "38",
"keyvalue": "38类 通讯服务",
"keycount": 2
},
{
"key": "39",
"keyvalue": "39类 运输贮藏",
"keycount": 1
},
{
"key": "41",
"keyvalue": "41类 教育娱乐",
"keycount": 8
},
{
"key": "42",
"keyvalue": "42类 科技服务",
"keycount": 7
},
{
"key": "43",
"keyvalue": "43类 餐饮住宿",
"keycount": 5
},
{
"key": "44",
"keyvalue": "44类 医疗园艺",
"keycount": 5
},
{
"key": "45",
"keyvalue": "45类 社会服务",
"keycount": 2
}
],
"status_counts": [//状态统计
{
"key": 1,
"keyvalue": "申请中",//状态
"keycount": 13//数量
},
{
"key": 2,
"keyvalue": "已初审",
"keycount": 3
},
{
"key": 3,
"keyvalue": "已注册",
"keycount": 51
},
{
"key": 4,
"keyvalue": "已无效",
"keycount": 6
}
],
"no_code_counts": [//未注册尼斯
{
"name": "01类 化学原料"
},
{
"name": "02类 颜料油漆"
},
{
"name": "04类 燃料油脂"
},
{
"name": "05类 医药"
},
{
"name": "06类 金属材料"
},
{
"name": "07类 机械设备"
},
{
"name": "08类 手工器械"
},
{
"name": "10类 医疗器械"
},
{
"name": "11类 灯具空调"
},
{
"name": "12类 运输工具"
},
{
"name": "13类 军火烟火"
},
{
"name": "15类 乐器"
},
{
"name": "17类 橡胶制品"
},
{
"name": "18类 皮革皮具"
},
{
"name": "19类 建筑材料"
},
{
"name": "20类 家具"
},
{
"name": "22类 绳网袋蓬"
},
{
"name": "23类 纱线丝"
},
{
"name": "24类 布料床单"
},
{
"name": "27类 地毯席垫"
},
{
"name": "31类 农林生鲜"
},
{
"name": "34类 烟草烟具"
},
{
"name": "40类 材料加工"
}
],
"year_counts": [//年份统计
{
"key": 2019,//年份
"keycount": 13//数量
},
{
"key": 2018,
"keycount": 34
},
{
"key": 2017,
"keycount": 11
},
{
"key": 2016,
"keycount": 9
},
{
"key": 2015,
"keycount": 6
}
],
"namecounts": [//申请人名称统计
{
"key": "北京联大共享科技有限公司",//申请人名称
"keycount": 73//数量
}
],
"count": 73//总数
},
"bizmsg": "empty"
}
```
## **<a name="getCropperPic"> 获取检索图片url</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getCropperPic
``` javascript
{
"base64":" data:image/png;base64,iVBORw0KGg……OlzAAAAAASUVORK5CYII="//图片base64编码
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":null,
"data":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_cropper1571040784636MfaveZ.jpg",//图样url
"requestId":"05f121fed33f4009a1f4e5e2605a9c48"
}
```
## **<a name="imagequery"> 图形检索</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:imagequery
``` javascript
{
"imageUrl":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_cropper1570763366176QIe0i9.jpg"//图片地址
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"rows":[
{
"distance":0.267,//相似度
"imageid":"17116404"//近似商标注册号
},
{
"distance":0.268,
"imageid":"29245996"
},
{
"distance":0.268,
"imageid":"29246011"
},
{
"distance":0.272,
"imageid":"38183382"
},
{
"distance":0.272,
"imageid":"38188460"
},
{
"distance":0.273,
"imageid":"361846"
},
{
"distance":0.275,
"imageid":"25908176"
},
{
"distance":0.278,
"imageid":"27683726"
},
{
"distance":0.278,
"imageid":"36341625"
},
{
"distance":0.279,
"imageid":"704220"
},
{
"distance":0.28,
"imageid":"1548425"
},
{
"distance":0.347,
"imageid":"38590434"
},
{
"distance":0.347,
"imageid":"37075949"
},
{
"distance":0.347,
"imageid":"36516713"
},
{
"distance":0.347,
"imageid":"36914643"
},
{
"distance":0.347,
"imageid":"39416042"
},
{
"distance":0.347,
"imageid":"39435190"
},
{
"distance":0.347,
"imageid":"39057196"
},
{
"distance":0.347,
"imageid":"38110954"
},
{
"distance":0.347,
"imageid":"38118185"
},
{
"distance":0.347,
"imageid":"38666295"
},
{
"distance":0.347,
"imageid":"37533627"
},
{
"distance":0.347,
"imageid":"38597660"
},
{
"distance":0.347,
"imageid":"38895520"
},
{
"distance":0.347,
"imageid":"39683224"
},
{
"distance":0.347,
"imageid":"39690062"
},
{
"distance":0.347,
"imageid":"38078013"
},
{
"distance":0.347,
"imageid":"36281728"
},
{
"distance":0.348,
"imageid":"36274731"
},
{
"distance":0.348,
"imageid":"36286481"
}
],
"code_counts":[//尼斯分类统计
{
"key":"1",
"keyvalue":"01类 化学原料",//尼斯分类名称
"keycount":27//该分类近似商标数量
},
{
"key":"2",
"keyvalue":"02类 颜料油漆",
"keycount":18
},
{
"key":"3",
"keyvalue":"03类 日化用品",
"keycount":34
},
{
"key":"4",
"keyvalue":"04类 燃料油脂",
"keycount":7
},
{
"key":"5",
"keyvalue":"05类 医药",
"keycount":36
},
{
"key":"6",
"keyvalue":"06类 金属材料",
"keycount":29
},
{
"key":"7",
"keyvalue":"07类 机械设备",
"keycount":41
},
{
"key":"8",
"keyvalue":"08类 手工器械",
"keycount":12
},
{
"key":"9",
"keyvalue":"09类 科学仪器",
"keycount":160
},
{
"key":"10",
"keyvalue":"10类 医疗器械",
"keycount":25
},
{
"key":"11",
"keyvalue":"11类 灯具空调",
"keycount":41
},
{
"key":"12",
"keyvalue":"12类 运输工具",
"keycount":26
},
{
"key":"13",
"keyvalue":"13类 军火烟火",
"keycount":2
},
{
"key":"14",
"keyvalue":"14类 珠宝钟表",
"keycount":16
},
{
"key":"15",
"keyvalue":"15类 乐器",
"keycount":2
},
{
"key":"16",
"keyvalue":"16类 办公用品",
"keycount":47
},
{
"key":"17",
"keyvalue":"17类 橡胶制品",
"keycount":10
},
{
"key":"18",
"keyvalue":"18类 皮革皮具",
"keycount":23
},
{
"key":"19",
"keyvalue":"19类 建筑材料",
"keycount":10
},
{
"key":"20",
"keyvalue":"20类 家具",
"keycount":24
},
{
"key":"21",
"keyvalue":"21类 厨房洁具",
"keycount":17
},
{
"key":"22",
"keyvalue":"22类 绳网袋蓬",
"keycount":5
},
{
"key":"23",
"keyvalue":"23类 纱线丝",
"keycount":5
},
{
"key":"24",
"keyvalue":"24类 布料床单",
"keycount":19
},
{
"key":"25",
"keyvalue":"25类 服装鞋帽",
"keycount":90
},
{
"key":"26",
"keyvalue":"26类 钮扣拉链",
"keycount":10
},
{
"key":"27",
"keyvalue":"27类 地毯席垫",
"keycount":8
},
{
"key":"28",
"keyvalue":"28类 健身器材",
"keycount":23
},
{
"key":"29",
"keyvalue":"29类 食品",
"keycount":27
},
{
"key":"30",
"keyvalue":"30类 方便食品",
"keycount":27
},
{
"key":"31",
"keyvalue":"31类 农林生鲜",
"keycount":14
},
{
"key":"32",
"keyvalue":"32类 啤酒饮料",
"keycount":16
},
{
"key":"33",
"keyvalue":"33类 酒",
"keycount":11
},
{
"key":"34",
"keyvalue":"34类 烟草烟具",
"keycount":5
},
{
"key":"35",
"keyvalue":"35类 广告销售",
"keycount":161
},
{
"key":"36",
"keyvalue":"36类 金融物管",
"keycount":30
},
{
"key":"37",
"keyvalue":"37类 建筑修理",
"keycount":27
},
{
"key":"38",
"keyvalue":"38类 通讯服务",
"keycount":31
},
{
"key":"39",
"keyvalue":"39类 运输贮藏",
"keycount":23
},
{
"key":"40",
"keyvalue":"40类 材料加工",
"keycount":14
},
{
"key":"41",
"keyvalue":"41类 教育娱乐",
"keycount":63
},
{
"key":"42",
"keyvalue":"42类 科技服务",
"keycount":104
},
{
"key":"43",
"keyvalue":"43类 餐饮住宿",
"keycount":12
},
{
"key":"44",
"keyvalue":"44类 医疗园艺",
"keycount":21
},
{
"key":"45",
"keyvalue":"45类 社会服务",
"keycount":20
}
],
"status_counts":[//商标状态统计
{
"key":1,
"keyvalue":"申请中",//状态名称
"keycount":332//该状态近似商标数量
},
{
"key":2,
"keyvalue":"已初审",
"keycount":72
},
{
"key":3,
"keyvalue":"已注册",
"keycount":487
},
{
"key":4,
"keyvalue":"已无效",
"keycount":469
},
{
"key":5,
"keyvalue":"其他",
"keycount":3
}
],
"year_counts":[//年份统计
{
"key":2019,//年份
"keycount":320//该年份近似商标数量
},
{
"key":2018,
"keycount":235
},
{
"key":2017,
"keycount":142
},
{
"key":2016,
"keycount":55
},
{
"key":2015,
"keycount":67
},
{
"key":2014,
"keycount":75
},
{
"key":2013,
"keycount":49
},
{
"key":2012,
"keycount":33
},
{
"key":2011,
"keycount":19
},
{
"key":2010,
"keycount":10
},
{
"key":2009,
"keycount":12
},
{
"key":2008,
"keycount":5
},
{
"key":2007,
"keycount":5
},
{
"key":2006,
"keycount":17
},
{
"key":2005,
"keycount":13
},
{
"key":2004,
"keycount":4
},
{
"key":2002,
"keycount":6
},
{
"key":2001,
"keycount":6
},
{
"key":2000,
"keycount":53
},
{
"key":1999,
"keycount":43
},
{
"key":1998,
"keycount":12
},
{
"key":1997,
"keycount":2
},
{
"key":1996,
"keycount":9
},
{
"key":1995,
"keycount":16
},
{
"key":1994,
"keycount":17
},
{
"key":1993,
"keycount":14
},
{
"key":1992,
"keycount":18
},
{
"key":1991,
"keycount":12
},
{
"key":1990,
"keycount":24
},
{
"key":1989,
"keycount":14
},
{
"key":1988,
"keycount":14
},
{
"key":1987,
"keycount":4
},
{
"key":1986,
"keycount":4
},
{
"key":1985,
"keycount":8
},
{
"key":1984,
"keycount":1
},
{
"key":1979,
"keycount":1
},
{
"key":1958,
"keycount":1
}
],
"count":1198//返回结果数量
},
"bizmsg":"empty",
"requestId":"946b1ac884224987b22739235bf0daf9"}
```
## **<a name="findImageSearch"> 图形检索查询</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:findImageSearch
``` javascript
{
"flzttabkey": 3,//商标法律状态
"pageInfo": {"pageSize": 36, "pageNo": 1},//分页对象
"sqlbtabkey": "1",//商标申请类别
"sqnftabkey": "2018",//商标申请年份
"xcl": [],//选中的商标大类下的群组
"tmRegistNumsAll":[ {"distance":0.278,"imageid":"36341625"},//近似商标注册号数组
{"distance":0.279,"imageid":"704220"},{"distance":0.28,"imageid":"1548425"},
{"distance":0.28,"imageid":"36876469"},{"distance":0.28,"imageid":"36875903"},
{"distance":0.281,"imageid":"33662215"},{"distance":0.281,"imageid":"33670346"},
{"distance":0.282,"imageid":"515429"},{"distance":0.283,"imageid":"25620072"},
{"distance":0.284,"imageid":"1639431"},{"distance":0.284,"imageid":"529431"},
{"distance":0.285,"imageid":"33659963"},{"distance":0.285,"imageid":"33660039"}
…….
]
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"rows":[
{
"sbmc":"图形",//商标名称
"sbpy":"tuxing",//商标拼音
"sbyw":null,//商标英文
"gjfl":"1",//国际分类
"gjflname":"01类 化学原料",//国际分类名称
"sbzch":"33659963",//商标注册号
"sblx":"普通商标",//商标类型
"sbzt":"已注册",//商标状态
"sqrq":"2018-09-21",//申请日期
"csrq":"2019-03-20",//初审日期
"zcrq":"2019-06-20",//注册日期
"csggym":86369,//初审公告页码
"zcr":"联测科技(广州)有限公司",//注册人
"jzrq":"2029-06-20",//截至日期
"csggqh":"第1640期",//初审公告期号
"zcggqh":"第1652期",//注册公告期号
"csgg":1640,//初审公告
"zcgg":1652,//注册公告
"zcggym":28530,//注册公告页码
"yzcr":"联测科技(广州)有限公司",//原注册人
"zcdz":"广东省广州市天河区金穗路1号1704-A房(仅限办公用途)",//注册地址
"zcren":null,//注册人英文
"zcdzen":null,//注册地址英文
"dljg":"深圳市海睿杰知识产权代理有限公司",//代理机构
"zxzt":"",//最新状态
"spfwxm":"",//商品服务项目
"lcxx":"",//流程信息
"logo":"http://43.247.184.94:7170/Img/000/336/599/63A/99aa881e-f256-4eec-8495-d9efa42f7b78.jpg"//商标logo
}
],
"code_counts":[//尼斯分类列表
{
"key":"1",
"keyvalue":"01类 化学原料",//尼斯分类名称
"keycount":1//该分类近似商标数量
},
{
"key":"41",
"keyvalue":"41类 教育娱乐",
"keycount":1
},
{
"key":"45",
"keyvalue":"45类 社会服务",
"keycount":1
}
],
"status_counts":[//商标状态列表
{
"key":3,
"keyvalue":"已注册",//状态名称
"keycount":1//该状态近似商标数量
}
],
"year_counts":[//年份列表
{
"key":2018,//年份
"keycount":1//该年份近似商标数量
}
],
"count":1 //返回结果数量
},
"bizmsg":"empty",
"requestId":"4cf8f88a180f45ddbb2f04e6d2e41a86"
}
```
## **<a name="tradeMarkDetail"> 商标详情查询接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:tradeMarkDetail
``` javascript
{
"sbzch": "5912089",//商标申请号
"gjfl": "9"//申请类别
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"detaildata": [
{
"sbmc": "张三",//商标名称
"sbpy": "zhangsan",//商标拼音
"sbyw": null,//商标英文
"gjfl": "9",//国际分类
"gjflname": "09类 科学仪器",//国际分类名称
"sbzch": "5912089",//商标注册号
"sblx": "特殊商标",//商标类型
"sbzt": "已注册",//商标状态
"sqrq": "2007-02-12",//申请日期
"csrq": "2009-09-13",//初审日期
"zcrq": "2009-12-13",//注册日期
"csggym": 1225,//初审公告页码
"zcr": "魏文道***",//申请人
"jzrq": "2019-12-13",//截止日期
"csggqh": "第1183期",//初审公告(期号)
"zcggqh": "第1195期",//注册公告(期号)
"csgg": 1183,//初审公告
"zcgg": 1195,//注册公告
"zcggym": 125,//注册公告页码
"yzcr": "魏文道441523********5511",//原申请人
"zcdz": "广东省东莞市谢岗镇金海路26号",//申请地址
"zcren": null,//注册人英文
"zcdzen": null,//注册地址英文
"dljg": "深圳市顺天达专利商标代理有限公司",//代理机构
"lcxx": [//流程信息
{
"name": "2009-12-13 商标注册公告(一)",//流程信息名字
"link_url": "http://sbggwj.saic.gov.cn:8000/tmann/group2/M00/4E/77/yBQCIFmHa3uAdCd8AAGF02_13jc221.jpg"//流程信息图片链接
},
{
"name": "2009-09-13 商标初步审定公告",
"link_url": "http://sbggwj.saic.gov.cn:8000/tmann/group1/M00/1C/37/yBQCH1mEncuATZuCAAGr0Zq3puQ048.jpg"
}
],
"logo": "http://43.247.184.94:7170/Img/000/059/120/89A/d09d464f-d709-44bb-b635-16a86487e96d.jpg"//商标图像地址
}
],
"nclexist": [//申请的商品服务项
{
"code": "0919",//商品服务项二级编号
"small_name": "耳塞"//商品服务项小类名称
},
{
"code": "0919",
"small_name": "防事故用手套"
},
{
"code": "0919",
"small_name": "防毒面具(非人工呼吸用)"
},
{
"code": "0919",
"small_name": "防事故、防辐射、防火用鞋"
},
{
"code": "0919",
"small_name": "耐酸衣、裙"
},
{
"code": "0919",
"small_name": "护目镜"
},
{
"code": "0919",
"small_name": "呼吸面具过滤器"
},
{
"code": "0919",
"small_name": "防水衣"
},
{
"code": "0919",
"small_name": "耐酸胶鞋"
},
{
"code": "0919",
"small_name": "耐酸手套"
}
],
"nclnotexist": [//未申请的商品服务项
{
"code": "0912",//未申请的商品服务项二级编号
"level": 2,//未申请的商品服编号等级
"name": "光电传输材料",//未申请的商品服务项小类名称
"pid": "09"//未申请的商品大类编号
},
{
"code": "0901",
"level": 2,
"name": "电子计算机及其外部设备",
"pid": "09"
},
{
"code": "0913",
"level": 2,
"name": "电器用晶体及碳素材料,电子、电气通用元件",
"pid": "09"
},
{
"code": "0903",
"level": 2,
"name": "其他办公用机械(不包括打字机、誊写机、油印机)",
"pid": "09"
},
{
"code": "0902",
"level": 2,
"name": "记录、记数检测器",
"pid": "09"
},
{
"code": "0914",
"level": 2,
"name": "电器成套设备及控制装置",
"pid": "09"
},
{
"code": "0906",
"level": 2,
"name": "信号器具",
"pid": "09"
},
{
"code": "0904",
"level": 2,
"name": "衡器",
"pid": "09"
},
{
"code": "0905",
"level": 2,
"name": "量具",
"pid": "09"
},
{
"code": "0916",
"level": 2,
"name": "灭火器具",
"pid": "09"
},
{
"code": "0910",
"level": 2,
"name": "测量仪器仪表,实验室用器具,电测量仪器,科学仪器",
"pid": "09"
},
{
"code": "0909",
"level": 2,
"name": "摄影、电影用具及仪器",
"pid": "09"
},
{
"code": "0908",
"level": 2,
"name": "音像设备",
"pid": "09"
},
{
"code": "0907",
"level": 2,
"name": "通信导航设备",
"pid": "09"
},
{
"code": "0911",
"level": 2,
"name": "光学仪器",
"pid": "09"
},
{
"code": "0915",
"level": 2,
"name": "电解装置",
"pid": "09"
},
{
"code": "0918",
"level": 2,
"name": "工业用X光机械设备",
"pid": "09"
},
{
"code": "0920",
"level": 2,
"name": "警报装置,电铃",
"pid": "09"
},
{
"code": "0921",
"level": 2,
"name": "眼镜及附件",
"pid": "09"
},
{
"code": "0922",
"level": 2,
"name": "电池,充电器",
"pid": "09"
},
{
"code": "0923",
"level": 2,
"name": "电影片,已曝光材料",
"pid": "09"
},
{
"code": "0924",
"level": 2,
"name": "单一商品",
"pid": "09"
}
]
},
"bizmsg": "empty"
}
```
## **<a name="sbzuixinsearch"> 最新商标查询</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:sbzuixinsearch
``` javascript
{}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"zuixinshouli":"2019-08-30",//最新受理
"zuixinchushen":"2019-04-30",//最新初审
"zuixinxiazheng":"2019-02-13"//最新下证
},
"bizmsg":"empty",
"requestId":"d483ffa51bcf49de9e10eec53744a2cc"
}
```
## **<a name="noticequeryTMZCSQ"> 近12期初审公告查询接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:noticequeryTMZCSQ
``` javascript
{
"noticetype": "TMZCSQ"//默认参数TMZCSQ
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"rows": [
{
"notice_issue": 1658,//公告期号
"date": "2019-08-06",//初审公告日期
"enddate": "2019-11-06",//异议申请截止日期
"lastday": "剩余84天"//异议申请剩余时间
},
{
"notice_issue": 1657,
"date": "2019-07-27",
"enddate": "2019-10-27",
"lastday": "剩余74天"
},
{
"notice_issue": 1656,
"date": "2019-07-20",
"enddate": "2019-10-20",
"lastday": "剩余67天"
},
{
"notice_issue": 1655,
"date": "2019-07-13",
"enddate": "2019-10-13",
"lastday": "剩余60天"
},
{
"notice_issue": 1654,
"date": "2019-07-06",
"enddate": "2019-10-06",
"lastday": "剩余53天"
},
{
"notice_issue": 1653,
"date": "2019-06-27",
"enddate": "2019-09-27",
"lastday": "剩余44天"
},
{
"notice_issue": 1652,
"date": "2019-06-20",
"enddate": "2019-09-20",
"lastday": "剩余37天"
},
{
"notice_issue": 1651,
"date": "2019-06-13",
"enddate": "2019-09-13",
"lastday": "剩余30天"
},
{
"notice_issue": 1650,
"date": "2019-06-06",
"enddate": "2019-09-06",
"lastday": "剩余23天"
},
{
"notice_issue": 1649,
"date": "2019-05-27",
"enddate": "2019-08-27",
"lastday": "剩余13天"
},
{
"notice_issue": 1648,
"date": "2019-05-20",
"enddate": "2019-08-20",
"lastday": "剩余6天"
},
{
"notice_issue": 1647,
"date": "2019-05-13",
"enddate": "2019-08-13",
"lastday": "已过期0天"
}
],
"selectdata": [//下拉框数据
{
"value": 1658,//下拉框数据值,公告期号
"label": "1658 (2019-08-06)"//下拉框数据标签,公告期号及时间
},
{
"value": 1657,
"label": "1657 (2019-07-27)"
},
{
"value": 1656,
"label": "1656 (2019-07-20)"
},
{
"value": 1655,
"label": "1655 (2019-07-13)"
},
{
"value": 1654,
"label": "1654 (2019-07-06)"
},
{
"value": 1653,
"label": "1653 (2019-06-27)"
},
{
"value": 1652,
"label": "1652 (2019-06-20)"
},
{
"value": 1651,
"label": "1651 (2019-06-13)"
},
{
"value": 1650,
"label": "1650 (2019-06-06)"
},
{
"value": 1649,
"label": "1649 (2019-05-27)"
},
{
"value": 1648,
"label": "1648 (2019-05-20)"
},
{
"value": 1647,
"label": "1647 (2019-05-13)"
}
]
},
"bizmsg": "empty"
}
```
## **<a name="noticequery"> 公告列表检索接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:noticequery
``` javascript
{
"noticenumber": "1656",//公告期号
"applynumber": "",//商标申请号
"tmname": "大爱城控股",//商标名称
"applier": "",//申请人
"noticetype": "TMZCSQ",//TMZCSQ ,TMZCSQ, TMQTSQ
"nclNum": "all",//商标尼斯大类
"pageSize": 20,//每页数据
"currentPage": 1//当前页码
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"rows": [
{
"sbmc": "大爱城控股",//商标名称
"sbzch": "33640627",//商标申请号
"sblb": "5 ",//商标大类
"zcr": "大爱城投资控股有限公司",//商标申请人
"ggqh": "1656(2019-07-20)",//公告期号
"pagenumber": 3377,
"gglx": "商标初步审定公告",//流程信息
"linkurl": "http://sbggwj.saic.gov.cn:8000/tmann/group2/M00/AF/51/yBQCIF0xPSiAcUBOAAIB3iqAYk8063.jpg",//公告连接
"logo": "http://43.247.184.94:7170/Img/000/336/406/27A/6bb6ac4d-05d1-4966-ab31-7672a8b6e81b.jpg"//商标图像
},
{
"sbmc": "大爱城控股",
"sbzch": "33645726",
"sblb": "31 ",
"zcr": "大爱城投资控股有限公司",
"ggqh": "1656(2019-07-20)",
"pagenumber": 3387,
"gglx": "商标初步审定公告",
"linkurl": "http://sbggwj.saic.gov.cn:8000/tmann/group2/M00/AF/C8/yBQCIF0xRbOANqhzAAHvQXVINL4846.jpg",
"logo": "http://43.247.184.94:7170/Img/000/336/457/26A/821d2f6c-eacc-4da0-b182-bb2c5619ec5c.jpg"
},
{
"sbmc": "大爱城控股",
"sbzch": "33632043",
"sblb": "42 ",
"zcr": "大爱城投资控股有限公司",
"ggqh": "1656(2019-07-20)",
"pagenumber": 3343,
"gglx": "商标初步审定公告",
"linkurl": "http://sbggwj.saic.gov.cn:8000/tmann/group1/M00/B9/7A/yBQCH10xWPeAQ7GaAAIOqwfWFrk415.jpg",
"logo": "http://43.247.184.94:7170/Img/000/336/320/43A/ce0870b9-7f07-46c0-8da6-c21fd8428d1c.jpg"
}
],
"count": 3
},
"bizmsg": "empty"
}
```
## **<a name="noticezcggsearch"> 注册公告详情查询</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:noticezcggsearch
``` javascript
{
"sbzch":"T123",//注册公告期号
"zcggqh":607 //商标注册号
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"sbmc":null,//商标名称
"linkurl":"http://sbggwj.saic.gov.cn:8000/tmann/group2/M00/33/9F/yBQCIFmGf7WAS11IAAGcUnMc7Sg980.jpg"//公告连接
},
"bizmsg":"empty",
"requestId":"2201093d08824e53b06b9cb3ce912087"
}
```
## **<a name="noticesearch"> 初审公告详情查询接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:noticesearch
``` javascript
{
"csggqh":1663,//公告期号
"sbzch":"36280736"//商标注册号
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"sbmc":"啊",//商标名称
"linkurl":"http://sbggwj.saic.gov.cn:8000/tmann/group2/M00/CF/54/yBQCIF153tCAJBgAAAH97QxWZag867.jpg"//公告连接
},
"bizmsg":"empty",
"requestId":"f33c987535ed4803955b9f18668e8454"
}
```
## **<a name="getCompanyInfoNoUser"> 企业查询接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getCompanyInfoNoUser
``` javascript
{
"company_name":"兰庭茁华河北农业开发有限公司"//公司全名
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":null,
"data":{
"name":"兰庭茁华河北农业开发有限公司",//企业名称
"legalRepresentative":"许桂秋",//法定代表人
"managementState":"存续",//法律状态
"registeredCapital":"300.000万人民币",//注册资本
"foundedTime":"2018-4-24",//成立日期
"creditCode":"91130533MA0A294667",//统一社会信用代码
"registrID":"130533000046096",//注册号
"organizationCode":"MA0A29466",//组织机构代码
"companyType":"0",//公司类型
"registerOffice":"威县市场监督管理局",//登记机关
"businessAddress":"河北省邢台市威县第什营镇南草厂村",//企业地址
"scope":"农业种植、新能源技术研发、技术推广;农作物、果树、中药材种植;农产品、水果销售;花卉种植、销售;林木育苗;牲畜、家禽饲养、销售;观光果园管理服务;在资质等级许可的范围内从事园林绿化工程;农用机械、有机肥销售。(依法须经批准的项目,经相关部门批准后方可开展经营活动)",//营业范围
"dateIssue":"2018-4-24",//发照日期
"businessTerm":"2018-4-24至1970-1-1"//营业期限
},
"requestId":"b2c49be10b154ca896b73505f3fe8b6a"
}
```
## **<a name="getNclDetail"> 尼斯详情接口</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getNclDetail
``` javascript
{
"number": "2"//尼斯大类编码
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"classification":"第02类-",//大类名称
"construction":"颜料,清漆,漆;防锈剂和木材防腐剂;着色剂,染料;印刷、标记和雕刻用油墨;未加工的天然树脂;绘画、装饰、印刷和艺术用金属箔及金属粉。",//大类描述
"data":[//尼斯群组数据
{
"smallclassification":"0201 染料,媒染剂(不包括食用)",//群组名称
"content":"皮革染色剂020057,鞋染料020041,木材媒染剂020027,染料木提取物(染料)020112,黄桑(染料)020074,苯胺染料020052,染料木020111,藏红染料020099,靛青(染料)020086,染色剂020047,复活节彩蛋用染色纸020096,姜黄(染料)020060,染料020058,媒染剂020002,制革用媒染剂020057,着色剂020047,木材染色剂020028,茜素染料020006,",//该群组下的尼斯小类数据
"xinzeng":"硫化染料,醇溶性染料,制油漆用着色剂,苏木提取物(染料),酸性染料,天然染料,混凝土着色剂,用作染料的姜黄,文身染料,合成染料,油溶性染料,造纸用着色剂,地板用染色剂,快速染料,普鲁士蓝,碱性染料(阳离子染料),制模塑料用着色剂,制药用着色剂,塑料用染料,萘酚染料,群青染料,纺织品用着色剂,荧光增白剂(染料),合成树脂染料,靛青,直接染料,还原染料,木材染料,"//该群组下的新增非规范尼斯小类
},
{
"smallclassification":"0202 颜料(不包括食用、绝缘用),绘画、装饰、印刷和艺术用金属箔及金属粉",
"content":"色母粒C020001,家具修复用补色笔020130,艺术用油彩020127,二氧化钛(颜料)020106,烟灰色(颜料)020101,绘画、装饰、印刷和艺术用金属箔020092,绘画、装饰、印刷和艺术用金属粉020090,铅黄020089,氧化锌(颜料)020081,绘画用藤黄020076,灯黑(颜料)020073,铅白020038,赭石土(颜料)020029,胭脂树橙(颜料)020098,胭脂虫红020045,氧化钴(颜料)020044,银乳剂(颜料)020015,艺术用水彩020126,铅红020095,红丹020095,炭黑(颜料)020039,立德粉(锌钡白)C020014,黄丹020089,颜料020059,绘画用青铜粉020032,水彩固定剂020011,石棉颜料020009,着色剂020047,金胺020018,绘画用铝粉020008,",
"xinzeng":"红丹(铅红),茜红,绘画、装饰、印刷和艺术用贵金属粉,绘画、装饰、印刷和艺术用贵金属箔,朱砂红,画家、装饰家、印刷商和艺术家用铅箔,彩色颜料,纺织纤维颜料,制墨用颜料,画家、装饰家、印刷商和艺术家用有色金属箔,艺术家用颜料,无机颜料,画家、装饰家、印刷商和艺术家用铅合金粉末,画家、装饰家、印刷商和艺术家用金属粉,群青(颜料),画家、装饰家、印刷商和艺术家用铅粉,水彩颜料,化学防护颜料,钛白,画家、装饰家、印刷商和艺术家用有色金属粉,有机颜料,画家、装饰家、印刷商和艺术家用有色金属粉末,画家、装饰家、印刷商和艺术家用金属箔,丙烯颜料,制化妆品用着色剂,画家、装饰家、印刷商和艺术家用铅合金箔片,蛋彩画颜料,装饰用金属箔,艺术家用丙烯颜料,油性颜料,着色用铝粉,"
},
{
"smallclassification":"0203 食品着色剂",
"content":"食用色素020005,啤酒色素020024,食品用着色剂020005,麦芽焦糖(食品色素)020035,黄油色素020023,饮料色素020004,麦芽色素020048,焦糖(食品色素)020034,利口酒用色素020088,",
"xinzeng":"生产食物用色素,制造饮料用焦糖色素,制造食品用焦糖色素,家用食品色素,生产饮料用色素,"
},
{
"smallclassification":"0204 油墨",
"content":"复印机用碳粉C020017,文字处理机用已填充的墨盒C020002,打印机和复印机用已填充的墨盒020133,打印机和复印机用墨水020121,雕刻油墨020080,皮肤绘画用墨020069,喷墨打印机用已填充的墨盒C020016,打印机和复印机用墨粉020132,印刷油墨020066,已填充可食用墨的打印机墨盒020129,可食用墨020128,动物打印记用墨020067,制革用墨020033,激光打印机用已填充的墨盒C020015,打印机和复印机用已填充的鼓粉盒020123,印刷膏(油墨)020043,",
"xinzeng":"干油墨,印刷合成物(油墨),油印油墨,喷墨打印机用墨水,金粉油墨,已填充的喷墨打印墨盒,激光打印机用已填充的鼓粉盒,胶版印刷用油墨,文身用墨,已填充的鼓粉盒,热致变色油墨,喷墨打印机用已填充的鼓粉盒,已填充的打印机墨盒,打印机和影印机用碳粉盒(填满的),用作油墨干燥剂的催干剂,丝网印刷用油墨,凸版印刷油墨,金属油墨,静电复印用色粉,柔版印刷用胶囊香味油墨,凹版油墨,复印油墨,打印碳粉,纺织品着色用油墨,平版印刷油墨,"
},
{
"smallclassification":"0205 涂料,油漆及附料(不包括绝缘漆)",
"content":"树脂胶泥C020013,松香水C020004,油漆补片(可替换的)020125,清漆用苏模鞣料020102,防火漆020085,虫胶020077,油漆催干剂020068,瓷釉(漆)020064,油漆稀释剂020053,沥青油漆020025,粉刷用石灰浆020020,铝涂料020007,防水粉(涂料)C020012,防涂鸦涂料(油漆)020131,松节油(涂料稀释剂)020124,防污涂料020122,底漆020108,固定剂(清漆)020072,刷墙粉020062,油漆增稠剂020055,粉刷用石灰水020042,运载工具底盘底漆020040,杀菌漆020019,银镀粉020016,清漆020003,水溶性内外墙有光喷塑料C020007,防水冷胶料C020006,可赛银C020005,稀料C020003,漆020115,苯乙烯树脂漆020114,粉刷用白垩灰浆020110,油漆黏合剂020087,釉料(漆、清漆)020075,涂料(油漆)020070,青铜漆020031,油漆020001,天那水C020010,聚乙烯胶泥C020008,油漆凝结剂020087,瓷漆020065,漆稀释剂020054,运载工具底盘防蚀涂层020040,陶瓷涂料020037,屋顶毡用涂料(油漆)020036,木材涂料(油漆)020026,黑亮漆020017,磁漆C020018,信那水C020011,无黏性化学涂料(不粘锅用)C020009,油毛毡用涂料(油漆)020036,银涂料020014,",
"xinzeng":"橱柜制作用清漆,军事设备用伪装漆,家具上光用涂料,反光喷漆,清漆(非绝缘漆),有色涂料(油漆),油漆类不粘涂层(涂料),虫胶清漆,船体底壳漆,生产加工用油漆,涂料和腻子用干燥剂,标记路面用热塑性油漆,陶瓷制造用油漆,机器用油漆,地板用漆,合成树脂涂料,阻燃油漆,油性漆,油漆和油灰用黏合剂,防火油漆,陶器瓷漆,发光漆,合成涂料(油漆),运载工具涂层用透明保护剂,混凝土地面用油漆,运载工具用透明防护涂料,家具制造用油漆,车辆用防锈制剂涂层,混凝土用辐射固化涂料,汽车用漆,防腐油漆,耐热漆,木器漆,玻璃钢游泳池和水疗场所用非金属彩色表面涂层,装饰用喷涂式涂料,无溶剂油漆,房屋用漆,防涂鸦用油漆,地板保护清漆,纸涂层用漆,汽车制造用油漆,搪瓷漆,喷漆,防腐蚀涂料,防腐蚀油漆,抗风化涂料(油漆),绘画漆,混凝土地面用环氧涂料,商业船舶用防腐油漆类涂料,工艺品漆,透明涂料(油漆),用于表面涂漆做准备的底漆,调和漆,粉末涂料,外墙漆,荧光漆,内墙漆,用作涂料稀释剂的松节油,建筑油漆,防潮油漆,待涂表面用底漆,海事用油漆,建筑物外表面用彩色油漆,用作涂料干燥剂的催干剂,工业装置用油漆,具有防水特性的涂料制剂(油漆),防锈涂料,防锈漆,防水油漆,"
},
{
"smallclassification":"0206 防锈剂,木材防腐剂",
"content":"金属用保护制剂020094,金属防锈制剂020093,防锈油脂020079,羰基(木头防腐剂)020113,木材防腐油020082,防腐蚀剂020010,防锈油020083,防腐蚀带020021,木材防腐用杂酚油020056,木材防腐剂020049,防锈制剂020107,",
"xinzeng":"木材防腐用桐油,防腐用木材处理剂,防腐蚀油,防腐蚀纸,"
},
{
"smallclassification":"0207 未加工的天然树脂",
"content":"天然树脂020091,未加工的天然树脂020061,加拿大香脂020022,天然硬树脂020050,山达脂020100,松香020046,树胶脂020078,",
"xinzeng":"加拿大香脂(未加工天然树脂),未加工天然树脂,达马树脂,生产黏合剂用未加工天然树脂,"
}
]
},
"bizmsg":"empty",
"requestId":"87df01c1c9214fd29cfd555c8af680b5"
}
```
## **<a name="gettwoNcl"> 获取尼斯群组</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:gettwoNcl
``` javascript
{
"code":"1"//尼斯大类编码
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"rows":[
{
"code":"0101",//群组编码
"name":"工业气体,单质"//群组名称
},
{
"code":"0102",
"name":"用于工业、科学、农业、园艺、林业的工业化工原料"
},
{
"code":"0103",
"name":"放射性元素及其化学品"
},
{
"code":"0104",
"name":"用于工业、科学的化学品、化学制剂,不属于其他类别的产品用的化学制品"
},
{
"code":"0105",
"name":"用于农业、园艺、林业的化学品、化学制剂"
},
{
"code":"0106",
"name":"化学试剂"
},
{
"code":"0107",
"name":"摄影用化学用品及材料"
},
{
"code":"0108",
"name":"未加工的人造合成树脂,未加工塑料物质(不包括未加工的天然树脂)"
},
{
"code":"0109",
"name":"肥料"
},
{
"code":"0110",
"name":"灭火、防火用合成物"
},
{
"code":"0111",
"name":"淬火用化学制剂"
},
{
"code":"0112",
"name":"焊接用化学制剂"
},
{
"code":"0113",
"name":"食药用化学品(不包括食品用防腐盐)"
},
{
"code":"0114",
"name":"鞣料及皮革用化学品"
},
{
"code":"0115",
"name":"工业用黏合剂和胶(不包括纸用黏合剂)"
},
{
"code":"0116",
"name":"纸浆"
}
]
},
"bizmsg":"empty",
"requestId":"984601fa445c465ab3869e236ef2d8d5"
}
```
## **<a name="nclFuwuSearch"> 尼斯分类检索</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:nclFuwuSearch
``` javascript
{
"currentPage": 1,//当前页
"nclfuwu": "化学",//尼斯分类名称
"pageSize": 20//每页条数
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"rows":[
{
"nclthreecode":"C400005",//尼斯小类编码
"nclthreename":"化学试剂加工和处理",//尼斯小类名称
"ncltwocode":"4015",//尼斯群组编码
"ncltwoname":"单一服务",//尼斯群组名称
"nclonecode":"40",//尼斯大类编码
"nclonename":"40类 材料加工"//尼斯大类名称
},
{
"nclthreecode":"C070210",
"nclthreename":"林产化学设备",
"ncltwocode":"0729",
"ncltwoname":"其他化学工业用机械",
"nclonecode":"07",
"nclonename":"07类 机械设备"
},
{
"nclthreecode":"C020009",
"nclthreename":"无黏性化学涂料(不粘锅用)",
"ncltwocode":"0205",
"ncltwoname":"涂料,油漆及附料(不包括绝缘漆)",
"nclonecode":"02",
"nclonename":"02类 颜料油漆"
},
{
"nclthreecode":"C010260",
"nclthreename":"化学防腐剂",
"ncltwocode":"0104",
"ncltwoname":"用于工业、科学的化学品、化学制剂,不属于其他类别的产品用的化学制品",
"nclonecode":"01",
"nclonename":"01类 化学原料"
},
{
"nclthreecode":"C010244",
"nclthreename":"化学肥料",
"ncltwocode":"0109",
"ncltwoname":"肥料",
"nclonecode":"01",
"nclonename":"01类 化学原料"
},
{
"nclthreecode":"440115",
"nclthreename":"空中和地面化肥及其他农用化学品的喷洒",
"ncltwocode":"4404",
"ncltwoname":"农业、园艺服务",
"nclonecode":"44",
"nclonename":"44类 医疗园艺"
},
{
"nclthreecode":"420031",
"nclthreename":"化学研究",
"ncltwocode":"4211",
"ncltwoname":"提供化学研究服务",
"nclonecode":"42",
"nclonename":"42类 科技服务"
},
{
"nclthreecode":"420030",
"nclthreename":"化学服务",
"ncltwocode":"4211",
"ncltwoname":"提供化学研究服务",
"nclonecode":"42",
"nclonename":"42类 科技服务"
},
{
"nclthreecode":"420007",
"nclthreename":"化学分析",
"ncltwocode":"4211",
"ncltwoname":"提供化学研究服务",
"nclonecode":"42",
"nclonename":"42类 科技服务"
},
{
"nclthreecode":"400058",
"nclthreename":"纺织品化学处理",
"ncltwocode":"4003",
"ncltwoname":"纺织品化学处理或加工服务",
"nclonecode":"40",
"nclonename":"40类 材料加工"
},
{
"nclthreecode":"400058",
"nclthreename":"布料化学处理",
"ncltwocode":"4003",
"ncltwoname":"纺织品化学处理或加工服务",
"nclonecode":"40",
"nclonename":"40类 材料加工"
},
{
"nclthreecode":"170042",
"nclthreename":"补漏用化学合成物",
"ncltwocode":"1702",
"ncltwoname":"非金属密封减震制品",
"nclonecode":"17",
"nclonename":"17类 橡胶制品"
},
{
"nclthreecode":"100184",
"nclthreename":"非化学避孕用具",
"ncltwocode":"1006",
"ncltwoname":"性用品",
"nclonecode":"10",
"nclonename":"10类 医疗器械"
},
{
"nclthreecode":"090549",
"nclthreename":"化学仪器和器具",
"ncltwocode":"0910",
"ncltwoname":"测量仪器仪表,实验室用器具,电测量仪器,科学仪器",
"nclonecode":"09",
"nclonename":"09类 科学仪器"
},
{
"nclthreecode":"070490",
"nclthreename":"化学工业用电动机械",
"ncltwocode":"0729",
"ncltwoname":"其他化学工业用机械",
"nclonecode":"07",
"nclonename":"07类 机械设备"
},
{
"nclthreecode":"050488",
"nclthreename":"治疗谷类植物病害的化学制剂",
"ncltwocode":"0505",
"ncltwoname":"杀虫剂,除莠剂,农药",
"nclonecode":"05",
"nclonename":"05类 医药"
},
{
"nclthreecode":"050380",
"nclthreename":"化学盥洗室用消毒剂",
"ncltwocode":"0503",
"ncltwoname":"净化制剂",
"nclonecode":"05",
"nclonename":"05类 医药"
},
{
"nclthreecode":"050364",
"nclthreename":"医用或兽医用化学试剂",
"ncltwocode":"0501",
"ncltwoname":"药品,消毒剂,中药药材,药酒",
"nclonecode":"05",
"nclonename":"05类 医药"
},
{
"nclthreecode":"050363",
"nclthreename":"兽医用化学制剂",
"ncltwocode":"0504",
"ncltwoname":"兽药,动物用膳食补充剂",
"nclonecode":"05",
"nclonename":"05类 医药"
},
{
"nclthreecode":"050362",
"nclthreename":"医用化学制剂",
"ncltwocode":"0501",
"ncltwoname":"药品,消毒剂,中药药材,药酒",
"nclonecode":"05",
"nclonename":"05类 医药"
}
],
"count":235//总条数
},
"bizmsg":"empty",
"requestId":"087a6a9cdd0c437e9bfea9bab4a421ab"
}
```
## **<a name="bycznfx"> 商标智能分析</a>**
[返回到目录](#menu)
##### URL
[/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:bycznfx
``` javascript
{
"url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com//zc_2658156938078025420192511620254zqq_201903191338dcunvwio34tmznfxmb.xlsx"//上传excel文件的url
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":null,
"data":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/9akFZ1xgrQDH_1571041828099.xlsx",//结果文件地址
"requestId":"0c14f04dc187486b829e392dc87c70c6"
}
```
## **<a name="tmreport"> 商标报告</a>**
[返回到目录](#menu)
##### URL
[api/action/tmQuery/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:tmreport
``` javascript
{
"actionType":"tmreport",
"actionBody":
{
"companyname":"汉唐信通(北京)咨询股份有限公司", //公司名称
"phonenum":"", //电话  非必添
"notifyUrl":"https://icompanytest.gongsibao.com/api/addTmsgByTrademark", //回调地址  push_type 为2 时  不可为空
"email":"", //邮箱  push_type 为1 时  不可为空
"type":1, //报告类型  1 商标   2 专利
"push_type":1, //推送类型  1 邮件  2 接口
"receiverId":"001" //  用户id
}
}
```
#### 返回结果
```javascript
{"status":0,"msg":"success","data":null,"requestId":"3b8c2108ec8743c0a138081c5223f91c"}
```
<a name="menu" href="/doc">返回主目录</a>
1. [根据申请人查询聚合接口](#CommomSearchbyApplicant)
1. [根据申请人获取专利量接口](#paCountByApplicantName)
1. [根据申请人获取专利详情列表接口](#paShortListByApplicantName)
1. [根据公开或授权号获取专利详情列表接口](#paDetailsBypubNo)
1. [根据申请号获取专利详情列表接口](#paDetailsByfilingNo)
1. [根据公司名称得到软著量](#softwareCountByAuthor)
1. [根据公司名称得到软著详情](#softwareListByAuthor)
1. [根据登记号获取软著详情接口](#softwareDetailsByregNum)
1. [根据公司名称得到著作权量](#worksCountByAuthor)
1. [根据公司名称得到著作权详情接口](#worksListByAuthor)
1. [根据登记号获取著作权详情](#worksDetailsByregNum)
## **<a name="CommomSearchbyApplicant"> 根据申请人查询聚合接口</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/CommomSearchbyApplicant]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:CommomSearchbyApplicant
``` javascript
{
"applicant": "中国专利信息中心",//申请人名称
"pubtype": "发明",//专利类型:发明、实用新型、外观设计
"pubstatus": "",//专利法律状态
"filingyear": "",//申请年份
"pubyear": "",//公开年份
"pagesize": 20,
"page": 1
}
```
#### 返回结果
```javascript
{ status: 0,
msg: '操作成功',
data:
{ total: 5,
max_score: 49.434937,
hits: [
{
"_index": "bigdata_patent_bib",
"_type": "_doc",
"_id": "201410451887",
"_score": 49.5767,
"_source": {
"pub_type": "发明",
"gr_no": "CN104298662B",
"filing_name": "一种基于有机物命名实体的机器翻译方法及翻译系统",
"pub_time": "2015-01-21",
"filing_time": "2014-09-05",
"gr_time": "2017-10-10",
"filing_no": "201410451887",
"inventor_name": [
"任智军",
"张威",
"李进",
"杨婧",
"张延花"
],
"pub_status": "有效",
"applicant_name": [
"中国专利信息中心"
],
"pub_no": "CN104298662A"
}
}
] },
buckets:
{ group_by_pub_status:
{ doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [
{
"key": "有效",
"doc_count": 4
},
{
"key": "在审",
"doc_count": 1
}
]
},
group_by_filing_year:
{ doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [
{
"key": "2017",
"doc_count": 1
},
{
"key": "2014",
"doc_count": 2
},
{
"key": "2013",
"doc_count": 1
},
{
"key": "2012",
"doc_count": 1
}
]
},
group_by_pub_year:
{ doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [
{
"key": "2018",
"doc_count": 1
},
{
"key": "2015",
"doc_count": 1
},
{
"key": "2014",
"doc_count": 2
},
{
"key": "2012",
"doc_count": 1
}
]
},
group_by_pub_type:
{ doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [
{
"key": "发明",
"doc_count": 5
}
]
}
}
}
```
## **<a name="paCountByApplicantName"> 根据申请人获取专利量接口</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/paCountByApplicantName]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:paCountByApplicantName
``` javascript
{
"applicant_name": "中国专利信息中心"//申请人名称
}
```
#### 返回结果
```javascript
{ status: 0, msg: '操作成功', data: 5370, bizmsg: 'empty' }
```
## **<a name="paShortListByApplicantName"> 根据申请人获取专利详情列表</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/paShortListByApplicantName]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:paShortListByApplicantName
``` javascript
{
"applicant_name": "中国专利信息中心"//申请人名称
"page_size": 20,
"current_page": 1
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data:
{
total: 5,
data:
[
{
agency_name: '北京瑞恒信达知识产权代理事务所(普通合伙)',//代理机构名称
abstr_text:'本申请提供一种研发方向识别的方法,包括:步骤1:收集专利文献,将专利文献分为新申请文献、新失效文献和其他文献三部分,将新申请文献和新失效文献整合作为分析数据库;步骤2:生成技术主题,建立主题矩阵;步骤3:计算主题矩阵的新申请相关度和新失效相关度;步骤4:识别研发方向。利用本发明的方法,可以建立规则识别四类研发状态,分析技术研发趋势,为单位的技术研发动态、调整研发策略提供参考借鉴。',//摘要
filing_name: '一种识别研发方向的方法',//发明名称
filing_time: '2015-01-05',//申请日
filing_no: '201711426233',//申请号
gr_time: null,//授权公告日
pub_time: '2016-01-05',//公开日
main_ipc: 'G06F17/27',//主IPC
pub_type: '发明',//专利类型
gr_no: null,//授权公告号
pub_status_now: '实审',//当前状态
applicant_name: [ '中国专利信息中心' ],//申请人
inventor_name: [ '任智军', '谷威', '张威', '陈强', '范婷婷', '和兰', '谢慧', '张凯' ],//发明人
pub_no: 'CN108255807A'//公开号
}
]
},
bizmsg: 'empty'
}
```
## **<a name="paDetailsBypubNo"> 根据公开或授权号获取专利详情列表</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/paDetailsBypubNo]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:paDetailsBypubNo
``` javascript
{
"pub_no": "北京联大共享科技",
"gr_no": ""
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data:
{
total: 5,
data:
[
{
agency_name: '北京瑞恒信达知识产权代理事务所(普通合伙)',//代理机构名称
abstr_text:'本申请提供一种研发方向识别的方法,包括:步骤1:收集专利文献,将专利文献分为新申请文献、新失效文献和其他文献三部分,将新申请文献和新失效文献整合作为分析数据库;步骤2:生成技术主题,建立主题矩阵;步骤3:计算主题矩阵的新申请相关度和新失效相关度;步骤4:识别研发方向。利用本发明的方法,可以建立规则识别四类研发状态,分析技术研发趋势,为单位的技术研发动态、调整研发策略提供参考借鉴。',//摘要
filing_name: '一种识别研发方向的方法',//发明名称
filing_time: '2015-01-05',//申请日
filing_no: '201711426233',//申请号
gr_time: null,//授权公告日
pub_time: '2016-01-05',//公开日
main_ipc: 'G06F17/27',//主IPC
pub_type: '发明',//专利类型
gr_no: null,//授权公告号
pub_status_now: '实审',//当前状态
applicant_name: [ '中国专利信息中心' ],//申请人
inventor_name: [ '任智军', '谷威', '张威', '陈强', '范婷婷', '和兰', '谢慧', '张凯' ],//发明人
pub_no: 'CN108255807A'//公开号
}
]
},
bizmsg: 'empty'
}
```
## **<a name="paDetailsByfilingNo"> 根据申请号获取专利详情列表</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/paDetailsByfilingNo]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:paDetailsByfilingNo
``` javascript
{
"filingNo":"201711426233"
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "操作成功",
"data": {
"total": 1,
"data": [
{
"appl_zip": "510000",
"agency_code": "44372",
"filing_name": "一种访问网络的方法及网络设备、管理服务器",
"filing_time": "2015-01-07",
"main_ipc": "H04L29/06",
"pub_type": "发明",
"pub_status_now": "授权",
"ipc_version": "(2006.01)",
"agency_name": null,
"other_ipc": [
"H04L29/06"
],
"appl_address": "广东省广州市荔湾区中山八路6号1807房",
"abstr_text": "本发明公开了一种访问网络的方法及网络设备、管理服务器,方法包括接收终端设备发送的域名查询请求报文,其中,域名查询请求报文携带终端设备所访问的目标网站的域名;向DNS服务器转发域名查询请求报文;接收DNS服务器返回的域名查询成功应答报文,其中,域名查询成功应答报文携带目标网站的域名对应的IP地址;将域名查询成功应答报文中携带的网站的域名对应的IP地址修改为管理服务器的IP地址;将修改后的域名查询成功应答报文返回给终端设备,以使终端设备向目标网站发送网页请求报文时,网页请求报文中所携带的目的IP地址为管理服务器的IP地址。通过上述方式,本发明能够管理终端设备与网络之间交互的数据报文。",
"pct_info": {
"pct_pub_lang": "zh",
"inter_date": 1421298000,
"pct_filing_date": 1420606800,
"pct_pub_date": 1449723600,
"pct_filing_no": "PCT/CN2015/070285",
"pct_pub_no": "WO2015/184799"
},
"pub_time": "2015-04-08",
"claim_text": "1.一种访问网络的方法,其特征在于,包括:接收网页请求报文,其中,所述网页请求报文包含目的IP地址、源IP地址和终端设备所?访问的目标网站的URL地址,所述目的IP地址为管理服务器的IP地址,所述源IP地址为终端?设备的IP地址;解析所述网页请求报文,根据所述网页请求报文中携带的URL地址向DNS服务器发送域?名查询请求报文,以请求所述目标网站的IP地址;接收所述DNS服务器返回的域名查询成功应答报文,其中,所述域名查询成功应答报文?携带所述目标网站的域名对应的IP地址;将所述网页请求报文中的目的IP地址修改为所述目标网站的IP地址,以及所述网页请?求报文中的源IP地址修改为管理服务器的IP地址,向所述目标网站发送网页请求并向所述?目标网站转发所述修改后的网页请求报文;接收所述目标网站根据所述修改后的网页请求报文返回的网页请求应答报文;将所述网页请求应答报文中目的IP地址修改为所述终端设备的IP地址,并向所述终端?设备转发所述网页请求应答报文。",
"filing_no": "201580000001",
"agent_name1": "张莉",
"pub_status": "有效",
"agent_name2": null,
"applicant_name": [
"胡汉强"
],
"country_code": "81",
"img_path": "http://43.247.184.94:7170/Img/patent/china/FMZL/2015/80000/001/93b6aed0-4bf4-4d5e-9fd6-c3c4d7e3c4fc.gif",
"gr_no": "CN104509066B",
"gr_time": "2017-10-27",
"inventor_name": [
"胡汉强"
],
"prior_info": [
{
"pri_country": "CN",
"pri_date": 1401940800,
"pri_no": "2014102478520"
}
],
"pub_no": "CN104509066A"
}
]
},
"bizmsg": "empty",
"requestId": "8242362615c341e0be659f32af02fa4b"
}
```
## **<a name="softwareCountByAuthor"> 根据公司名称得到软著量</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/softwareCountByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:softwareCountByAuthor
``` javascript
{
"author":"中国专利信息中心"
}
```
#### 返回结果
```javascript
{ status: 0, msg: '操作成功', data: 5370, bizmsg: 'empty' }
```
## **<a name="softwareListByAuthor"> 根据公司名称得到软著详情</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/softwareListByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:softwareListByAuthor
``` javascript
{
"author":"",
"page_size":10,
"current_page":0
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data:
{
total: 5,
data:
[
{
reg_num: '2016SR348010',//登记号
cat_num: '30200-8500',//分类号
full_name: '美灵思(MLNX)慢性病管理系统服务器端软件',//软著名称
simple_name: 'CDMS',//软件简称
publish_time: 1470628800,//登记批准日期时间戳
reg_time: 1480568400,//登记日期时间戳
software_version: 'V1.0' //版本号
}
]
},
bizmsg: 'empty'
}
```
## **<a name="softwareDetailsByregNum"> 根据登记号获取软著详情</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/softwareDetailsByregNum]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:softwareDetailsByregNum
``` javascript
{
"reg_num": "2019SR0203965"
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data:
{
total: 5,
data:
[
{
reg_num: '2016SR348010',//登记号
cat_num: '30200-8500',//分类号
full_name: '美灵思(MLNX)慢性病管理系统服务器端软件',//软著名称
simple_name: 'CDMS',//软件简称
publish_time: 1470628800,//登记批准日期时间戳
reg_time: 1480568400,//登记日期时间戳
software_version: 'V1.0' //版本号
}
]
},
bizmsg: 'empty'
}
```
## **<a name="worksCountByAuthor"> 根据公司名称得到著作权量</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/worksCountByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:worksCountByAuthor
``` javascript
{"author":""}
```
#### 返回结果
```javascript
{ status: 0, msg: '操作成功', data: 5370, bizmsg: 'empty' }
```
## **<a name="worksListByAuthor"> 根据公司名称得到著作权详情</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/worksListByAuthor]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:worksListByAuthor
``` javascript
{
"author":"",
"page_size":10,
"current_page":0
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data:
{
total: 5,
data:
[
{
reg_num: '浙作登字-2017-F-00008752',//登记号
works_name: '奖杯系列(6810)',//作品名称
publish_time: 1500868800,//登记日期时间戳
first_publish_time: null,//首次发布日期时间戳
works_type: '美术',//类型
finish_time: 1496635200//创作完成日期时间戳
}
]
},
bizmsg: 'empty'
}
```
## **<a name="worksDetailsByregNum"> 根据登记号获取著作权详情</a>**
[返回到目录](#menu)
##### URL
[/action/patentQuery/worksDetailsByregNum]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:worksDetailsByregNum
``` javascript
{
"reg_num": "1656"
}
```
#### 返回结果
```javascript
{
status: 0,
msg: '操作成功',
data:
{
total: 5,
data:
[
{
reg_num: '浙作登字-2017-F-00008752',//登记号
works_name: '奖杯系列(6810)',//作品名称
publish_time: 1500868800,//登记日期时间戳
first_publish_time: null,//首次发布日期时间戳
works_type: '美术',//类型
finish_time: 1496635200//创作完成日期时间戳
}
]
},
bizmsg: 'empty'
}
```
<a name="menu" href="/doc">返回主目录</a>
1. [获取pc端支付二维码--不跟订单关联](#getQrCode)
1. [获取H5支付链接](#getH5PayUrl)
## **<a name="getQrCode"> 获取pc端支付二维码--不跟订单关联</a>**
[返回到目录](#menu)
##### URL
[/web/payment/paymentApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getQrCode
``` javascript
{
"uapp_id": "1", //平台渠道ID
"order_num": "1", //支付单号
"total_fee": "1",   //支付金额  分
"body_desc": "1",    //产品名称
"opType": "1", // 支付方式  alipay阿里  wx微信
}
```
#### 返回结果
```javascript
{
"status": 0,  //0 成功 小于0  失败
"msg": "SUCCESS",
"data": {
"payinfo": "https://syb.allinpay.com/apiweb/h5unionpay/native?key=l6lfPuHDErJrTW%2FN7WxSlg4n", //二维码url
"reqsn": "dfghrtjjn_1",  ////商户订单号_appid
"chnltrxid": "112094120001042656", // 支付渠道交易单号,如支付宝,微信平台的交易单号
"trxid": "112094120001042656",  // 交易单号,平台的交易流水号
"trxstatus": "0000"   // 交易状态,0000:交易成功、1001:交易不存在、
},
"requestId": "058244807fff4ab388bbda79afc04b28"
  }
```
## **<a name="getH5PayUrl"> 获取H5支付链接</a>**
[返回到目录](#menu)
##### URL
[/web/payment/paymentApi/springBoard]
#### 参数格式 `JSON`人
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getH5PayUrl
``` javascript
{
"orderNo":"OT26202002151649kPgs"
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"payUrl": "https://syb.allinpay.com/apiweb/h5unionpay/unionorder?appid=00172286&body=%E5%95%86%E6%A0%87%E6%B3%A8%E5%86%8C%E3%80%90%E4%B8%93%E5%AE%B6%E8%BE%85%E5%8A%A9%E7%94%B3%E8%AF%B7%E3%80%91&charset=UTF-8&cusid=560595073992Z6G&notify_url=http%3A%2F%2Fgsb.qifu.gongsibao.com%3A4012%2Ftlpay%2Fnotify&randomstr=1581758584924&remark=h5paypagesywdy&reqsn=OT26202002151649kPgs&returl=http%3A%2F%2Fgsb.qifu.gongsibao.com%3A4012%2Ftlpay%2Fnotify&sign=439FA9F49D365DC32FE1CA712F5AD848&trxamt=69900&version=12", // H5支付链接
"requestId": "ac22e84d8ebc4df09629c0aff2bb1fe9"
}
```
<a name="menu" href="/doc">返回主目录</a>
1. [获取营销话术](#a)
1. [获取工商接口](#b)
1. [30秒认知](#c)
1. [推荐业务状态更新](#e)
1. [推荐业务列表](#f)
1. [已购产品列表](#g)
1. [推送商机](#h)
1. [写入在线产品表](#i)
1. [写入订单退款表](#j)
1. [写入支付表和订单详情表](#k)
1. [根据咨询公司名称获取咨询记录](#l)
1. [添加产品跟进状态备注](#m)
## **<a name="a"> 获取营销话术</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:getTalkContent
#### 请求数据
```
{
"actionType":"getTalkContent",
actionBody:{
"recommendId":"推荐id"
}
}
```
#### 返回结果
```
<!--data参数说明,以,隔开:
data[0]代表开场白
data[1]代表话术原因
data[2]代表问答行式话术
data[3]代表结束语 -->
{
"status": 0,
"msg": "成功",
"data": [
"老板,您好,我是公司宝XXX,我们是阿里云(钉钉)的战略合作伙伴。",
"首先非常感谢您在阿里云(钉钉)上购买了商标注册服务,您的商标正在办理过程中,在办理过程中您有任何问题和需求,都可以随时与公司宝联系,您可以关注我们的服务号,我们会随时推送您的商标申请进度反馈给您。\r\n另外,由于商标申请驳回率较高,目前接近50%,公司宝现推出商标驳回宝产品套餐,针对像您这样已经购买商标注册的客户,您只需加+500元,即送送驳回复审提交服务(不含官费750元及举证撰写费1500元起),确保您的商标在驳回的第一时间我们即会自动向商评委提交驳回复审申请,避免耽误您的驳回复审提交时间。后续您还有三个月的时间搜集整理举证证据,时间也是非常充足,目前公司宝针对阿里云(钉钉)的客户给予特价优惠,购买该项服务仅需258元,优惠幅度高达50%,您看您是否需要?",
"question:你们公司宝与阿里(钉钉)什么关系?---\nanswer:我们公司宝主体是汉唐信通(北京)咨询股份有限公司,致力于企业全生命周期的一站式服务平台。阿里(钉钉)在全国甄选优质合作伙伴时独占鳌头,成为阿里(钉钉)的直营合作伙伴。|\nquestion:你们的驳回宝的优势是什么?---\nanswer:在商标接收到驳回通知后,专家老师及时分析案件情况;与您沟通商标使用情况等细节问题;出具复审的方案,并及时整理材料进行复审操作。提交后三个月内辅助您整理收集各类证据,专业的律师团队撰写案件理由,积极复审,使复审的成功率更高。|\nquestion:价格能便宜点吗?---\nanswer:您好,因为我们目前这个驳回宝套餐,已经是优惠后的特价产品;我们负责做这件事的团队都是层层考试竞选出来的,有多年专业经验的老师负责方案分析、材料整理、律师撰写等等。我们打造的是专业,靠谱;而不是随便收您点钱,事情没好好办,走个过程。相信您做公司也能明白这个道理,专人专岗跟一个人干百样工作,他的专注度和专业性肯定不一样的;相信您复审,肯定和我们的目标是一致的,我们都是希望这个商标能注册下来的。|\nquestion:你们有多大把握能帮我复审成功?---\nanswer:您好,首先拿到案件,我们会成立专家小组给您进行专业性的案件分析。然后,我们与您沟通商标的具体使用情况及哪些可以做为复审证据等综合情况。之后,专家团队会出具本商标的具体复审实施方案。在律师撰写案件理由时,肯定也是放大我们的优势,尽力为您争取。但是由于驳回复审,是商标评审委员会的老师人为审理,也和商标注册一样,可能带有自己的主观判断;所以驳回复审也没有人敢承诺100%,我们能保证的是尽最大努力,认认真真做事,帮您争取拿下商标。|",
"推荐成功结束语:好的,老板,很高兴您选择这款套餐,我马上帮您系统生成订单,您后续登录IC并进行付款即可。您也可以同步关注我们的服务号,我们会随时推送您的商标申请进度反馈给您。\r\n不成功结束语:好的,老板,公司宝有公司注册、财税代理、知识产权、行业资质认证、薪 税服务、公司交易多达三百余项产品,贵公司在业务开展过程中,如果有其他上述的服务需求,随时欢迎找我们。感谢您的支持。(也可以继续推荐其他套餐)"
]
}
```
## **<a name="b"> 获取工商接口</a>**
[返回到目录](#menu)
##### URL
[api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:getCompanyInfo
#### 请求数据
```
{
"actionType":"getCompanyInfo",
actionBody:{
companyName:"公司名称"
}
}
```
#### 返回结果
```
{
"status": 0,
"msg": "success",
"data": {
"name": "北京创知厚德科技有限公司",
"legalRepresentative": "王静波",
"managementState": "存续",
"registeredCapital": "100.000万人民币",
"foundedTime": "",
"creditCode": "91110105MA00723E4F",
"registrID": "110105021672563",
"organizationCode": "MA00723E4",
"companyType": "0",
"registerOffice": "北京市工商行政管理局朝阳分局",
"businessAddress": "北京市朝阳区创远路36号院10号楼1层102",
"scope": "技术开发、技术咨询、技术服务;商标代理;版权贸易;经济贸易咨询;企业策划;设计、制作、代理、发布广告;市场调查;企业管理咨询;组织文化艺术交流活动(不含演出);承办展览展示活动;影视策划;翻译服务;酒店管理;销售文具用品、体育用品、机械设备、五金交电(不从事实体店铺经营)、电子产品、通讯设备、计算机、软件及辅助设备;工程和技术研究;计算机系统服务;基础软件服务;应用软件服务(不含医用软件);软件开发;出租办公用房;机动车公共停车场服务;会议服务;房地产信息咨询;房地产开发;物业管理。(企业依法自主选择经营项目,开展经营活动;依法须经批准的项目,经相关部门批准后依批准的内容开展经营活动;不得从事本市产业政策禁止和限制类项目的经营活动。)",
"dateIssue": "2018-3-9",
"companyProvince": "北京",
"companyOrgType": "有限责任公司",
"businessTerm": "2016-7-20至2036-7-19",
"requestId": "a4e2b6fdd079427a9291f491058987e3"
},
"requestId": "a66073a67d454559a10f2961c83ace37"
}
```
## **<a name="c"> 30秒认知客户及产品服务标签</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:getCompanyLabel
#### 请求数据
```
{
"actionType":"getCompanyLabel",
actionBody:{
companyName:"公司名称"
}
}
```
#### 返回结果
```
<!--输出参数说明:lable_type:标签类别、lable_data:画像标签-->
{
"status": 0,
"msg": "success",
"data": [
{
"lable_data": [
"微型企业",
"有限责任公司",
"长青公司",
"租赁和商务服务业",
"华东地区",
"一枝独秀"
],
"lable_type": "基本标签"
},
{
"lable_data": [
"存续"
],
"lable_type": "经营标签"
},
{
"lable_data": [
"专利小白",
"商标行家",
"软件著作小白",
"作品著作小白"
],
"lable_type": "资产标签"
},
{
"lable_data": [
"阿里担保注册",
"阿里云"
],
"lable_type": "偏好标签"
},
{
"lable_data": [
"替他人推销",
"广告",
"人事管理辅助",
"商业企业迁移",
"医疗用品",
"财会",
"工商管理辅助",
"办公事务"
],
"lable_type": "产品标签"
}
],
"requestId": "9df07bcffae0410c983e0fdfd3d0fc2c"
}
```
## **<a name="d"> 更多客户信息链接地址</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:getMoreInfoUrl
#### 请求数据
```
{
"actionType":"getMoreInfoUrl",
actionBody:{
companyName:"公司名称"
}
}
```
#### 返回结果
```
{
"status": 0,
"msg": "success",
"data": {
url: "http:xxxx.com"
},
"requestId": "a66073a67d454559a10f2961c83ace37"
}
```
## **<a name="e"> 推荐业务状态更新</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:updateStatus
#### 请求数据
```
{
"actionType":"updateStatus",
actionBody:{
recommendId:"推荐Id",
statusName:"跟进状态",
businessId:"商机Id",
userId:"操作人ID"
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="f"> 推荐业务列表</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:getRecommendProducts
#### 请求数据
```
{
"actionType":"getRecommendProducts",
actionBody:{
businessId:"商机Id",
businessType:"复购算法" // 复购算法、关联推荐、智能监测、公海挖掘
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"survey_reason":[
{'change_item': '住所', 'change_time': '2020-03-24', 'change_text': '【北京市海淀区巨山路78号院209室】变更为【北京市海淀区信息路28号1幢10层1003-12室】'}
] ,// 备注 : 只有类型 智能监测 该字段才出现
"relational_reason":["公司所属行业类型:互联网和相关服务业"], // 备注:只有类型为关联推荐时出现
"seas_reason":["公司所属行业类型:互联网和相关服务业"] //备注:只有类型为公海挖掘推荐时出现
"data":[{
"accountId":"客户ID",
"recommendId": "00000001",//推荐唯一码
"typeName": "知识产权",//推荐类型
"productName": "软件著作权",//推荐产品
"buyRate": "80%"//购买概率
}],
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="g"> 已购产品列表</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:getOldOrder
#### 请求数据
```
{
"actionType":"getOldOrder",
actionBody:{
companyName:"公司名称"
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":[{
"source": "阿里云",//购买渠道
"productName": "公司注册",//购买产品名称
"orderAmount": 680,//订单金额
"createTime":"2019-12-12",//购买日期
"customerName": "客户名称"// 客户名称
}],
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="h"> 推送商机</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:create
#### 请求数据
```
{
"actionType":"create",
actionBody:{
businessData:[
{
"companyId":"111111100001",//公司唯一码
"companyName": "公司名称",
"businessId": "商机唯一码",
createTime":"2019-12-12"
},
{
"companyId":"111111100001",//公司唯一码
"companyName": "公司名称",
"businessId": "商机唯一码",
createTime":"2019-12-12"
}
]
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="i">写入在线产品表</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:createOnlineProductClassificiationFq
#### 请求数据
```
{
"actionType":"createOnlineProductClassificiationFq",
actionBody:{
// 参数 为 online_product_classificiation_fq表中相关字段
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="j">写入订单退款表</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:createOrderRefundFq
#### 请求数据
```
{
"actionType":"createOrderRefundFq",
actionBody:{
// 参数 为 order_refund_fq 表中相关字段
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="k">写入支付表和订单详情表</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:createOrderInfoAndPayFq
#### 请求数据
```
{
"actionType":"createOrderInfoAndPayFq",
actionBody:{
orderInfo :{
// 参数 为 order_info_fq 表中相关字段
},
payInfo:{
// 参数 为 pay_fq 表中相关字段
}
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="l">根据咨询公司名称获取咨询记录</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:getConsultingRecord
#### 请求数据
```
{
"actionType":"getConsultingRecord",
"actionBody":{
"companyName":"中联恒顺商贸有限公司" //公司名称
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":[
{
"channel": "个人挖掘", //渠道
"consult_product": "软件著作权转让(国内)", //咨询产品
"consult_time": "2019-12-20 11:40:12", //咨询时间
"customer_address": "北京市-北京市-北京市", //客户地区
”customer_name“:"无", //客户姓名
"id":"5ef854671f20452d18943075" // 咨询id
},
{
"channel": "百度",
"consult_product": "内资公司变更",
"consult_time": "2019-04-03 15:13:46",
"customer_address": "北京市-北京市-朝阳区",
”customer_name“:"客户姓名", //客户姓名
"id":"咨询id" // 咨询id
}
],
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="m">添加产品跟进状态备注</a>**
[返回到目录](#menu)
##### URL
[/api/opaction/fgbusinesschance/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加token的值
#### 渠道执行的类型 actionType:addStatusRemarks
#### 请求数据
```
{
"actionType":"addStatusRemarks",
"actionBody":{
"recommendId":"00000001", //产品推荐id
"remarks":"客户沟通中"
}
}
```
#### 返回结果
```
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":"00000001",
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
\ No newline at end of file
<a name="menu" href="/doc">返回主目录</a>
1. [获取工商订单交付流程信息](#getIcbcOrderDeliveryFlowInfo)
1. [提交公司注册方案](#submitProgramme)
1. [根据需求产看方案详情](#getProgrammeInfoByNeedNo)
1. [服务商方案作废](#abolishProgramme)
1. [获取方案列表(获取用户所有方案)](#getProgrammeListByUser)
## **<a name="getIcbcOrderDeliveryFlowInfo"> 获取工商订单交付流程信息</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getOrderDeliveryFlowInfo
``` javascript
{
"sourceOrderNo":"OT31202002191453Hpib33"// Y 订单号
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":{
"updated": "2020-02-19T06:56:32.000Z",
"flowList":{
"updated": "2020-02-19T06:53:09.000Z",
"orderDeliveryStatus": "已下单",//流程状态编码
"orderDeliveryStatusName": "已下单",//流程状态名称
"flowList": [//流程列表
{
"updated": "2020-02-19T06:53:09.000Z",
"orderDeliveryStatus": "已下单",
"orderDeliveryStatusName": "已下单"
},
{
"updated": "2020-02-18",
"orderDeliveryStatus": "已提交材料",
"orderDeliveryStatusName": "已提交材料"
}
]
}
},
"requestId": "a277fb799d9f4dda9053fb8830f9d252"
}
```
## **<a name="submitProgramme"> 提交公司注册方案</a>**
[返回到目录](#menu)
##### URL
[/web/action/icapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:submitProgramme
``` javascript
{
"actionType":"submitProgramme",
"actionBody":{
"needNo":"N202002141324bupnr8L",
"solutionContent":{
"bizType":"esp.companyreg",
//"notes":"方案备注",------ 删除 替换成 solution->remark
"solution":{
//公司注册方案
"companyName":"公司名称",
"area":"省",
"city": "市",
"companyCategory": "纳税人类型",
"companyType": "公司性质",
"orgType" :"组织类型",
"industryType": "行业",
"scope": "经营范围",
"remark":"方案备注",
//云上公司注册方案
"park":"注册园区",
"registerType":"注册类型",
"productType":"产品类型",
"remark":"方案备注",
}
}
}
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "a277fb799d9f4dda9053fb8830f9d252"
}
```
## **<a name="getProgrammeInfoByNeedNo"> 根据需求产看方案详情</a>**
[返回到目录](#menu)
##### URL
[/web/action/icapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getProgrammeInfoByNeedNo
``` javascript
{
"actionType":"getProgrammeInfoByNeedNo",
"actionBody":{
"needNo":"N202002141324bupnr8L"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"needNo":"N202002141324bupnr8L",
"solutionNo":"NS202003161734ay0SzH",
"orderNo":null,
"solutionContent":{
"bizType":"esp.companyreg",
"notes":"用户反馈",
"solution":{
}
},
"status":"yzf",
"statusName":"已作废"
}
],
"requestId":"4302ecc284e747a990e4ad61d8236b60"
}
```
## **<a name="abolishProgramme"> 服务商方案作废</a>**
[返回到目录](#menu)
##### URL
[/web/action/icapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:abolishProgramme
``` javascript
{
"actionType":"abolishProgramme",
"actionBody":{
"solutionNo":"NS202003161734ay0SzH"
}
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "a277fb799d9f4dda9053fb8830f9d252"
}
```
## **<a name="getProgrammeListByUser"> 获取方案列表(获取用户所有方案)</a>**
[返回到目录](#menu)
##### URL
[/web/action/icapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getProgrammeListByUser
``` javascript
{
"actionType":"getProgrammeListByUser",
"actionBody":{
"pageIndex":"1",
"pageSize":"2",
"needNo":"N202002141324bupnr8L",
"solutionNo":"",
"orderNo":"",
"status":"dqr", //{"dqr":"待确认","ywc":"已完成","yzf":"已作废"},
//普通公司注册
"bizType":"esp.companyreg",
"companyName":"公司名称",
//云上公司注册
"bizType":"esp.companyreg_cloud",
"park":"注册园区",
"productType":"产品类型",
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"id":124,
"needNo":"N202002141324bupnr8L",
"solutionNo":"NS202003171700rdnznR",
"orderNo":null,
"solutionContent":{
"notes":"方案备注",
"bizType":"esp.companyreg",
"solution":{
"city":"市",
"companyName":"公司名称",
"park":"注册园区",
"registerType":"注册类型",
"industryType":"行业",
"area":"省",
"companyType":"公司性质",
"productType":"产品类型",
"companyCategory":"纳税人类型",
"scope":"经营范围",
"orgType":"组织类型"
}
},
"status":"ytj",
"statusName":"已提交",
"created_at":"2020-03-17T09:00:22.000Z"
},
{
"id":123,
"needNo":"N202002141324bupnr8L",
"solutionNo":"NS202003171659mBUrXa",
"orderNo":null,
"solutionContent":{
"notes":"方案备注",
"bizType":"esp.companyreg",
"solution":{
"city":"市",
"companyName":"公司名称",
"park":"注册园区",
"registerType":"注册类型",
"industryType":"行业",
"area":"省",
"companyType":"公司性质",
"productType":"产品类型",
"companyCategory":"纳税人类型",
"scope":"经营范围",
"orgType":"组织类型"
}
},
"status":"ytj",
"statusName":"已提交",
"created_at":"2020-03-17T08:59:45.000Z"
}
],
"dataCount":16,
"requestId":"40769e74e83f4505a78b24d84fed870b"
}
```
<a name="menu" href="/doc">返回主目录</a>
1. [icp方案提交](#submitIcpProgramme)
1. [icp材料提交](#submitIcpMaterial)
1. [根据需求产看方案详情](#getProgrammeInfoByChannelNeedNo)
1. [icp通知状态变更](#acceptIcpPartnerNotification)
1. [服务商关闭icp方案](#abolishIcpProgramme)
1. [获取方案详情](#getNeedSolutionDetailByUser)
1. [获取需求详情](#getItemByNeedNo)
1. [需求关闭](#needCloseIcp)
## **<a name="submitIcpProgramme"> icp方案提交</a>**
[返回到目录](#menu)
##### URL
[/web/action/icpapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:submitIcpProgramme
``` javascript
{
"actionType":"submitIcpProgramme",
"actionBody":{
"needNo":"I20200320201737000zhb",//渠道需求号
"solutionContent":{
"bizType":"icpsq",//产品类型 icpsq edisq
"solution":{
// "IcpType":1,//方案类型 不传默认1 1:icp 2: edi 参数无效
"CompanyName":"公司名",
"CompanyAddress":"公司地址",
"Area":"区域",
"Note":"备注"
}
}
}
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "a277fb799d9f4dda9053fb8830f9d252"
}
```
## **<a name="submitIcpMaterial"> icp材料提交</a>**
[返回到目录](#menu)
##### URL
[/web/action/icpapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:submitIcpMaterial
``` javascript
{
"actionType":"submitIcpMaterial",
"actionBody":{
"BizId":"S20200323174838000zhb",//渠道方案号 同channelSolutionNo 必填
"material":{//材料信息
"Domain":"备案域名",//必填
"CorporateName":"法人名称",//必填
"IncludeForeignInvestment":true,//必填
"PartnerBusinessLicense":"营业执照",//必填
"PartnerIdCardList":["相关人员身份证"],//必填
"PartnerDomainCertificate":"域名证书",//必填
"PartnerPreviewOtherList":["合作方递交其他供预览的件,只能传递ZIP包"],
"PartnerPlan":"收费方案计划书",
"PartnerForeignInvestment":"股东追溯不涉及外资承诺书",
"PartnerLaw":"依法经营电信业务承诺书",
"PartnerStampOtherList":["需要盖章,只能传递1个zip包"],
"PartnerSignOtherList":["需要签字,只能传递1个zip包"],
"PartnerSignAndStampOtherList":["需要盖章,只能传递1个zip包"]
}
}
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "a277fb799d9f4dda9053fb8830f9d252"
}
```
## **<a name="getProgrammeInfoByChannelNeedNo"> 根据需求查看方案详情</a>**
[返回到目录](#menu)
##### URL
[/web/action/icpapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getProgrammeInfoByChannelNeedNo
``` javascript
{
"actionType":"getProgrammeInfoByChannelNeedNo",
"actionBody":{
"needNo":"20200413210610000001" //渠道需求号 必填
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"needNo":"N202004132334EjurnEr",//需求号 同channelNeedNo
"solutionNo":"NS202004140953WtCUTG",//方案号 同solutionNo
"channelSolutionNo":"S20200323174838000zhb8",//渠道方案号 同channelSolutionNo
"orderNo":null,
"solutionContent":{//方案交付信息
"notes":"",
"bizType":"icpsq",
"solution":{
"Area":"区域222",
"Note":"备注4",
"IcpType":"icp",
"CompanyName":"公司名测试数据222",
"CompanyAddress":"公司地址222"
},
"totalSum":"",
"typeCode":"icpsq",
"typeName":"icp申请",
"applicationStatusList":[
{
"created_at":"2020-04-14T01:53:33.305Z",
"OfficialFileURL":"",
"ApplicationStatus":"submitIcpProgramme",
"ApplicationStatusName":"提交方案"
}
]
},
"status":"yzf",
"statusName":"已作废"
},
{
"needNo":"N202004132334EjurnEr",
"solutionNo":"NS202004141407Xd29lT",
"channelSolutionNo":null,
"orderNo":null,
"solutionContent":{
"notes":"",
"bizType":"icpsq",
"solution":{
"Area":"区域222",
"Note":"备注222",
"IcpType":1,
"CompanyName":"公司名测试数据222",
"CompanyAddress":"公司地址222"
},
"totalSum":"",
"typeCode":"icpsq",
"typeName":"icp申请",
"applicationStatusList":[
{
"created_at":"2020-04-14T06:07:47.562Z",
"OfficialFileURL":"",
"ApplicationStatus":"submitIcpProgramme",
"ApplicationStatusName":"提交方案"
}
]
},
"status":"dqr",
"statusName":"待确认"
},
{
"needNo":"N202004132334EjurnEr",
"solutionNo":"NS202004141424cOM410",
"channelSolutionNo":null,
"orderNo":null,
"solutionContent":{
"notes":"",
"bizType":"icpsq",
"solution":{
"Area":"区域222",
"Note":"备注222",
"IcpType":1,
"CompanyName":"公司名测试数据222",
"CompanyAddress":"公司地址222"
},
"totalSum":"",
"typeCode":"icpsq",
"typeName":"icp申请",
"applicationStatusList":[
{
"created_at":"2020-04-14T06:24:50.758Z",
"OfficialFileURL":"",
"ApplicationStatus":"submitIcpProgramme",
"ApplicationStatusName":"提交方案"
}
]
},
"status":"dqr",
"statusName":"待确认"
},
{
"needNo":"N202004132334EjurnEr",
"solutionNo":"NS202004141426LIzgBx",
"channelSolutionNo":null,
"orderNo":null,
"solutionContent":{
"notes":"",
"bizType":"icpsq",
"solution":{
"Area":"区域222",
"Note":"备注222",
"IcpType":1,
"CompanyName":"公司名测试数据222",
"CompanyAddress":"公司地址222"
},
"totalSum":"",
"typeCode":"icpsq",
"typeName":"icp申请",
"applicationStatusList":[
{
"created_at":"2020-04-14T06:26:24.666Z",
"OfficialFileURL":"",
"ApplicationStatus":"submitIcpProgramme",
"ApplicationStatusName":"提交方案"
}
]
},
"status":"dqr",
"statusName":"待确认"
},
{
"needNo":"N202004132334EjurnEr",
"solutionNo":"NS202004141434jknJyu",
"channelSolutionNo":null,
"orderNo":null,
"solutionContent":{
"notes":"",
"bizType":"icpsq",
"solution":{
"Area":"区域222",
"Note":"备注222",
"IcpType":1,
"CompanyName":"公司名测试数据222",
"CompanyAddress":"公司地址222"
},
"totalSum":"",
"typeCode":"icpsq",
"typeName":"icp申请",
"applicationStatusList":[
{
"created_at":"2020-04-14T06:34:30.518Z",
"OfficialFileURL":"",
"ApplicationStatus":"submitIcpProgramme",
"ApplicationStatusName":"提交方案"
}
]
},
"status":"dqr",
"statusName":"待确认"
},
{
"needNo":"N202004132334EjurnEr",
"solutionNo":"NS202004141443UJ0nzb",
"channelSolutionNo":null,
"orderNo":null,
"solutionContent":{
"notes":"",
"bizType":"icpsq",
"solution":{
"Area":"区域222",
"Note":"备注222",
"IcpType":1,
"CompanyName":"公司名测试数据222",
"CompanyAddress":"公司地址222"
},
"totalSum":"",
"typeCode":"icpsq",
"typeName":"icp申请",
"applicationStatusList":[
{
"created_at":"2020-04-14T06:43:06.766Z",
"OfficialFileURL":"",
"ApplicationStatus":"submitIcpProgramme",
"ApplicationStatusName":"提交方案"
}
]
},
"status":"dqr",
"statusName":"待确认"
},
{
"needNo":"N202004132334EjurnEr",
"solutionNo":"NS202004141444Qn2bdA",
"channelSolutionNo":null,
"orderNo":null,
"solutionContent":{
"notes":"",
"bizType":"icpsq",
"solution":{
"Area":"区域222",
"Note":"备注222",
"IcpType":1,
"CompanyName":"公司名测试数据222",
"CompanyAddress":"公司地址222"
},
"totalSum":"",
"typeCode":"icpsq",
"typeName":"icp申请",
"applicationStatusList":[
{
"created_at":"2020-04-14T06:44:59.198Z",
"OfficialFileURL":"",
"ApplicationStatus":"submitIcpProgramme",
"ApplicationStatusName":"提交方案"
}
]
},
"status":"dqr",
"statusName":"待确认"
}
],
"requestId":"cc07e0967e0840abbca13af4c4d366f6"
}
```
## **<a name="acceptIcpPartnerNotification"> icp通知状态变更</a>**
[返回到目录](#menu)
##### URL
[/web/action/icapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:acceptIcpPartnerNotification
``` javascript
{
"actionType":"acceptIcpPartnerNotification",
"actionBody":{
"BizId":"S20200323174838000zhb",//渠道方案号 同channelSolutionNo 必填
"OfficialFileUrl":"官⽂下载地址", //官文 非必填
"ApplicationStatus":"507" //状态码 必填
}
}
ApplicationStatus
507, "完成账户注册"
508, "服务商完成提交资料到⼯信部"
509, "⼯商部已受理",可以传递发⽂
510, "⼯商部不予受理",可以传递发⽂
511, "⼯商部通过",可以传递发⽂
512, "⼯商部未通过",可以传递发⽂
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "a277fb799d9f4dda9053fb8830f9d252"
}
```
## **<a name="abolishIcpProgramme"> 服务商关闭icp方案</a>**
[返回到目录](#menu)
##### URL
[/web/action/icapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:abolishIcpProgramme
``` javascript
{
"actionType":"abolishIcpProgramme",
"actionBody":{
"BizId":"S20200323174838000zhb", //渠道方案号 同channelSolutionNo 必填
"Note":"备注" //关闭原因 必填
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":null,
"requestId":"40769e74e83f4505a78b24d84fed870b"
}
```
## **<a name="getNeedSolutionDetailByUser"> 获取方案详情</a>**
[返回到目录](#menu)
##### URL
[/web/action/icpapi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getNeedSolutionDetailByUser
``` javascript
{
"actionType":"getNeedSolutionDetailByUser",
"actionBody":{
"solutionNo":"NS202004131008iKPRDB" //方案号 必填
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":{
"id":230,
"channelNeedNo":"I20200320201737000221",//渠道需求号
"needNo":"N202004111217gD5T8TJ",//需求号
"solutionNo":"NS202004131349EAWwSV",//方案号
"channelSolutionNo":"S20200323174838000zhb7",//渠道方案号 同BizId
"orderNo":null,//服务订单号
"needinfo":{//需求信息 ---- 联系人信息
"publishName":"云武",
"publishMobile":"13800138000",
"channelUserId":"13800138000"
},
"solutionContent":{//方案交付信息
"notes":"",//用户反馈备注
"status":"ACCOUNT_REGISTERED",//方案流程状态
"bizType":"icpsq",//操作类型
"material":{//材料信息
"Domain":"备案域名",
"PartnerLaw":"依法经营电信业务承诺书",
"PartnerPlan":"收费方案计划书",
"CorporateName":"法人名称",
"PartnerIdCardList":[
"相关人员身份证"
],
"PartnerSignOtherList":[
"需要签字,只能传递1个zip包"
],
"PartnerStampOtherList":[
"需要盖章,只能传递1个zip包"
],
"PartnerBusinessLicense":"营业执照",
"PartnerPreviewOtherList":[
"合作方递交其他供预览的件,只能传递ZIP包"
],
"IncludeForeignInvestment":true,
"PartnerDomainCertificate":"域名证书",
"PartnerForeignInvestment":"股东追溯不涉及外资承诺书",
"PartnerSignAndStampOtherList":[
"需要盖章,只能传递1个zip包"
]
},
"solution":{//方案信息
"Area":"区域222",
"Note":"备注222",
"IcpType":"icp",
"CompanyName":"公司名测试数据222",
"CompanyAddress":"公司地址222"
},
"totalSum":"",//订单金额
"typeCode":"icpsq",//产品码
"typeName":"icp申请",//产品名称
"statusName":"完成账户注册",//流程状态名称
"solutionFlowList":[//方案流程列表
{
"status":"ACCOUNT_REGISTERED",
"statusName":"完成账户注册",
"updated_at":"2020-04-13T05:51:08.790Z"
}
],
"applicationStatusList":[//方案通知状态列表 ---- 未用到
{
"created_at":"2020-04-13T05:49:19.750Z",
"OfficialFileURL":"",
"ApplicationStatus":"submitIcpProgramme",
"ApplicationStatusName":"提交方案"
},
{
"created_at":"2020-04-13T05:51:08.790Z",
"OfficialFileURL":"",
"ApplicationStatus":"507",
"ApplicationStatusName":"507"
}
]
},
"status":"dqr",//方案状态
"statusName":"待确认",//方案状态
"createUserId":100,
"created_at":"2020-04-13T05:49:19.000Z",
"updated_at":"2020-04-13T05:51:08.000Z",
"deleted_at":null,
"version":0
},
"requestId":"1594aa8fabfd42eba332160263b2597e"
}
```
## **<a name="needCloseIcp"> 服务商关闭icp需求</a>**
[返回到目录](#menu)
##### URL
[/web/opreceive/need/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:needCloseIcp
``` javascript
{
"actionType":"needCloseIcp",
"actionBody":{
"channelNeedNo":"S20200323174838000zhb",
"note":"备注"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":null,
"requestId":"40769e74e83f4505a78b24d84fed870b"
}
```
## **<a name="getItemByChannelNeedNo"> 获取需求详情</a>**
[返回到目录](#menu)
##### URL
[/web/opreceive/need/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getItemByChannelNeedNo
``` javascript
{
"actionType":"getItemByChannelNeedNo",
"actionBody":{
"needNo":"NS202004131008iKPRDB"
}
}
```
#### 返回结果
```javascript
{ status: 0,
msg: 'success',
data:
{ id: 559,
uapp_id: 18,
needNo: 'N202004132334EjurnEr', //需求号--用于服务商或需求表中创建订单
channelNeedNo: '20200413210610000001', //渠道需求号
channelUserId: '13800138000', //渠道用户唯一码
followManUserId: '100', //跟进者唯一码
followManMobile: '13075556693', //跟进者手机号
city: '9', //城市
province: null, //省份
publishContent: 'icp需求测试_005', //发布内容
publishName: '张三', //发布者姓名
publishMobile: '13800138000', //发布者手机号
notes: null, //备注
followContent: //跟进内容
{ content: 'icp提交到方案', followDate: '2020-04-14T01:53:33.521Z' },
disposeNotes: null, //处理的备注
status: 'wts', //状态
typeCode: 'icpsq',   //类型编码
typeName: 'icp申请',   //类型名称
channelTypeCode: '7',    //渠道类型编码
channelTypeName: 'icp申请',   //渠道类型名称
publisherOnlyCode: null,    //发布者唯一码
followManName: '13075556693',   //跟进人姓名  
followManOnlyCode: '13075556693'   //跟进者唯一码 } }
```
<a name="menu" href="/doc">返回主目录</a>
1. [生成logo](#singlelogo)
1. [收藏logo](#collectLogo)
1. [获取收藏的logo](#getCollectibleLogoListByUser)
1. [获取已购买的logo](#getPaidLogoListByUser)
1. [下载logo](#getLogoMaterial)
1. [取消收藏](#cancelCollectLogo)
1. [换一批logo](#changelogo)
1. [获取logo场景](#downloadlogoscene)
## **<a name="singlelogo"> 生成logo</a>**
[返回到目录](#menu)
##### URL
[/web/action/logoOrderApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:singlelogo
``` javascript
{
"actionType":"singlelogo",
"actionBody":{
"title":"周杰伦",//品牌名称 必填
"subtitle":"baby", //品牌标语 非必填
"profession": "通信行业",//行业 必填
"description":"有公司的地方就有公司宝", //品牌描述 非必填
"curpage":1, //页码 非必填
"pagesize":10 //每页条数 非必填
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"成功",
"total":30,
"data":[
{
"id":4384,//品牌id
"title":"周杰伦",//品牌名称
"subtitle":"baby",//品牌标语
"first_color":"(1,62,143)",//主颜色
"sec_color":"(0,0,0)",//配色
"color_description":"蓝色是博大的色彩,天空和大海这辽阔的景色都呈蔚蓝色。蓝色是永恒的象征",//颜色描述
"font_description":""周杰伦"选用"Gentium"字体,字体整齐划一,笔画纤细,结构严谨,应用广泛,设计感强。",//字体描述
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211078083.png"//品牌图片
},
{
"id":4380,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(21,36,59)",
"sec_color":"(0,0,0)",
"color_description":"蓝色是博大的色彩,天空和大海这辽阔的景色都呈蔚蓝色。蓝色是永恒的象征",
"font_description":""周杰伦"选用"站酷高端黑"字体,字体沉稳又富于灵动,清晰简洁,布白均匀,具有极强的时尚感。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211082112.png"
},
{
"id":4383,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(0,102,153)",
"sec_color":"(0,0,0)",
"color_description":"蓝色是博大的色彩,天空和大海这辽阔的景色都呈蔚蓝色。蓝色是永恒的象征",
"font_description":""周杰伦"选用"Taipei-Sans-TC-Beta-Light"字体,字形整齐划一,结构严谨,应用广泛。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211094286.png"
},
{
"id":4360,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(34,154,82)",
"sec_color":"(0,0,0)",
"color_description":"绿色象征清新,健康,希望,是生命的象征。代表安全、平静、舒适之感",
"font_description":""周杰伦"选用"站酷庆科黄油体"字体,字体沉稳又富于灵动,清晰简洁,布白均匀,具有极强的时尚感。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211095433.png"
},
{
"id":4369,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(146,147,149)",
"sec_color":"(0,0,0)",
"color_description":"象征高雅,朴素,沉稳。",
"font_description":""周杰伦"选用"站酷文艺体"字体,字体沉稳又富于灵动,清晰简洁,布白均匀,具有极强的时尚感。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211101550.png"
},
{
"id":4389,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(24,115,77)",
"sec_color":"(0,0,0)",
"color_description":"象征清新,健康,希望,是生命的象征。代表安全、平静、舒适之感",
"font_description":""周杰伦"选用"Taipei-Sans-TC-Beta-Light"字体,字形整齐划一,结构严谨,应用广泛。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_20200506021111423.png"
},
{
"id":4363,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(0,140,211)",
"sec_color":"(0,0,0)",
"color_description":"清醒宁静的健康绿色,象征自然,成长,舒适",
"font_description":""周杰伦"选用"站酷小薇LOGO"字体,沉稳又富于灵动,清晰简洁,布白均匀,具有极强的时尚感。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211125803.png"
},
{
"id":4386,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(24,68,148)",
"sec_color":"(0,0,0)",
"color_description":"蓝色是博大的色彩,天空和大海这辽阔的景色都呈蔚蓝色。蓝色是永恒的象征",
"font_description":""周杰伦"选用"庞门正道粗书体"字体,字体结构严谨,笔画端正,却又带着书法韵味,利用笔锋破型,打破拘谨。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211133233.png"
},
{
"id":4362,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(0,140,211)",
"sec_color":"(0,0,0)",
"color_description":"蓝色代表和平及沟通。象征意义是平静、和平、安全及迅速",
"font_description":""周杰伦"选用"文泉驿等宽微米黑"字体,字形整齐划一,结构严谨,应用广泛。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211142394.png"
},
{
"id":4365,
"title":"周杰伦",
"subtitle":"baby",
"first_color":"(118,163,255)",
"sec_color":"(0,0,0)",
"color_description":"淡蓝色象征着清新,淡雅",
"font_description":""周杰伦"选用"庞门正道粗书体"字体,字体结构严谨,笔画端正,却又带着书法韵味,利用笔锋破型,打破拘谨。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211166237.png"
}
],
"requestId":"36760bfcb286483388b5cafa43a8a532"
}
```
## **<a name="collectLogo"> 收藏logo</a>**
[返回到目录](#menu)
##### URL
[/web/action/logoOrderApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:collectLogo
``` javascript
{
"actionType":"collectLogo",
"actionBody":{
"title":"周杰伦", //名牌名称,必填
"subtitle":"baby", //品牌标语 必填
"profession": "通讯行业", //行业 必填
"description":"有公司的地方就有公司宝",//品牌描述 非必填
"logo_id":"1147",//id:后续用了购买的标识,购买时需要回传 (生成logo接口返回) 必填
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202004270425473400.png",//图片地址(生成logo接口返回) 必填
"first_color":"(118,163,255)",//主颜色RGB
"sec_color":"(0,0,0)",//配色RGB
"color_description":"淡蓝色象征着清新,淡雅",//对主颜色的描述
"font_description":"\"周杰伦\"选用\"庞门正道粗书体\"字体,字体结构严谨,笔画端正,却又带着书法韵味,利用笔锋破型,打破拘谨。",//字体描述
"itemCode":"znlogosjcp" //产品码 必填
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":null,
"requestId":"efa3dc6d66f84b249d4cdb406d62fb05"
}
```
## **<a name="getCollectibleLogoListByUser"> 获取收藏的logo</a>**
[返回到目录](#menu)
##### URL
[/web/action/logoOrderApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getCollectibleLogoListByUser
``` javascript
{
"actionType":"getCollectibleLogoListByUser",
"actionBody":{
"pageSize":20,//每页数量
"pageIndex":1//页码
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"id":178,
"uapp_id":22,
"channelUserId":"13075556693",
"collectContent":{//logo信息
"title":"周杰伦",//品牌名称
"logo_id":"4365",//品牌id
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005060211166237.png",//品牌图片
"itemCode":"znlogosjcp",//产品码
"subtitle":"baby",//品牌标语
"sec_color":"(0,0,0)",//配色
"profession":"通讯行业",//行业名称
"description":"有公司的地方就有公司宝",//品牌描述
"first_color":"(118,163,255)",//主色
"font_description":""周杰伦"选用"庞门正道粗书体"字体,字体结构严谨,笔画端正,却又带着书法韵味,利用笔锋破型,打破拘谨。",//字体描述
"color_description":"淡蓝色象征着清新,淡雅"//颜色描述
}
}
],
"dataCount":1,//总条数
"requestId":"f6a6d59e9beb41f49fb71a5c4b6ef7d6"
}
```
## **<a name="getPaidLogoListByUser"> 获取已购买的logo</a>**
[返回到目录](#menu)
##### URL
[/web/action/logoOrderApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getPaidLogoListByUser
``` javascript
{
"actionType":"getPaidLogoListByUser",
"actionBody":{
"pageSize":20,//每页条数
"pageIndex":1 //页码
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"id":271,
"orderNo":"LOGO2220200506151119",//订单号
"sourceOrderNo":"LOGO2220200506151119",//订单号
"deliveryContent":{//logo信息
"title":"周杰伦",//品牌名称
"logo_id":"4365",//logoid
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202004282246057578.png",//logo图片
"itemCode":"znlogosjcp",//产品码
"subtitle":"baby",//品牌标语
"sec_color":"(0,0,0)",//配色RGB
"description":"有公司的地方就有公司宝",//品牌描述
"first_color":"(118,163,255)",//主颜色
"font_description":""周杰伦"选用"庞门正道粗书体"字体,字体结构严谨,笔画端正,却又带着书法韵味,利用笔锋破型,打破拘谨。",//字体描述
"color_description":"淡蓝色象征着清新,淡雅"//颜色描述
},
"itemCode":"znlogosjcp"//产品码
}
],
"dataCount":1,//总条数
"requestId":"8c80fd1172064c2c93530c404732de28"
}
```
## **<a name="getLogoMaterial"> 下载logo</a>**
[返回到目录](#menu)
##### URL
[/web/action/logoOrderApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getLogoMaterial
``` javascript
{
"actionType":"getLogoMaterial",
"actionBody":{
"orderNo":"LOGO22202004291047cC" //订单号
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/周杰伦.zip",
"requestId":"4475b4e2804b4c008869231a118d44cc"
}
```
## **<a name="cancelCollectLogo"> 取消收藏</a>**
[返回到目录](#menu)
##### URL
[/web/action/logoOrderApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:cancelCollectLogo
``` javascript
{
"actionType":"cancelCollectLogo",
"actionBody":{
"id":"302" //收藏logoid
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":null,
"requestId":"f48083de8d4c49339de264ac76437e89"
}
```
## **<a name="changelogo"> 换一批logo</a>**
[返回到目录](#menu)
##### URL
[/web/action/logoOrderApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:changelogo
``` javascript
{
"actionType":"changelogo",
"actionBody":{
"title":"庄冰",//品牌名称 必填
"subtitle":"bing", //品牌标语 非必填
"profession": "通信行业",//行业 必填
"description":"" //简介 非必填
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"成功",
"total":10,
"data":[
{
"id":5936,//生成的LOGOid
"title":"庄冰",//品牌名称
"subtitle":"bing",//品牌标语
"first_color":"(4,18,5)",//主颜色RGB
"sec_color":"(0,0,0)",//配色RGB
"color_description":"基础百搭的庄重黑色,象征专业,前卫,严正。",//对主颜色的描述
"font_description":""庄冰"选用"庞门正道粗书体"字体,字体结构严谨,笔画端正,却又带着书法韵味,利用笔锋破型,打破拘谨。",//对字体的描述
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_20200507043158756.png"//生成logo的url
},
{
"id":5928,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(255,8,0)",
"sec_color":"(0,0,0)",
"color_description":"浓郁喜庆的古典红色,象征生命,活力,激情。",
"font_description":""庄冰"选用"庞门正道粗书体"字体,字体结构严谨,笔画端正,却又带着书法韵味,利用笔锋破型,打破拘谨。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005070431584706.png"
},
{
"id":5923,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(0,0,0)",
"sec_color":"(0,0,0)",
"color_description":"基础百搭的庄重黑色,象征专业,前卫,严正。",
"font_description":""庄冰"选用"站酷小薇LOGO"字体,沉稳又富于灵动,清晰简洁,布白均匀,具有极强的时尚感。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005070431591027.png"
},
{
"id":5942,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(249,137,66)",
"sec_color":"(0,0,0)",
"color_description":"橙色是欢快活泼的光辉色彩,是暖色系中最温暖的色。",
"font_description":""庄冰"选用"文泉驿等宽微米黑"字体,字形整齐划一,结构严谨,应用广泛。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_20200507043200603.png"
},
{
"id":5911,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(0,140,211)",
"sec_color":"(0,0,0)",
"color_description":"深远永恒的沉静蓝色,象征睿智,脱俗,自然。",
"font_description":""庄冰"选用"OPPOSans-H"字体,字体整齐划一,笔画纤细,结构严谨,应用广泛,设计感强。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005070432023594.png"
},
{
"id":5938,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(0,134,218)",
"sec_color":"(0,0,0)",
"color_description":"深远永恒的沉静蓝色,象征睿智,脱俗,自然。",
"font_description":""庄冰"选用"日本花园明朝体"字体,字体沉稳又富于灵动,清晰简洁,布白均匀,具有极强的时尚感。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005070432025797.png"
},
{
"id":5927,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(192,52,116)",
"sec_color":"(0,0,0)",
"color_description":"洋红色保持了冲击力又表现出洗练的潇洒感觉。",
"font_description":""庄冰"选用"沐瑶软笔手写体"字体,笔画俏皮轻松,辨识度极高,童趣满满。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005070432035216.png"
},
{
"id":5917,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(0,102,153)",
"sec_color":"(0,0,0)",
"color_description":"深远永恒的沉静蓝色,象征睿智,脱俗,自然。",
"font_description":""庄冰"选用"站酷小薇LOGO"字体,沉稳又富于灵动,清晰简洁,布白均匀,具有极强的时尚感。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005070432058944.png"
},
{
"id":5943,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(232,168,14)",
"sec_color":"(0,0,0)",
"color_description":"橙色是欢快活泼的光辉色彩,是暖色系中最温暖的色。",
"font_description":""庄冰"选用"站酷高端黑"字体,字体沉稳又富于灵动,清晰简洁,布白均匀,具有极强的时尚感。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_20200507043205893.png"
},
{
"id":5907,
"title":"庄冰",
"subtitle":"bing",
"first_color":"(0,0,0)",
"sec_color":"(0,0,0)",
"color_description":"基础百搭的庄重黑色,象征专业,前卫,严正。",
"font_description":""庄冰"选用"Taipei-Sans-TC-Beta-Light"字体,字形整齐划一,结构严谨,应用广泛。",
"pic_url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/generator_202005070432069646.png"
}
],
"requestId":"966af1f8390542d4a418db90c6aaafcd"
}
```
## **<a name="downloadlogoscene"> 获取logo场景</a>**
[返回到目录](#menu)
##### URL
[/web/action/logoOrderApi/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:downloadlogoscene
``` javascript
{
"actionType":"downloadlogoscene",
"actionBody":{
"title":"庄冰",//品牌名称 必填
"subtitle":"bing", //品牌标语 非必填
"id":"5942"//品牌id 必填
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"成功",
"data":[
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_screen_202005070443164353.png",
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_book_202005070443163055.png",
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_handbag_202005070443162492.png",
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_cosmetics_202005070443169760.png",
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_shampoo_202005070443164053.png",
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_bag_202005070443165126.png",
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_cup_202005070443176100.png",
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_computer_202005070443174836.png",
"https://gsb-zc.oss-cn-beijing.aliyuncs.com/scene_reception_202005070443174387.png"
],
"requestId":"dec12e32530249f298f6d06e4b0e35b3"
}
```
<a name="menu" href="/doc">返回主目录</a>
1. [下商标订单](#addOrder)
1. [下其他订单](#addOtherOrder)
1. [获取订单列表信息](#getOrderInfo)
1. [获取订单详情信息](#getOrderDetails)
1. [获取订单操作日志信息](#getOrderLogInfo)
1. [删除订单](#delOrder)
## **<a name="addOrder"> 下商标订单</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:addOrder
``` javascript
{
"channelItemCode":"zzsbzc",// Y 产品的渠道编码
"channelItemAppendName":"",// Y 填写的商标名称
"payCode": "zzsbzc-1", // Y 支付价格code
"quantity":1,// Y 购买数量
"additions":{// N 附加购买项目
"payCode": "zzsbzc-2", // Y 支付价格code
"quantity":2// Y 购买数量
},
"totalSum":360,// Y 订单总金额---(商标自助注册计算格式:小于10项为产品价格,大于10项的小项数量在additions参数中进行传递)
"payTotalSum":360, // Y 订单付款总金额
"notes": "订单备注信息",// N 订单备注
"orderContact":{ // Y 订单联系人信息
"contacts": "宋毅",// Y 联系人
"mobile": "15010929368",// Y 联系人电话
"email": "songyi@gongsibao.com",// Y 联系人邮箱
"fax": ""// N 传真
},
"channelOrder":{// Y 渠道订单信息,没有则填写{}
"channelServiceNo":"",// N 服务单号(即渠道服务单号)
"channelOrderNo":"",// N 服务订单号(即渠道服务订单号,格式为: XX1,XX2)
"needNo":"",// N 需求单号(即渠道需求单号)
"payTime":"",// N 渠道需求单号支付时间
"orderStatus":1,// N 渠道需求单号支付支付状态 1: 待付款, 2: 已付款
"channelParams":""// N 渠道参数(自定义参数)
},
"deliveryData":{//Y 交付单信息
"apply": {//申请信息
"applyAddr": "上海市杨浦区国定路346号三楼0624室",//执照详细地址
"applyArea": "",//申请区域--暂时没有用到
"businessLicensePic": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.jpg",//营业执照jpg地址
"businessLicensePdf": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.pdf",//营业执照pdf地址
"code": "91310110398635929J",//统一社会信用代码
"customerType": "ent",//申请人类型 person个人,ent企业
"identityCardNo": "",//申请人身份证号--(申请类型为个人有此值)
"identityCardPic": "",//申请人身份证jpg地址--(申请类型为个人有此值)
"identityCardPdf": "", //申请人身份证pdf地址 --(申请类型为个人有此值)
"name": "上海辰者信息科技有限公司", //申请人名称
"gzwtsUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_wts863215710393842862019914.jpg",//盖章委托书url
"smwjUrl":"",//说明文件url
"zipCode": "100000"//邮政编码
},
"tm": {
"colorizedPicUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",//商标彩色图样
"tmName": "testbiao",//商标名称
"picUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",//商标图样
"tmFormType": "3"//商标类型形式: "3": 字, "4": 图, "5": 字图
},
"nclones": [
{
"code": "02",//大类编码
"name": "颜料油漆",//大类名称
"nclThree": [
{
"code": "020008",//小项编码
"disabled": "false",
"fullname": "020008 绘画用铝粉",//小项编码加名称
"name": "绘画用铝粉",//小项名称
"pcode": "0202"//小项所属群组编码
},
{
"code": "020005",
"disabled": "false",
"fullname": "020005 食品用着色剂",
"name": "食品用着色剂",
"pcode": "0203"
}
]
}
]
}
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data": {
"orderNo": "OT26202002151649kPgs",//订单号
"channelServiceNo": "OT26202002151649kPgs",//渠道服务单号
"channelOrderNo""OT26202002151649kPgs", //渠道订单号
"channelParams": ""//渠道参数
},
"requestId": "2f90fad8108b4933bb97c3d978b0fe10"
}
```
## **<a name="addOtherOrder"> 下其他订单</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:addOrder
``` javascript
{
"channelItemCode":"fzsbzc",// Y 产品的渠道编码
"payCode": "fzsbzc-1", // Y 支付价格code
"quantity":1,// Y 购买数量
"totalSum":699,// Y 订单总金额
"payTotalSum":699, // Y 订单付款总金额
"notes": "订单备注信息",// N 订单备注
"orderContact":{ // N 订单联系人信息,没有则填写{}
"contacts": "宋毅",// N 联系人
"mobile": "15010929368",// N 联系人电话
"email": "songyi@gongsibao.com"// N 联系人邮箱
},
"channelOrder":{// Y 渠道订单信息,没有则填写{}
"channelServiceNo":"",// N 服务单号(即渠道服务单号)
"channelOrderNo":"",// N 服务订单号(即渠道服务订单号,格式为: XX1,XX2)
"needNo":"",// N 需求单号(即渠道需求单号)
"payTime":"",// N 渠道需求单号支付时间
"orderStatus":1,// N 渠道需求单号支付支付状态 1: 待付款, 2: 已付款
"channelParams":""// N 渠道参数(自定义参数)
},
"deliveryData":{}//Y 交付单信息,没有则填写{}
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data": {
"orderNo": "OT26202002151649kPgs",//订单号
"channelServiceNo": "OT26202002151649kPgs",//渠道服务单号
"channelOrderNo""OT26202002151649kPgs", //渠道订单号
"channelParams": ""//渠道参数
},
"requestId": "2f90fad8108b4933bb97c3d978b0fe10"
}
```
## **<a name="getOrderInfo"> 获取订单列表信息</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getOrderInfo
``` javascript
{
"pageIndex":1,// Y 当前页{
"pageSize":20,// Y 每页大小,最大为50
"channelItemName":"",// N 产品名称
"channelServiceNo":"",// N 渠道订单号
"orderStatus":"",// N 订单状态
"startTime": "2019-10-27",// N 开始时间
"entTime": "2019-10-31"// N 结束时间
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"dataCount":2,//总条数
"data": [
{
"orderNo": "OT31202002191443AVlJ",// 订单号
"channelServiceNo": "",//渠道服务号
"channelOrderNo": "",//渠道订单号列表,格式:XX1,XX2
"channelUserId": "15010929366",//渠道用户Id
"ownerUserId": "15010929366",//拥有者Id
"payTime": null,//支付时间
"quantity": 1,//订单数量
"serviceQuantity": 0,//订单服务数量
"orderStatusName": "待付款",//订单状态名称
"orderStatus": 1,//订单状态编码: 1: 待付款, 2: 已付款, 4: 服务中, 8: 已完成
"totalSum": "10.00",//订单金额
"payTotalSum": "10.00",//订单支付金额
"refundSum": "0.00",//退款金额
"invoiceApplyStatus": "00",//发票申请状态
"opNotes": "",//操作备注
"channelItemCode": "FW_GOODS-582221-1",//渠道产品编码
"channelItemName": "京东云PLUS公司注册(北京市)",//渠道产品名称
"channelItemAppendName": "北京海淀",//渠道产品附加名称
"price":"10.00",//产品单价
"priceTypeName":"件",//产品单价单位名称
"priceDesc":"海淀区内资一般人",//产品单价描述
"serviceItemCode": null,//服务产品编码
"picUrl": null,//产品图片地址
"created_at":""//下单时间
},
{
"orderNo": "OT31202002191456tDU7",
"channelServiceNo": "0001",
"channelOrderNo": "",
"channelUserId": "15010929366",
"ownerUserId": "15010929366",
"payTime": "2020",
"quantity": 1,
"serviceQuantity": 0,
"orderStatusName": "已付款",
"orderStatus": 2,
"totalSum": "10.00",
"payTotalSum": "10.00",
"refundSum": "0.00",
"invoiceApplyStatus": "00",
"opNotes": "",
"channelItemCode": "FW_GOODS-582221-1",
"channelItemName": "京东云PLUS公司注册(北京市)",
"channelItemAppendName": "",
"price":"10.00",
"priceTypeName":"件",
"priceDesc":"海淀区内资一般人",
"serviceItemCode": null,
"picUrl": null,
"created_at":""
}
],
"requestId": "92ced0cb4d地址cb4125a4b515227f3eabe1"
}
```
## **<a name="getOrderDetails"> 获取订单详情信息</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getOrderDetails
``` javascript
{
"orderNo":"TM26202002271337mkgN"// Y 订单号
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data": {
"orderNo": "OT31202002191443AVlJ",// 订单号
"channelServiceNo": "",//渠道服务号
"channelOrderNo": "",//渠道订单号列表,格式:XX1,XX2
"channelUserId": "15010929366",//渠道用户Id
"ownerUserId": "15010929366",//拥有者Id
"payTime": null,//支付时间
"quantity": 1,//订单数量
"serviceQuantity": 0,//订单服务数量
"orderStatusName": "待付款",//订单状态名称
"orderStatus": 1,//订单状态编码: 1: 待付款, 2: 已付款, 4: 服务中, 8: 已完成
"totalSum": "10.00",//订单金额
"payTotalSum": "10.00",//订单支付金额
"refundSum": "0.00",//退款金额
"invoiceApplyStatus": "00",//发票申请状态
"opNotes": "",//操作备注
"channelItemCode": "FW_GOODS-582221-1",//渠道产品编码
"channelItemName": "京东云PLUS公司注册(北京市)",//渠道产品名称
"channelItemAppendName": "北京海淀",//渠道产品附加名称
"price":"10.00",//产品单价
"priceTypeName":"件",//产品单价单位名称
"priceDesc":"海淀区内资一般人",//产品单价描述
"serviceItemCode": null,//服务产品编码
"picUrl": null,//产品图片地址
"created_at":""//下单时间
},
"requestId": "92ced0cb4d地址cb4125a4b515227f3eabe1"
}
```
## **<a name="getOrderLogInfo"> 获取订单操作日志信息</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getOrderLogInfo
``` javascript
{
"sourceOrderNo":"TM26202002271337mkgN"// Y 订单号
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data": [
{
"opContent": "您的订单成功支付,请等待服务人员联系您",// 内容
"created_at": "2020-02-28T18:45:44.000Z"//创建时间
},
{
"opContent": "您提交了订单,请及时支付",
"created_at": "2020-02-25T18:44:45.000Z"
}
],
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
## **<a name="delOrder"> 删除订单</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:delOrder
``` javascript
{
"orderNo":"TM26202002271337mkgN"// Y 订单号
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data":null,
"requestId": "f21446617c5e46ad889f3fab7bb69456"
}
```
<a name="menu" href="/doc">返回主目录</a>
1. [政策检索](#policyQuery)
1. [政策检索(根据政策类型检索)](#policyTypeQuery)
1. [政策申请提报](#submitPolicyNeed)
1. [政策需求列表](#getPolicyNeedList)
1. [需求信息备注提交](#submitPolicyNeedNotes)
1. [获取微信签名信息](#getWxSign)
1. [提交政策订阅](#submitPolicysubscribe)
1. [取消政策订阅](#delPolicysubscribe)
1. [获取政策订阅列表](#getPolicysubscribeList)
1. [政策类型统计计数](#policyTypeCount)
1. [政策订阅检索列表(通过订阅信息查询订阅的政策信息)](#policySubscribeQuery)
1. [获取微信网页授权令牌(用于政策H5 oauth授权登录)](#getTokenAndOpenid)
1. [政策商机(蜂擎)](#getPolicyBusinessFq)
1. [政策需求信息(icompany)](#getPolicyNeedInfo)
## **<a name="policyQuery"> 政策检索(H5)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:policyQuery
``` javascript
{
"actionType": "policyQuery",
"actionBody": {
"policyName":"北京市",
"policyProvince":"北京市",
"policyCity":"北京市"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":{
"rlzy":[
{
"policyType":"rlzy",
"policyTypeName":"人力资源",
"policyDate":"2020-02-05T14:14:24.000Z",
"policyContent":null,
"policyCity":"北京市",
"policyProvince":"北京市",
"policyLinkUrl":"http://www.beijing.gov.cn/zhengce/zhengcefagui/202002/t20200206_1625493.html",
"policySource":"京政办发〔2020〕7号",
"policyName":"北京市人民政府办公厅关于应对新型冠状病毒感染的肺炎疫情影响促进中小微企业持续健康发展的若干措施
北京市人民政府办公厅关于应对新型冠状病毒感染的肺炎疫情影响促进中小微企业持续健康发展的若干措施",
"policyNo":"bj001"
}
],
"fzbt":[
],
"jrdk":[
],
"zdfc":[
],
"ssjm":[
]
},
"requestId":"2c1ebf037aed4b30aa8e497c7a151a8e"
}
```
## **<a name="policyTypeQuery"> 政策检索(根据政策类型检索)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:policyTypeQuery
``` javascript
{
"actionType": "policyTypeQuery",
"actionBody": {
"policyName":"租金",
"policyProvince":"中央",
"policyCity":"",
"policyType":"rlzy" //必填
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"id":426,
"policyType":"rlzy",
"policyTypeName":"人力资源",
"policyDate":null,
"policyCity":"中央",
"policyProvince":"中央",
"policyLinkUrl":"http://www.gov.cn/zhengce/zhengceku/2020-02/08/content_5476137.htm",
"policySource":"人社部发〔2020〕8号",
"policyName":" 关于做好稳定劳动关系支持企业复工复产的意见",
"policyNo":"zy041"
},
{
"id":102,
"policyType":"rlzy",
"policyTypeName":"人力资源",
"policyDate":null,
"policyCity":"中央",
"policyProvince":"中央",
"policyLinkUrl":"http://www.mohrss.gov.cn/gkml/zcfg/gfxwj/202002/t20200205_358137.html",
"policySource":"人社部明电〔2020〕2号",
"policyName":"做好疫情防控期间有关就业工作的通知",
"policyNo":"zy015"
}
],
"requestId":"a47e93c2816f464da5e822cb20ee5f8b"
}
```
## **<a name="submitPolicyNeed"> 政策申请提报(H5)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:submitPolicyNeed
``` javascript
{
"actionType": "submitPolicyNeed",
"actionBody": {
"contacts":"联系人",
"company":"公司名称",
"industry":"行业名称",
"region":"行业名称",
"mobile":"13075556693",
"policy_id":1,
"popularizeUserCode":"推广人手机号"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":null,
"requestId":"6afebe73d2fa47dbb2dd451468b4e3ac"
}
```
## **<a name="getPolicyNeedList"> 政策需求列表(后台页面)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getPolicyNeedList
``` javascript
{
"actionType": "getPolicyNeedList",
"actionBody": {
"policyName":"北京",
"policyProvince":"北京市",
"policyCity":"北京市",
"policyType":"rlzy",
"customerIntention":"dgj",
"pageSize":"20",
"pageIndex":"1",
"startDate":"2020-02-16T04:14:24.000Z",
"endDate":"2020-02-21T14:14:24.000Z"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"created_at":"2020-02-16T17:52:56.000Z",
"id":9,
"uapp_id":26,
"contacts":"去问问",
"customerIntention":"wyx",
"customerIntentionName":"无意向",
"company":"qww",
"industry":"err",
"region":"where",
"mobile":"12345578901",
"policy_id":1,
"applyDate":"2020-02-16T17:52:56.000Z",
"opNotes":"{"data":[{"customerIntention":"wyx","intentionContent":"add补办了2","submitDate":"2020-02-20T06:34:19.080Z"},{"customerIntention":"wyx","intentionContent":"新增补办了","submitDate":"2020-02-20T06:33:08.132Z"}]}",
"popularizeUserCode":"13075556693",
"policyNo":"zy001",
"policyName":"疫情防控重点医疗物资和生活必需品保供工作等",
"policyType":"zdfc",
"policyTypeName":"行政措施",
"policySource":"国务院常务会议",
"policyLinkUrl":"http://www.gov.cn/premier/2020-02/05/content_5474896.htm",
"policyDate":null,
"policyProvince":"中央",
"policyCity":"中央"
}
],
"dataCount":1,
"requestId":"057c0cacd9d54d0ea7356d6577d093b8"
}
```
## **<a name="submitPolicyNeedNotes"> 需求信息备注提交(后台页面)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:submitPolicyNeedNotes
``` javascript
{
"actionType": "submitPolicyNeedNotes",
"actionBody": {
"needId":"17",
"customerIntention":"wyx",
"intentionContent":"补办了"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":null,
"requestId":"0a4483b9b7ca4594b1bfc487d49746d2"
}
```
## **<a name="getWxSign"> 获取微信签名信息</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getWxSign
``` javascript
{
"actionType": "getWxSign",
"actionBody": {
"url":"http://gsb.qifu.gongsibao.com/"//当前网页的URL,不包含#及其后面部分
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":{
"jsapi_ticket":"sM4AOVdWfPE4DxkXGEs8VJK3-61YVvRLBqI-KWT682YNCdxlqHtAFxuoVHbOtb_ZoLalzqMy0jD835ajBCINAw",
"nonceStr":"zhengcepolicy",
"timestamp":1582012108,
"url":"http://gsb.qifu.gongsibao.com/",
"signature":"269a120c2e47e6b324601fb6df40f932902d0ae7",
"appId":"wx4c91e81bbb6039cd"
},
"requestId":"5dc78d501b6d42c2af0f157cb1cceb28"
}
```
## **<a name="submitPolicysubscribe"> 提交政策订阅</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:submitPolicysubscribe
``` javascript
{
"actionType":"submitPolicysubscribe",
"actionBody":{
"openid":"test001",
"policyProvince":"北京市",
"policyTypes":["jrdk","fzbt"]
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":null,
"requestId":"6528d103010d406eaa91a2d391df4463"
}
```
## **<a name="delPolicysubscribe"> 取消政策订阅</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:delPolicysubscribe
``` javascript
{
"actionType":"delPolicysubscribe",
"actionBody":{
"openid":"test001",
"policyId":"1"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":null,
"requestId":"6528d103010d406eaa91a2d391df4463"
}
```
## **<a name="getPolicysubscribeList"> 获取政策订阅列表</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getPolicysubscribeList
``` javascript
{
"actionType":"getPolicysubscribeList",
"actionBody":{
"openid":"test001"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"id":2,
"policyProvince":"北京市",
"policyTypes":"jrdk,fzbt",
"created_at":"2020-02-21T07:18:54.000Z"
}
],
"requestId":"c41dd1cd791e4fe19765d8dcb8fa4b6e"
}
```
## **<a name="policyTypeCount"> 政策类型统计计数</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:policyTypeCount
``` javascript
{
"actionType": "policyTypeCount",
"actionBody": {
"policyName":"租金",
"policyProvince":"北京市"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":{
"rlzy":144,
"fzbt":93,
"jrdk":124,
"zdfc":152,
"ssjm":91
},
"requestId":"bed42cc870b04a879d485a9f501df8a1"
}
```
## **<a name="policySubscribeQuery"> 政策订阅检索列表(通过订阅信息查询订阅的政策信息)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:policySubscribeQuery
``` javascript
{
"actionType":"policySubscribeQuery",
"actionBody":{
"openid":"test001",
"policySubscribeId":"2"
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"id":106,
"policyType":"jrdk",
"policyTypeName":"金融贷款",
"policyDate":null,
"policyCity":"北京市",
"policyProvince":"北京市",
"policyLinkUrl":"http://www.beijing.gov.cn/zhengce/zhengcefagui/202002/t20200206_1625493.html",
"policySource":"京政办发〔2020〕7号",
"policyName":"促进中小微企业持续健康发展的若干措施",
"policyNo":"bj001"
},
{
"id":107,
"policyType":"fzbt",
"policyTypeName":"租金减免",
"policyDate":null,
"policyCity":"北京市",
"policyProvince":"北京市",
"policyLinkUrl":"http://www.beijing.gov.cn/zhengce/zhengcefagui/202002/t20200206_1625493.html",
"policySource":"京政办发〔2020〕7号",
"policyName":"促进中小微企业持续健康发展的若干措施",
"policyNo":"bj001"
},
{
"id":111,
"policyType":"jrdk",
"policyTypeName":"金融贷款",
"policyDate":null,
"policyCity":"北京市",
"policyProvince":"北京市",
"policyLinkUrl":"http://www.beijing.gov.cn/zhengce/zhengcefagui/202002/t20200203_1622987.html",
"policySource":"京政办发〔2020〕5号",
"policyName":"北京市政府关于进一步支持打好肺炎疫情防控阻击战若干措施",
"policyNo":"bj006"
},
........
],
"requestId":"7c7b8cea10ba4d42975bd44f1182c37c"
}
```
## **<a name="getTokenAndOpenid"> 获取微信网页授权令牌(用于政策H5 oauth授权登录)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getTokenAndOpenid
``` javascript
{
"actionType":"getTokenAndOpenid",
"actionBody":{
"code":"CODE",
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":{
"access_token":"30_y2XdEQ7M8nTc20PW6iBiXqfXMnPxKJXILsYrcctt-sx_9kaEpXq0-hyhGHV1s0uIlT2BIziNVree6kR1IcQ-LMPdL9DjGUm21_hnNoweYTI",
"expires_in":7200,
"refresh_token":"30_1dTSPdkF7z1ezBLk1IfeHUier1BYhfmtlaWcKcvNBMggdLdgrldUPxa-oUGFAqalzqUAnYdK8xP33e7jUEimFGZOaDUHgHZsaoeKBpocnX8",
"openid":"o7kgSs0yK_SOhRVl_LSHpL156EAE",
"scope":"snsapi_base"
},
"requestId":"7c7b8cea10ba4d42975bd44f1182c37c"
}
```
## **<a name="getPolicyBusinessFq"> 政策商机(蜂擎)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getPolicyBusinessFq
``` javascript
{
"actionType":"getPolicyBusinessFq",
"actionBody":{
"policyName":"医疗物资",//政策名称
"policyProvince":"中央",//政策省份
"policyType":"zdfc",//政策类型编码'fzbt':'租金减免','jrdk':'金融贷款','zdfc':'行政措施','ssjm':'税收优惠','rlzy':'人力资源'
"pageSize":"5",//分页参数 页面政策数量 默认20 不能超过200 超过200按200获取数据
"pageIndex":"1",//分页参数 当前页码 默认1
"startDate":"2020-02-10T04:14:24.000Z",//开始时间
"endDate":"2020-02-21T14:14:24.000Z",//截止时间
"salesmanMobile":"18611398533"//业务员手机号
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"created_at":"2020-02-21T11:46:03.000Z",//申请日期
"region":"安徽省安庆市",//申请人地区
"mobile":"15665313398",//申请人手机号
"industry":"生态种植、养殖、农旅",//申请人行业
"contacts":"牛思磊",//申请人姓名
"policyNo":"zy001",//政策编号
"policyName":"疫情防控重点医疗物资和生活必需品保供工作等",//政策名称
"policyType":"zdfc",//政策类型编码
"policyTypeName":"行政措施",//政策类型
"company":"安庆市海鸿生态农业发展有限公司",//申请企业名称
"popularizeUserCode":"18611398533",//所属业务员手机号
"policyLinkUrl":"http://www.gov.cn/premier/2020-02/05/content_5474896.htm",//政策链接
"policyProvince":"中央"//政策所属省份
},
{
"created_at":"2020-02-21T06:53:33.000Z",
"region":"成都",
"mobile":"17388438807",
"industry":"零售",
"contacts":"李逸雪",
"policyNo":"zy001",
"policyName":"疫情防控重点医疗物资和生活必需品保供工作等",
"policyType":"zdfc",
"policyTypeName":"行政措施",
"company":"陕西宝胜贸易有限公司",
"popularizeUserCode":"18611398533",
"policyLinkUrl":"http://www.gov.cn/premier/2020-02/05/content_5474896.htm",
"policyProvince":"中央"
},
{
"created_at":"2020-02-21T09:49:38.000Z",
"region":"北京市",
"mobile":"15801286499",
"industry":"医疗",
"contacts":"陶绍芳",
"policyNo":"zy001",
"policyName":"疫情防控重点医疗物资和生活必需品保供工作等",
"policyType":"zdfc",
"policyTypeName":"行政措施",
"company":"北京瑞轩同源医疗器械销售中心",
"popularizeUserCode":"18611398533",
"policyLinkUrl":"http://www.gov.cn/premier/2020-02/05/content_5474896.htm",
"policyProvince":"中央"
},
{
"created_at":"2020-02-19T15:49:21.000Z",
"region":"安徽省安庆市",
"mobile":"15665313398",
"industry":"生态种植、养殖、农旅",
"contacts":"牛思磊",
"policyNo":"zy001",
"policyName":"疫情防控重点医疗物资和生活必需品保供工作等",
"policyType":"zdfc",
"policyTypeName":"行政措施",
"company":"安庆市海鸿生态农业发展有限公司",
"popularizeUserCode":"18611398533",
"policyLinkUrl":"http://www.gov.cn/premier/2020-02/05/content_5474896.htm",
"policyProvince":"中央"
},
{
"created_at":"2020-02-19T15:14:54.000Z",
"region":"武汉市",
"mobile":"17786045473",
"industry":"食品",
"contacts":"钱庆华",
"policyNo":"zy001",
"policyName":"疫情防控重点医疗物资和生活必需品保供工作等",
"policyType":"zdfc",
"policyTypeName":"行政措施",
"company":"武汉金汉韵调味食品有限公司",
"popularizeUserCode":"18611398533",
"policyLinkUrl":"http://www.gov.cn/premier/2020-02/05/content_5474896.htm",
"policyProvince":"中央"
}
],
"dataCount":15,//总条数
"requestId":"0368996e8cec4816a92b203e692e7124"
}
```
## **<a name="getPolicyNeedInfo"> 政策需求信息(icompany)</a>**
[返回到目录](#menu)
##### URL
[/web/action/policy/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getPolicyNeedInfo
``` javascript
{
"actionType":"getPolicyNeedInfo",
"actionBody":{
"contacts":"李咏梅",//申请人姓名
"company":"苏州云逸企业管理服务有限公司",//申请企业
"industry":"教育培训",//行业名称
"region":"苏州",//申请人地址
"mobile":"13862088336",//申请人电话
"startDate":"2020-02-10T04:14:24.000Z",//开始时间
"endDate":"2020-02-29T14:14:24.000Z"//截止时间
}
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":[
{
"contacts":"李咏梅",//申请人姓名
"company":"苏州云逸企业管理服务有限公司",//申请企业
"industry":"教育培训",//行业名称
"region":"苏州",//申请人地址
"mobile":"13862088336",//申请人电话
"created_at":"2020-02-28T04:20:56.000Z"//申请时间
}
],
"dataCount":1,//总条数
"requestId":"015ad782709d4fe3bdfdda36e4c2bca5"
}
```
<a name="menu" href="/doc">返回主目录</a>
1. [产品列表-根据产品大类获取](#getProductListByOneCode)
1. [产品列表-根据产品二类获取](#getProductListByTwoCode)
1. [产品详情](#getProductDetail)
## **<a name="getProductListByOneCode"> 产品列表-根据产品大类编码获取</a>**
[返回到目录](#menu)
##### URL
[/action/product/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getProductList
``` javascript
{
"pathCode":"sbfu" //查询的路径:大类code
}
```
#### 返回结果 0为成功,否则为失败
```javascript
{
"status": 0,
"msg": "success",
"data": [
{
"uapp_id": 26,//平台id--显示不用
"path_code": "/sbfu/sbzc/",//产品路径编码--显示不用
"path_name": "/商标服务/商标注册/",//产品路径名称--显示不用
"item_code": "zzsbzc",//产品code
"item_name": "商标注册【自助申请】",//产品名称
"channel_item_code": "zzsbzc",//渠道产品code
"channel_item_name": "商标注册【自助申请】",//渠道产品名称
"pic_url": "http://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_qft_pi15755163570461.png",//产品的图片
"product_short_desc": "适合熟知商标注册流程的企业用户", //产品的介绍
"product_desc": "[\"自己检索商标,准备官方所需注册材料\",\"提交迅速,及时反馈\",\"全流程跟踪,掌握申请进度\"]", //产品的描述列表
"desc_url": null,//产品介绍图片地址
"icon_url": null,//产品的icon
"productType_id": 2,//产品类型id--显示用不到
"sort": 1,//排序
"pay_code": "zzsbzc-1", //支付价格code
"service_charge": 30,//服务费
"public_expense": 270,//官费
"price": 300,//价格
"price_type": "mj",//定价类型:mj:每件,mc:每次,mt:每天,my:每月,mn:每年,qj:区间
"price_type_name": "每件",//定价类型名称
"price_desc": "每件(10小项)",//定价描述
"min_qty": null,//区间最小值
"max_qty": null//区间最大值
}
],
"requestId": "c39ee8a924074904b1694dd3bf2d6c4b"
}
```
## **<a name="getProductListByTwoCode"> 产品列表-根据产品二类获取</a>**
[返回到目录](#menu)
##### URL
[/action/product/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getProductList
``` javascript
{
"pathCode":"sbfu/sbzc" //查询的路径:大类code/二类code
}
```
#### 返回结果 0为成功,否则为失败
```javascript
{
"status": 0,
"msg": "success",
"data": [
{
"uapp_id": 26,//平台id--显示不用
"path_code": "/sbfu/sbzc/",//产品路径编码--显示不用
"path_name": "/商标服务/商标注册/",//产品路径名称--显示不用
"item_code": "zzsbzc",//产品code
"item_name": "商标注册【自助申请】",//产品名称
"channel_item_code": "zzsbzc",//渠道产品code
"channel_item_name": "商标注册【自助申请】",//渠道产品名称
"pic_url": "http://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_qft_pi15755163570461.png",//产品的图片
"product_short_desc": "适合熟知商标注册流程的企业用户", //产品的介绍
"product_desc": "[\"自己检索商标,准备官方所需注册材料\",\"提交迅速,及时反馈\",\"全流程跟踪,掌握申请进度\"]", //产品的描述列表
"desc_url": null,//产品介绍图片地址
"icon_url": null,//产品的icon
"productType_id": 2,//产品类型id--显示用不到
"sort": 1,//排序
"pay_code": "zzsbzc-1", //支付价格code
"service_charge": 30,//服务费
"public_expense": 270,//官费
"price": 300,//价格
"price_type": "mj",//定价类型:mj:每件,mc:每次,mt:每天,my:每月,mn:每年,qj:区间
"price_type_name": "每件",//定价类型名称
"price_desc": "每件(10小项)",//定价描述
"min_qty": null,//区间最小值
"max_qty": null//区间最大值
}
],
"requestId": "c39ee8a924074904b1694dd3bf2d6c4b"
}
```
## **<a name="getProductDetail"> 产品详情</a>**
[返回到目录](#menu)
##### URL
[/action/product/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getProductDetail
``` javascript
{
"channelItemCode":"zzsbzc"
}
```
#### 返回结果 0为成功,否则为失败
```javascript
{
"status": 0,
"msg": "success",
"data": {
"id": 1,//产品Id
"uapp_id": 26,
"path_code": "/sbfu/sbzc/",
"path_name": "/商标服务/商标注册/",
"item_code": "zzsbzc",
"item_name": "商标注册【自助申请】",
"channel_item_code": "zzsbzc",
"channel_item_name": "商标注册【自助申请】",
"pic_url": "http://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_qft_pi15755163570461.png",
"product_short_desc": "适合熟知商标注册流程的企业用户", //产品的介绍
"product_desc": "[\"自己检索商标,准备官方所需注册材料\",\"提交迅速,及时反馈\",\"全流程跟踪,掌握申请进度\"]", //产品的描述列表
"desc_url": null,
"icon_url": null,
"productType_id": 2,
"price_list": [
{
"pay_code": "zzsbzc-1", //支付价格code
"price": 300,
"supply_price": 270,
"service_charge": 30,
"public_expense": 270,
"is_default": 1,//是否默认,1默认,0不是默认
"is_show": 1,//是否显示在页面进行下单(1是,0不是,0为下单时附加的购买项目)
"price_type": "mj",
"price_type_name": "每件",
"sort": 1,
"price_desc": "每件(10小项)",
"min_qty": null,
"max_qty": null
},
{
"pay_code": "zzsbzc-2", //支付价格code
"price": 30,
"supply_price": 30,
"service_charge": 30,
"public_expense": 30,
"is_default": 0,
"is_show": 0,
"price_type": "mx",
"price_type_name": "项",
"sort": 2,
"price_desc": "每个小项的价格",
"min_qty": null,
"max_qty": null
}
]
},
"requestId": "5913fc3ae97a402e93330c2d488f1f7e"
}
```
\ No newline at end of file
<a name="menu" href="/doc">返回主目录</a>
1. [尼斯查询(一)](#getNcl)
1. [尼斯查询(二)](#getNclTwo)
1. [文字转图片](#word2pic)
1. [商标样式转换](#uploadStandardTm)
1. [图片转pdf](#pic2pdf)
1. [调整委托书](#adjustWTSSize)
1. [获取oss配置参数](#getOssConfig)
1. [获取商标订单交付信息](#getTmOrderDeliveryInfo)
1. [获取商标官文列表信息](#getTmOrderDeliveryFlowList)
1. [修改订单联系人](#updateContacts)
1. [商标订单修改-商标信息修改](#updateTmInfo)
1. [商标订单修改-商标尼斯信息修改](#updateNclInfo)
1. [商标订单修改-修改申请人信息](#updateCustomerInfo)
1. [商标订单修改-修改交官材料](#updateOfficial)
1. [商标方案确认](#tmConfirm)
1. [推送委托书模板邮件(阿里云)](#sendAliWtsEmail)
## **<a name="getNcl"> 尼斯查询(一)</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getNcl
``` javascript
{
"nclcode": "01" //Y string 尼斯编号(尼斯大类类别获取群组类别)
}
```
#### 返回结果
```javascript
{
"status": 0,//操作状态0:操作成功-1:操作失败
"msg": "操作成功",//操作信息
"data": [
{
"code": "01",//尼斯大类编码
"name": "",//大类名称
"pcode": "",//父类编码 大类要为父类则为空
"type": 1,
"children": [//尼斯群组信息
{
"code": "0106",//群组编码
"name": "化学试剂",//群组名称
"pcode": "01",//群组父类编码 即其所属大类编码
"type": 1,
"children": [//尼斯小类
{
"code": "010122",//小类编码
"name": "生物化学催化剂",//小类名称
"pcode": "0106"//小类父类编码 即其所属群组编码
}
]
}
]
},
{
"code": "42",
"name": "",
"pcode": "",
"type": 1,
"children": [
{
"code": "4211",
"name": "提供化学研究服务",
"pcode": "42",
"type": 1,
"children": [
{
"code": "",
"name": "生物化学研究和分析",
"pcode": "4211"
}
]
}
]
}
],
"requestId": "8cd7e91ec607453c805da8302f3e068c"
}
```
## **<a name="getNclTwo"> 尼斯查询(二)</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getNcl
``` javascript
{
"name": "生物化学",//Y strin 尼斯名称
"ncls ": ["01"]//N List 尼斯大类编码列表
}
```
#### 返回结果
```javascript
{
"status": 0,//操作状态0:操作成功-1:操作失败
"msg": "操作成功",//操作信息
"data": [
{
"code": "01",//尼斯大类编码
"name": "",//大类名称
"pcode": "",//父类编码 大类要为父类则为空
"type": 1,
"children": [//尼斯群组信息
{
"code": "0106",//群组编码
"name": "化学试剂",//群组名称
"pcode": "01",//群组父类编码 即其所属大类编码
"type": 1,
"children": [//尼斯小类
{
"code": "010122",//小类编码
"name": "生物化学催化剂",//小类名称
"pcode": "0106"//小类父类编码 即其所属群组编码
}
]
}
]
},
{
"code": "42",
"name": "",
"pcode": "",
"type": 1,
"children": [
{
"code": "4211",
"name": "提供化学研究服务",
"pcode": "42",
"type": 1,
"children": [
{
"code": "",
"name": "生物化学研究和分析",
"pcode": "4211"
}
]
}
]
}
],
"requestId": "8cd7e91ec607453c805da8302f3e068c"
}
```
## **<a name="word2pic"> 文字转图片</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:word2pic
``` javascript
{
"word": "235"
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2pic0310054131e546c68e572e72845e10ed.jpg"
},
"requestId":"289fc8efa0ca4db79affc34dc0b78b9e"
}
```
## **<a name="uploadStandardTm"> 商标样式转换</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:uploadStandardTm
``` javascript
{
"key": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_picUrl295615693112289552019824.jpg"
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_picUrl295652019824.jpg",
"url2":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/6tkoZLO7vLzvFpzP2sOo.jpg"
},
"requestId":"610fa9e864014d9b92bb63bb28eab6df"
}
```
## **<a name="pic2pdf"> 图片转pdf</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:pic2pdf
``` javascript
{
"key": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_picUrl295615693112289552019824.jpg"
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz23491569102019824.pdf"
},
"requestid":"0f6a38044034475eb47e80a78d3bdd6c"
}
```
## **<a name="adjustWTSSize"> 调整委托书</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:adjustWTSSize
``` javascript
{
"key":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2pic0310054131e546c68e572e72845e10ed.jpg"
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"操作成功",
"data":{
"url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_wts745215693150065342019824.jpg"
},
"bizmsg":"empty",
"requestid":"10fc80d7084549238ad59a1016a92c5f"
}
```
## **<a name="getOssConfig"> 获取oss配置数据</a>**
[返回到目录](#menu)
##### URL
[/action/tmTools/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getOssConfig
``` javascript
{
"bucket":"gsb-zc"// N 桶的名称
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":{
"OSSAccessKeyId":"LTAIyAUK8AD04P5S",
"policy":"eyJleHBpcmF0aW9uIjoiMjExOS0xMi0zMVQxNjowMDowMC4wMDBaIiwiY29uZGl0aW9ucyI6W1siY29udGVudC1sZW5ndGgtcmFuZ2UiLDAsMTA0ODU3NjAwMF0sWyJzdGFydHMtd2l0aCIsIiRrZXkiLCJ6YyJdXX0=",
"Signature":"PIEo2XGkySgyJIEcdEcM0G+0D04=",
"Bucket":"gsb-zc",
"success_action_status":201,
"url":"https://gsb-zc.oss-cn-beijing.aliyuncs.com"
},
"requestId":"becb6b6bfa9449129c84d35b13b5e5e7"
}
```
## **<a name="getTmOrderDeliveryInfo"> 获取商标订单交付信息</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getOrderDeliveryInfo
``` javascript
{
"orderNo":"TM26202002271337mkgN"// Y 订单号
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data": {
"deliveryUpdated":"2020-02-19T06:53:09.000Z",//流程状态创建时间
"deliveryStatus": "dsh",//流程状态编码
"deliveryStatusName": "待审核",//流程状态名称(dsccl: 待上传材料,dfwsfw: 待服务,dqrfa:待确认方案,fabtg:方案不通过, dsh: 待审核, ddj: 待递交, ydj: 已递交, ywc: 已完成)
"deliveryStatusList":[
{
"deliveryUpdated":"2020-02-18T06:53:09.000Z",//流程状态创建时间
"deliveryStatus": "dsccl",//流程状态编码
"deliveryStatusName": "待上传材料"//流程状态名称(dsccl: 待上传材料,dfwsfw: 待服务,dqrfa:待确认方案,fabtg:方案不通过, dsh: 待审核, ddj: 待递交, ydj: 已递交, ywc: 已完成)
},
{
"deliveryUpdated":"2020-02-19T06:53:09.000Z",
"deliveryStatus": "dsh",
"deliveryStatusName": "待审核"
}
],
"notes":"", // 订单备注
"opNotes":"", //操作备注
"orderContact": {
"id": 448,
"contactName": "宋毅",//联系人
"mobile": "15010929368",//联系人手机号
"tel": null,//联系人电话
"email": "songyi@gongsibao.com",//联系人邮箱
"fax": null//联系人传真
},
"apply": {//申请信息
"applyAddr": "上海市杨浦区国定路346号三楼0624室",//执照详细地址
"applyArea": "",//申请区域--暂时没有用到
"businessLicensePic": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.jpg",//营业执照jpg地址
"businessLicensePdf": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.pdf",//营业执照pdf地址
"code": "91310110398635929J",//统一社会信用代码
"customerType": "ent",//申请人类型 person个人,ent企业
"identityCardNo": "",//申请人身份证号--(申请类型为个人有此值)
"identityCardPic": "",//申请人身份证jpg地址--(申请类型为个人有此值)
"identityCardPdf": "", //申请人身份证pdf地址 --(申请类型为个人有此值)
"name": "上海辰者信息科技有限公司", //申请人名称
"gzwtsUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_wts863215710393842862019914.jpg",//盖章委托书url
"smwjUrl":"",//说明文件url
"zipCode": "100000"//邮政编码
},
"tm": {
"colorizedPicUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",//商标彩色图样
"tmName": "testbiao",//商标名称
"picUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",//商标图样
"tmFormType": "3"//商标类型形式: 3: 字, 4: 图, 5: 字图
},
"nclones": [
{
"tbCode": "TB26202002271337v5y9",//提报号
"tmRegistNum": "",//商标申请号
"code": "02",//尼斯大类编码
"name": "颜料油漆",//尼斯大类名称
"submitTime": "",//提报时间
"tmStatus": "dsh",//商标状态编码
"tmStatusName": "待审核",//商标状态编码名称
"nclCount": 2,//尼斯小项数量
"nclPublicExpense": 300,
"nclThree": [
{
"code": "020008",//小项编码
"disabled": false,
"fullname": "020008 绘画用铝粉",//小项编码加名称
"name": "绘画用铝粉",//小项名称
"pcode": "0202"//小项所属群组编码
},
{
"code": "020005",
"name": "食品用着色剂",
"pcode": "0203",
"disabled": "false",
"fullname": "020005 食品用着色剂"
}
]
}
]
},
"requestId": "fe7bb14275d94b48a041c371dfde50aa"
}
```
## **<a name="getTmOrderDeliveryFlowList"> 获取商标官文列表信息</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/order/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:getOrderDeliveryFlowList
``` javascript
{
"sourceOrderNoList":["29471633","29956232"]// Y 商标申请号
}
```
#### 返回结果
```javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data": [
{
"sourceOrderNo": "29471633",
"flowList": [
{
"updated": "2020-02-19T06:53:09.000Z",// 创建时间
"tmStatus": "13",//官文状态编码
"uploadFileName": "29471633-注册-PASSED.pdf",//上传文件名称
"returnReceiptUrl": "http://gsb-public.oss-cn-beijing.aliyuncs.com/netsharp_Z7wfENwQZDWiWFbMsSchDkFJKfBb3Ah4.jpg",//官文回执Url
"tmStatusName": "已下发商标注册证"//官文状态名称
}
]
},
{
"sourceOrderNo": "29956232",
"flowList": [
{
"updated": "2020-02-20T06:53:09.000Z",
"tmStatus": "3",
"uploadFileName": "29956232-已受理-RECVED.pdf",
"returnReceiptUrl": "http://gsb-public.oss-cn-beijing.aliyuncs.com/netsharp_bj38cY3ZkN4AGj48kQGNSEaSMECJXN5c.pdf",
"tmStatusName": "已受理"
}
]
}
],
"requestId": "97b78e24d2a441dca525d36af9b7c75d"
}
```
## **<a name="updateContacts"> 修改订单联系人</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/opOrder/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:updateContacts
``` javascript
{
"orderNo":"TM26202002271337mkgN",// Y 订单号
"notes":"订单备注",// N 订单备注
"orderContact":{ // Y 订单联系人信息
"contacts": "宋毅",// Y 联系人
"mobile": "15010929368",// Y 联系人电话
"email": "songyi@gongsibao.com",// Y 联系人邮箱
"fax": ""// N 传真
}
}
```
#### 返回结果
```javascript
{
"status":0,// 0为成功,否则失败
"msg":"success",
"data":null,
"requestId":"ab3dbb7dce5b4b44bc1d1c83e887ffee"
}
```
## **<a name="updateTmInfo"> 商标订单修改-商标信息修改</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/opOrder/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:updateTmOrder
``` javascript
{
"orderNo":"TM26202002271337mkgN",// Y 订单号
"tm": {
"colorizedPicUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",// Y 商标彩色图样
"tmName": "testbiao",// Y 商标名称
"channelItemAppendName":"testbiao",// Y 填写的商标名称 如:AA为例:文字不处理为:AA、文字及图处理成:AA及图、图形处理成:图形
"picUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",// Y 商标图样
"tmFormType": "3"// Y 商标类型形式:1: 立体, 3: 字, 4: 图, 5: 字图, 6: 颜色, 7: 彩色
}
}
```
#### 返回结果
```javascript
{
"status":0,// 0为成功,否则失败
"msg":"success",
"data":null,
"requestId":"ab3dbb7dce5b4b44bc1d1c83e887ffenclonese"
}
```
## **<a name="updateNclInfo"> 商标订单修改-商标尼斯信息修改</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/opOrder/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:updateTmOrder
``` javascript
{
"orderNo":"TM26202002271337mkgN",// Y 订单号
"additions":{// N 附加购买项目
"payCode": "zzsbzc-2", // Y 支付价格code
"quantity":2// Y 购买数量
},
"nclones": [
{
"code": "02",//大类编码
"name": "颜料油漆",//大类名称
"nclThree": [
{
"code": "020008",//小项编码
"disabled": "false",
"fullname": "020008 绘画用铝粉",//小项编码加名称
"name": "绘画用铝粉",//小项名称
"pcode": "0202"//小项所属群组编码
},
{
"code": "020005",
"disabled": "false",
"fullname": "020005 食品用着色剂",
"name": "食品用着色剂",
"pcode": "0203"
}
]
}
]
}
```
#### 返回结果
```javascript
{
"status":0,// 0为成功,否则失败
"msg":"success",
"data":null,
"requestId":"ab3dbb7dce5b4b44bc1d1c83e887ffee"
}
```
## **<a name="updateCustomerInfo"> 商标订单修改-修改申请人信息</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/opOrder/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:updateTmOrder
``` javascript
{
"orderNo":"TM26202002271337mkgN",// Y 订单号
"apply": {// Y 申请信息
"applyAddr": "上海市杨浦区国定路346号三楼0624室",// Y 执照详细地址
"applyArea": "",//申请区域--暂时没有用到
"businessLicensePic": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.jpg",// Y 营业执照jpg地址
"businessLicensePdf": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.pdf",// Y 营业执照pdf地址
"code": "91310110398635929J",// Y 统一社会信用代码
"customerType": "ent",// Y 申请人类型 person个人,ent企业
"identityCardNo": "",// N 申请人身份证号--(申请类型为个人有此值)
"identityCardPic": "",// N 申请人身份证jpg地址--(申请类型为个人有此值)
"identityCardPdf": "", // N 申请人身份证pdf地址 --(申请类型为个人有此值)
"name": "上海辰者信息科技有限公司", // Y 申请人名称
"zipCode": "100000"// Y 邮政编码
}
}
```
#### 返回结果
```javascript
{
"status":0,// 0为成功,否则失败
"msg":"success",
"data":null,
"requestId":"ab3dbb7dce5b4b44bc1d1c83e887ffee"
}
```
## **<a name="updateOfficial"> 商标订单修改-修改交官材料</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/opOrder/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:updateTmOrder
``` javascript
{
"orderNo":"TM26202002271337mkgN",// Y 订单号
"apply": {// Y 申请信息
"identityCardPic": "",// N 申请人身份证jpg地址--(申请类型为个人有此值)
"identityCardPdf": "", // N 申请人身份证pdf地址 --(申请类型为个人有此值)
"businessLicensePic": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.jpg",// Y 营业执照jpg地址
"businessLicensePdf": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.pdf",// Y 营业执照pdf地址
"gzwtsUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_wts863215710393842862019914.jpg",// Y 盖章委托书url
"smwjUrl":""// N 说明文件url
}
}
```
#### 返回结果
```javascript
{
"status":0,// 0为成功,否则失败
"msg":"success",
"data":null,
"requestId":"ab3dbb7dce5b4b44bc1d1c83e887ffee"
}
```
## **<a name="tmConfirm"> 商标方案确认</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/opOrder/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求头中需要增加userpin(用户登录后的凭证)的值
#### 渠道执行的类型 actionType:tmConfirm
``` javascript
{
"orderNo ":"346c3091684e4e0eef",
"isConfirm ":"1",
"notes ":"",
}
```
#### 返回结果
```javascript
{
"status":0,
"data":null,
"msg":"商标方案确认成功",
"requestId":"0c14f04dc187486b829e392dc87c70c6"
}
```
## **<a name="sendAliWtsEmail"> 推送委托书模板邮件(阿里云)</a>**
[返回到目录](#menu)
##### URL
[/web/opaction/opOrder/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:sendAliWtsEmail
``` javascript
{
"email ":"zhuangbing@gongsibao.com",
}
```
#### 返回结果
```javascript
{
"status":0,
"msg":"success",
"data":"250 Data Ok: queued as freedom",
"requestId":"9f0d22bd7afe402f830a559b2e7a412a"
}
```
<a name="menu" href="/doc">返回主目录</a>
1. [短信验证码](#smsCode)
1. [密码登录](#pwdLogin)
1. [验证码登录](#userPinByLgoinVcode)
1. [用户注册](#userPinByRegister)
1. [按照手机号和验证码修改密码](#putUserPwdByMobile)
1. [获取用户登录信息](#getLoginInfo)
1. [退出](#logout)
1. [飞书登录](#feishuLogin)
## **<a name="smsCode"> 短信验证码</a>**
[返回到目录](#menu)
##### URL
[/web/auth/accessAuth/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getVerifyCode
``` javascript
{
"mobile":"15010929366" // Y 手机号
}
```
#### 返回结果
```javascript
{
"status": 0, // 0为成功,否则失败
"msg": "success",
"data": null,
"requestId": "4f3ea2afee3542f88d6b938394af84d8"
}
```
## **<a name="pwdLogin"> 帐号密码登录</a>**
[返回到目录](#menu)
##### URL
[/web/auth/accessAuth/springBoard]
#### 参数格式 `JSON`getVerifyCode
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:userPinByLgoin
``` javascript
{
"userName":"15010929366", // Y 用户名
"password":"123456" // Y 密码
}
```
#### 返回结果
``` javascript
{
"status": 0,// 0为成功,2010为账户或密码错误,2060为重复登录,否则失败
"msg": "success",
"data": {
"userpin": "230ecdf3333944ff834f56fba10a02aa" //用户登录后的凭证,增、删、改、查、涉及用户的需要传递此值在请求头中
},
"requestId": "1b12b0e9c190436da000386ddf693c8f"
}
```
## **<a name="userPinByLgoinVcode"> 验证码登录</a>**
[返回到目录](#menu)
##### URL
[/web/auth/accessAuth/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:userPinByLgoinVcode
``` javascript
{
"mobile":"15010929366", // Y 手机号
"vcode":"593555" // Y 验证码
}
```
#### 返回结果
``` javascript
{
"status": 0,// 0为成功,2030为验证码错误,2060为重复登录,否则失败
"msg": "success",
"data": {
"userpin": "230ecdf3333944ff834f56fba10a02aa" //用户登录后的凭证,增、删、改、查、涉及用户的需要传递此值在请求头中
},
"requestId": "1b12b0e9c190436da000386ddf693c8f"
}
```
## **<a name="userPinByRegister"> 用户注册</a>**
[返回到目录](#menu)
##### URL
[/web/auth/accessAuth/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:userPinByRegister
``` javascript
{
"mobile":"15010929366", // Y 手机号
"vcode":"593555", // Y 验证码
"password":"123456" // Y 密码
}
```
#### 返回结果
``` javascript
{
"status": 0,// 0为成功,2030为验证码错误,2000为已经存在此用户,注册失败,否则失败
"msg": "success",
"data": {
"userpin": "230ecdf3333944ff834f56fba10a02aa" //用户登录后的凭证,增、删、改、查、涉及用户的需要传递此值在请求头中
},
"requestId": "1b12b0e9c190436da000386ddf693c8f"
}
```
## **<a name="putUserPwdByMobile"> 按照手机号和验证码修改密码(修改后得重新登录)</a>**
[返回到目录](#menu)
##### URL
[/web/auth/accessAuth/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:putUserPwdByMobile
``` javascriptgetVerifyCode
{
"mobile":"15010929366", // Y 手机号
"vcode":"593555", // Y 验证码
"newPwd":"123456" // Y 新密码
}
```
#### 返回结果
``` javascript
{
"status": 0,// 0为成功,2030为验证码错误,否则失败
"msg": "success",
"data": null,
"requestId": "1b12b0e9c190436da000386ddf693c8f"
}
```
## **<a name="logout"> 退出</a>**
[返回到目录](#menu)
##### URL
[/web/auth/accessAuth/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:logout
``` javascript
{
"userpin":"15010929366" // Y 用户登录凭证key
}
```
#### 返回结果
``` javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data": null,
"requestId": "1b12b0e9c190436da000386ddf693c8f"
}
```
## **<a name="getLoginInfo"> 获取用户登录信息</a>**
[返回到目录](#menu)
##### URL
[/web/auth/accessAuth/springBoard]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 渠道执行的类型 actionType:getLoginInfo
``` javascript
{
"userpin":"15010929366" // Y 用户登录凭证key
}
```
#### 返回结果
``` javascript
{
"status": 0,// 0为成功,否则失败
"msg": "success",
"data": {
"id": 9,
"uapp_id": 26,
"channel_userid": "15010929366",//渠道用户ID
"channel_username": "15010929366",//账户
"channel_nickname": "",
"open_id": null,
"head_url": null,
"mobile": "15010929366",//手机号
"org_name": "",
"org_path": "",
"email": "",
"is_admin": 0,//是否管理员
"is_super": 0,//是否超级管理员
"is_enabled": 1,
"userpin": "18c44186d54a45ea8777ef4c0a4252f6"//用户登录后的凭证key
},
"requestId": "ad31ced9ac7044f69f453185d9c1e241"
}
```
## **<a name="feishuLogin"> 飞书登录</a>**
[返回到目录](#menu)
##### URL
[http://feishu.qifu.gongsibao.com:4012/feishu/login?code={code}&state={state}&open_id={open_id}]
#### HTTP请求方式 `GET`
``` javascript
请求参数说明 :
code:用户飞书登录预授权码 必填
state:前端获取的token信息 必填
open_id:用户openid 非必填
```
#### 返回结果
``` javascript
{
"status":0,
"msg":"success",
"data":{
"userpin":"1508e7f73efd49cda8d2bc7d2552b09b"
}
}
```
data:function(){
return {
downloadTimes : 1, // 设置检查重试次数变量,
code : '', // 下载文件的code值
}
},
methods : {
// 创建下载文件方法
exportFile() {
var self = this;
var datas = self.querydata;
if(!datas || datas.length == 0) {
that.$message.warning(`无查询结果`);
return ;
}
/* [{},{},{}]转换成[[],[],[]] 格式 */
var rows = [];
for(var dd of datas) {
var arr = [];
for(var _idx in dd) {
arr.push(dd[_idx]);
}
rows.push(arr);
}
this.code = "";
/* 生成文件 */
self.$root.postReq("/web/filedownloadCtl/download",{rows : rows}).then(function(d){
if(d.status == 0) {
setTimeout((function(){
/* d.data 返回文件标识 */
self.code = d.data;
self.downloadFile();
}), 2000);
}
});
},
/* 循环检查code, 并下载文件 */
downloadFile() {
var self = this;
self.$root.postReq("/web/filedownloadCtl/findOne",{code : self.code}).then(function(d){
if(d.status == 0) {
if(d.data && d.data.filePath) {
downloadTimes = 1;
/* 文件生成成功 */
window.open(d.data.filePath, "_blank");
} else {
/* 递归2秒一次,超过5次,下载失败 */
if(downloadTimes > 5) {
downloadTimes = 1;
/* 下载超时 */
return;
}
downloadTimes = downloadTimes + 1;
setTimeout((function(){
self.downloadFile();
}), 2000);
}
}
});
},
}
/* Element Chalk Variables */
/* Transition
-------------------------- */
$--all-transition: all .3s cubic-bezier(.645,.045,.355,1) !default;
$--fade-transition: opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
$--fade-linear-transition: opacity 200ms linear !default;
$--md-fade-transition: transform 300ms cubic-bezier(0.23, 1, 0.32, 1), opacity 300ms cubic-bezier(0.23, 1, 0.32, 1) !default;
$--border-transition-base: border-color .2s cubic-bezier(.645,.045,.355,1) !default;
$--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default;
/* Colors
-------------------------- */
$--color-white: black !default;
$--color-black: #000 !default;
$--color-primary: #2c3e50 !default;
$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
$--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */
$--color-success: #67c23a !default;
$--color-warning: #e6a23c !default;
$--color-danger: #f56c6c !default;
$--color-info: #909399 !default;
$--color-success-light: mix($--color-white, $--color-success, 80%) !default;
$--color-warning-light: mix($--color-white, $--color-warning, 80%) !default;
$--color-danger-light: mix($--color-white, $--color-danger, 80%) !default;
$--color-info-light: mix($--color-white, $--color-info, 80%) !default;
$--color-success-lighter: mix($--color-white, $--color-success, 90%) !default;
$--color-warning-lighter: mix($--color-white, $--color-warning, 90%) !default;
$--color-danger-lighter: mix($--color-white, $--color-danger, 90%) !default;
$--color-info-lighter: mix($--color-white, $--color-info, 90%) !default;
$--color-text-primary: #303133 !default;
$--color-text-regular: #606266 !default;
$--color-text-secondary: #909399 !default;
$--color-text-placeholder: #c0c4cc !default;
/* Link
-------------------------- */
$--link-color: $--color-primary-light-2 !default;
$--link-hover-color: $--color-primary !default;
/* Background
-------------------------- */
$--background-color-base: #f5f7fa !default;
/* Border
-------------------------- */
$--border-width-base: 1px !default;
$--border-style-base: solid !default;
$--border-color-base: #dcdfe6 !default;
$--border-color-light: #e4e7ed !default;
$--border-color-lighter: #ebeef5 !default;
$--border-color-extra-light: #f2f6fc !default;
$--border-color-hover: $--color-text-placeholder !default;
$--border-base: $--border-width-base $--border-style-base $--border-color-base !default;
$--border-radius-base: 4px !default;
$--border-radius-small: 2px !default;
$--border-radius-circle: 100% !default;
/* Box-shadow
-------------------------- */
$--box-shadow-base: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04) !default;
$--box-shadow-dark: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .12) !default;
$--box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !default;
/* Fill
-------------------------- */
$--fill-base: $--color-white !default;
/* Font
-------------------------- */
$--font-path: 'fonts' !default;
$--font-size-base: 14px !default;
$--font-size-small: 13px !default;
$--font-size-large: 18px !default;
$--font-color-disabled-base: #bbb !default;
$--font-weight-primary: 500 !default;
$--font-line-height-primary: 24px !default;
/* Size
-------------------------- */
$--size-base: 14px !default;
/* z-index
-------------------------- */
$--index-normal: 1 !default;
$--index-top: 1000 !default;
$--index-popper: 2000 !default;
/* Disable base
-------------------------- */
$--disabled-fill-base: $--background-color-base !default;
$--disabled-color-base: $--color-text-placeholder !default;
$--disabled-border-base: $--border-color-light !default;
/* Icon
-------------------------- */
$--icon-color: #666 !default;
$--icon-color-base: $--color-info !default;
/* Checkbox
-------------------------- */
$--checkbox-font-size: 14px !default;
$--checkbox-font-weight: $--font-weight-primary !default;
$--checkbox-color: $--color-text-regular !default;
$--checkbox-input-height: 14px !default;
$--checkbox-input-width: 14px !default;
$--checkbox-input-border-radius: $--border-radius-small !default;
$--checkbox-input-fill: $--color-white !default;
$--checkbox-input-border: $--border-base !default;
$--checkbox-input-border-color: $--border-color-base !default;
$--checkbox-icon-color: $--color-white !default;
$--checkbox-disabled-input-border-color: $--border-color-base !default;
$--checkbox-disabled-input-fill: #edf2fc !default;
$--checkbox-disabled-icon-color: $--color-text-placeholder !default;
$--checkbox-disabled-checked-input-fill: $--border-color-extra-light !default;
$--checkbox-disabled-checked-input-border-color: $--border-color-base !default;
$--checkbox-disabled-checked-icon-color: $--color-text-placeholder !default;
$--checkbox-checked-text-color: $--color-primary !default;
$--checkbox-checked-input-border-color: $--color-primary !default;
$--checkbox-checked-input-fill: $--color-primary !default;
$--checkbox-checked-icon-color: $--fill-base !default;
$--checkbox-input-border-color-hover: $--color-primary !default;
$--checkbox-bordered-height: 40px !default;
$--checkbox-bordered-padding: 9px 20px 9px 10px !default;
$--checkbox-bordered-medium-padding: 7px 20px 7px 10px !default;
$--checkbox-bordered-small-padding: 5px 15px 5px 10px !default;
$--checkbox-bordered-mini-padding: 3px 15px 3px 10px !default;
$--checkbox-bordered-medium-input-height: 14px !default;
$--checkbox-bordered-medium-input-width: 14px !default;
$--checkbox-bordered-medium-height: 36px !default;
$--checkbox-bordered-small-input-height: 12px !default;
$--checkbox-bordered-small-input-width: 12px !default;
$--checkbox-bordered-small-height: 32px !default;
$--checkbox-bordered-mini-input-height: 12px !default;
$--checkbox-bordered-mini-input-width: 12px !default;
$--checkbox-bordered-mini-height: 28px !default;
$--checkbox-button-font-size: $--font-size-base !default;
$--checkbox-button-checked-fill: $--color-primary !default;
$--checkbox-button-checked-color: $--color-white !default;
$--checkbox-button-checked-border-color: $--color-primary !default;
/* Radio
-------------------------- */
$--radio-font-size: 14px !default;
$--radio-font-weight: $--font-weight-primary !default;
$--radio-color: $--color-text-regular !default;
$--radio-input-height: 14px !default;
$--radio-input-width: 14px !default;
$--radio-input-border-radius: $--border-radius-circle !default;
$--radio-input-fill: $--color-white !default;
$--radio-input-border: $--border-base !default;
$--radio-input-border-color: $--border-color-base !default;
$--radio-icon-color: $--color-white !default;
$--radio-disabled-input-border-color: $--disabled-border-base !default;
$--radio-disabled-input-fill: $--disabled-fill-base !default;
$--radio-disabled-icon-color: $--disabled-fill-base !default;
$--radio-disabled-checked-input-border-color: $--disabled-border-base !default;
$--radio-disabled-checked-input-fill: $--disabled-fill-base !default;
$--radio-disabled-checked-icon-color: $--color-text-placeholder !default;
$--radio-checked-text-color: $--color-primary !default;
$--radio-checked-input-border-color: $--color-primary !default;
$--radio-checked-input-fill: $--color-white !default;
$--radio-checked-icon-color: $--color-primary !default;
$--radio-input-border-color-hover: $--color-primary !default;
$--radio-bordered-height: 40px !default;
$--radio-bordered-padding: 12px 20px 0 10px !default;
$--radio-bordered-medium-padding: 10px 20px 0 10px !default;
$--radio-bordered-small-padding: 8px 15px 0 10px !default;
$--radio-bordered-mini-padding: 6px 15px 0 10px !default;
$--radio-bordered-medium-input-height: 14px !default;
$--radio-bordered-medium-input-width: 14px !default;
$--radio-bordered-medium-height: 36px !default;
$--radio-bordered-small-input-height: 12px !default;
$--radio-bordered-small-input-width: 12px !default;
$--radio-bordered-small-height: 32px !default;
$--radio-bordered-mini-input-height: 12px !default;
$--radio-bordered-mini-input-width: 12px !default;
$--radio-bordered-mini-height: 28px !default;
$--radio-button-font-size: $--font-size-base !default;
$--radio-button-checked-fill: $--color-primary !default;
$--radio-button-checked-color: $--color-white !default;
$--radio-button-checked-border-color: $--color-primary !default;
$--radio-button-disabled-checked-fill: $--border-color-extra-light !default;
/* Select
-------------------------- */
$--select-border-color-hover: $--border-color-hover !default;
$--select-disabled-border: $--disabled-border-base !default;
$--select-font-size: $--font-size-base !default;
$--select-close-hover-color: $--color-text-secondary !default;
$--select-input-color: $--color-text-placeholder !default;
$--select-multiple-input-color: #666 !default;
$--select-input-focus-background: $--color-primary !default;
$--select-input-font-size: 14px !default;
$--select-option-color: $--color-text-regular !default;
$--select-option-disabled-color: $--color-text-placeholder !default;
$--select-option-disabled-background: $--color-white !default;
$--select-option-height: 34px !default;
$--select-option-hover-background: $--background-color-base !default;
$--select-option-selected: $--color-primary !default;
$--select-option-selected-hover: $--background-color-base !default;
$--select-group-color: $--color-info !default;
$--select-group-height: 30px !default;
$--select-group-font-size: 12px !default;
$--select-dropdown-background: $--color-white !default;
$--select-dropdown-shadow: $--box-shadow-light !default;
$--select-dropdown-empty-color: #999 !default;
$--select-dropdown-max-height: 274px !default;
$--select-dropdown-padding: 6px 0 !default;
$--select-dropdown-empty-padding: 10px 0 !default;
$--select-dropdown-border: solid 1px $--border-color-light !default;
/* Alert
-------------------------- */
$--alert-padding: 8px 16px !default;
$--alert-border-radius: $--border-radius-base !default;
$--alert-title-font-size: 13px !default;
$--alert-description-font-size: 12px !default;
$--alert-close-font-size: 12px !default;
$--alert-close-customed-font-size: 13px !default;
$--alert-success-color: $--color-success-lighter !default;
$--alert-info-color: $--color-info-lighter !default;
$--alert-warning-color: $--color-warning-lighter !default;
$--alert-danger-color: $--color-danger-lighter !default;
$--alert-icon-size: 16px !default;
$--alert-icon-large-size: 28px !default;
/* Message Box
-------------------------- */
$--msgbox-width: 420px !default;
$--msgbox-border-radius: 4px !default;
$--msgbox-font-size: $--font-size-large !default;
$--msgbox-content-font-size: $--font-size-base !default;
$--msgbox-content-color: $--color-text-regular !default;
$--msgbox-error-font-size: 12px !default;
$--msgbox-padding-primary: 15px !default;
$--msgbox-success-color: $--color-success !default;
$--msgbox-info-color: $--color-info !default;
$--msgbox-warning-color: $--color-warning !default;
$--msgbox-danger-color: $--color-danger !default;
/* Message
-------------------------- */
$--message-shadow: $--box-shadow-base !default;
$--message-min-width: 380px !default;
$--message-background-color: #edf2fc !default;
$--message-padding: 15px 15px 15px 20px !default;
$--message-content-color: $--color-text-regular !default;
$--message-close-color: $--color-text-placeholder !default;
$--message-close-size: 16px !default;
$--message-close-hover-color: $--color-text-secondary !default;
$--message-success-color: $--color-success !default;
$--message-info-color: $--color-info !default;
$--message-warning-color: $--color-warning !default;
$--message-danger-color: $--color-danger !default;
/* Notification
-------------------------- */
$--notification-width: 330px !default;
$--notification-padding: 14px 26px 14px 13px !default;
$--notification-radius: 8px !default;
$--notification-shadow: $--box-shadow-light !default;
$--notification-border-color: $--border-color-lighter !default;
$--notification-icon-size: 24px !default;
$--notification-close-font-size: $--message-close-size !default;
$--notification-group-margin: 13px !default;
$--notification-font-size: $--font-size-base !default;
$--notification-color: $--color-text-regular !default;
$--notification-title-font-size: 16px !default;
$--notification-title-color: $--color-text-primary !default;
$--notification-close-color: $--color-text-secondary !default;
$--notification-close-hover-color: $--color-text-regular !default;
$--notification-success-color: $--color-success !default;
$--notification-info-color: $--color-info !default;
$--notification-warning-color: $--color-warning !default;
$--notification-danger-color: $--color-danger !default;
/* Input
-------------------------- */
$--input-font-size: $--font-size-base !default;
$--input-color: $--color-text-regular !default;
$--input-width: 140px !default;
$--input-height: 40px !default;
$--input-border: $--border-base !default;
$--input-border-color: $--border-color-base !default;
$--input-border-radius: $--border-radius-base !default;
$--input-border-color-hover: $--border-color-hover !default;
$--input-fill: $--color-white !default;
$--input-fill-disabled: $--disabled-fill-base !default;
$--input-color-disabled: $--font-color-disabled-base !default;
$--input-icon-color: $--color-text-placeholder !default;
$--input-placeholder-color: $--color-text-placeholder !default;
$--input-max-width: 314px !default;
$--input-hover-border: $--border-color-hover !default;
$--input-clear-hover-color: $--color-text-secondary !default;
$--input-focus-border: $--color-primary !default;
$--input-focus-fill: $--color-white !default;
$--input-disabled-fill: $--disabled-fill-base !default;
$--input-disabled-border: $--disabled-border-base !default;
$--input-disabled-color: $--disabled-color-base !default;
$--input-disabled-placeholder-color: $--color-text-placeholder !default;
$--input-medium-font-size: 14px !default;
$--input-medium-height: 36px !default;
$--input-small-font-size: 13px !default;
$--input-small-height: 32px !default;
$--input-mini-font-size: 12px !default;
$--input-mini-height: 28px !default;
/* Cascader
-------------------------- */
$--cascader-menu-fill: $--fill-base !default;
$--cascader-menu-font-size: $--font-size-base !default;
$--cascader-menu-radius: $--border-radius-base !default;
$--cascader-menu-border: $--border-base !default;
$--cascader-menu-border-color: $--border-color-base !default;
$--cascader-menu-border-width: $--border-width-base !default;
$--cascader-menu-color: $--color-text-regular !default;
$--cascader-menu-option-color-active: $--color-text-secondary !default;
$--cascader-menu-option-fill-active: rgba($--color-text-secondary, 0.12) !default;
$--cascader-menu-option-color-hover: $--color-text-regular !default;
$--cascader-menu-option-fill-hover: rgba($--color-text-primary, 0.06) !default;
$--cascader-menu-option-color-disabled: #999 !default;
$--cascader-menu-option-fill-disabled: rgba($--color-black, 0.06) !default;
$--cascader-menu-option-empty-color: #666 !default;
$--cascader-menu-group-color: #999 !default;
$--cascader-menu-shadow: 0 1px 2px rgba($--color-black, 0.14), 0 0 3px rgba($--color-black, 0.14) !default;
$--cascader-menu-option-pinyin-color: #999 !default;
$--cascader-menu-submenu-shadow: 1px 1px 2px rgba($--color-black, 0.14), 1px 0 2px rgba($--color-black, 0.14) !default;
/* Group
-------------------------- */
$--group-option-flex: 0 0 (1/5) * 100% !default;
$--group-option-offset-bottom: 12px !default;
$--group-option-fill-hover: rgba($--color-black, 0.06) !default;
$--group-title-color: $--color-black !default;
$--group-title-font-size: $--font-size-base !default;
$--group-title-width: 66px !default;
/* Tab
-------------------------- */
$--tab-font-size: $--font-size-base !default;
$--tab-border-line: 1px solid #e4e4e4 !default;
$--tab-header-color-active: $--color-text-secondary !default;
$--tab-header-color-hover: $--color-text-regular !default;
$--tab-header-color: $--color-text-regular !default;
$--tab-header-fill-active: rgba($--color-black, 0.06) !default;
$--tab-header-fill-hover: rgba($--color-black, 0.06) !default;
$--tab-vertical-header-width: 90px !default;
$--tab-vertical-header-count-color: $--color-white !default;
$--tab-vertical-header-count-fill: $--color-text-secondary !default;
/* Button
-------------------------- */
$--button-font-size: 14px !default;
$--button-font-weight: $--font-weight-primary !default;
$--button-border-radius: $--border-radius-base !default;
$--button-padding-vertical: 12px !default;
$--button-padding-horizontal: 20px !default;
$--button-medium-font-size: 14px !default;
$--button-medium-border-radius: $--border-radius-base !default;
$--button-medium-padding-vertical: 10px !default;
$--button-medium-padding-horizontal: 20px !default;
$--button-small-font-size: 12px !default;
$--button-small-border-radius: #{$--border-radius-base - 1} !default;
$--button-small-padding-vertical: 9px !default;
$--button-small-padding-horizontal: 15px !default;
$--button-mini-font-size: 12px !default;
$--button-mini-border-radius: #{$--border-radius-base - 1} !default;
$--button-mini-padding-vertical: 7px !default;
$--button-mini-padding-horizontal: 15px !default;
$--button-default-color: $--color-text-regular !default;
$--button-default-fill: $--color-white !default;
$--button-default-border: $--border-color-base !default;
$--button-disabled-color: $--color-text-placeholder !default;
$--button-disabled-fill: $--color-white !default;
$--button-disabled-border: $--border-color-lighter !default;
$--button-primary-border: $--color-primary !default;
$--button-primary-color: $--color-white !default;
$--button-primary-fill: $--color-primary !default;
$--button-success-border: $--color-success !default;
$--button-success-color: $--color-white !default;
$--button-success-fill: $--color-success !default;
$--button-warning-border: $--color-warning !default;
$--button-warning-color: $--color-white !default;
$--button-warning-fill: $--color-warning !default;
$--button-danger-border: $--color-danger !default;
$--button-danger-color: $--color-white !default;
$--button-danger-fill: $--color-danger !default;
$--button-info-border: $--color-info !default;
$--button-info-color: $--color-white !default;
$--button-info-fill: $--color-info !default;
$--button-hover-tint-percent: 20% !default;
$--button-active-shade-percent: 10% !default;
/* cascader
-------------------------- */
$--cascader-height: 200px !default;
/* Switch
-------------------------- */
$--switch-on-color: $--color-primary !default;
$--switch-off-color: $--border-color-base !default;
$--switch-disabled-color: $--border-color-lighter !default;
$--switch-disabled-text-color: $--color-text-placeholder !default;
$--switch-font-size: $--font-size-base !default;
$--switch-core-border-radius: 10px !default;
$--switch-width: 40px !default;
$--switch-height: 20px !default;
$--switch-button-size: 16px !default;
/* Dialog
-------------------------- */
$--dialog-background-color: $--color-primary-light-4 !default;
$--dialog-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !default;
$--dialog-close-hover-color: $--color-primary !default;
$--dialog-title-font-size: $--font-size-large !default;
$--dialog-font-size: 14px !default;
$--dialog-line-height: $--font-line-height-primary !default;
$--dialog-padding-primary: 20px !default;
/* Table
-------------------------- */
$--table-border-color: $--border-color-lighter !default;
$--table-border: 1px solid $--table-border-color !default;
$--table-text-color: $--color-text-regular !default;
$--table-header-color: $--color-text-secondary !default;
$--table-row-hover-background: $--background-color-base !default;
$--table-current-row-background: $--color-primary-light-9 !default;
$--table-header-background: $--color-white !default;
$--table-footer-background: $--color-text-placeholder !default;
$--table-fixed-box-shadow: 0 0 10px rgba(0, 0, 0, .12) !default;
/* Pagination
-------------------------- */
$--pagination-font-size: 13px !default;
$--pagination-fill: $--color-white !default;
$--pagination-color: $--color-text-primary !default;
$--pagination-border-radius: 3px !default;
$--pagination-button-color: $--color-text-primary !default;
$--pagination-button-width: 35.5px !default;
$--pagination-button-height: 28px !default;
$--pagination-button-disabled-color: $--color-text-placeholder !default;
$--pagination-button-disabled-fill: $--color-white !default;
$--pagination-hover-fill: $--color-primary !default;
$--pagination-hover-color: $--color-white !default;
/* Popover
-------------------------- */
$--popover-fill: $--color-white !default;
$--popover-font-size: $--font-size-base !default;
$--popover-border-color: $--border-color-lighter !default;
$--popover-arrow-size: 6px !default;
$--popover-padding: 12px !default;
$--popover-padding-large: 18px 20px !default;
$--popover-title-font-size: 16px !default;
$--popover-title-color: $--color-text-primary !default;
/* Tooltip
-------------------------- */
$--tooltip-fill: $--color-text-primary !default;
$--tooltip-color: $--color-white !default;
$--tooltip-font-size: 12px !default;
$--tooltip-border-color: $--color-text-primary !default;
$--tooltip-arrow-size: 6px !default;
$--tooltip-padding: 10px !default;
/* Tag
-------------------------- */
$--tag-padding: 0 10px !default;
$--tag-fill: rgba($--color-primary, 0.10) !default;
$--tag-color: $--color-primary !default;
$--tag-border: rgba($--color-primary, 0.20) !default;
$--tag-font-size: 12px !default;
$--tag-border-radius: 4px !default;
$--tag-info-fill: rgba($--color-info, 0.10) !default;
$--tag-info-border: rgba($--color-info, 0.20) !default;
$--tag-info-color: $--color-info !default;
$--tag-primary-fill: rgba($--color-primary, 0.10) !default;
$--tag-primary-border: rgba($--color-primary, 0.20) !default;
$--tag-primary-color: $--color-primary !default;
$--tag-success-fill: rgba($--color-success, 0.10) !default;
$--tag-success-border: rgba($--color-success, 0.20) !default;
$--tag-success-color: $--color-success !default;
$--tag-warning-fill: rgba($--color-warning, 0.10) !default;
$--tag-warning-border: rgba($--color-warning, 0.20) !default;
$--tag-warning-color: $--color-warning !default;
$--tag-danger-fill: rgba($--color-danger, 0.10) !default;
$--tag-danger-border: rgba($--color-danger, 0.20) !default;
$--tag-danger-color: $--color-danger !default;
/* Tree
-------------------------- */
$--tree-node-hover-color: $--background-color-base !default;
$--tree-text-color: $--color-text-regular !default;
$--tree-expand-icon-color: $--color-text-placeholder !default;
/* Dropdown
-------------------------- */
$--dropdown-menu-box-shadow: $--box-shadow-light !default;
$--dropdown-menuItem-hover-fill: $--color-primary-light-9 !default;
$--dropdown-menuItem-hover-color: $--link-color !default;
/* Badge
-------------------------- */
$--badge-fill: $--color-danger !default;
$--badge-radius: 10px !default;
$--badge-font-size: 12px !default;
$--badge-padding: 6px !default;
$--badge-size: 18px !default;
/* Card
--------------------------*/
$--card-border-color: $--border-color-lighter !default;
$--card-border-radius: 4px !default;
$--card-padding: 20px !default;
/* Slider
--------------------------*/
$--slider-main-background-color: $--color-primary !default;
$--slider-runway-background-color: $--border-color-light !default;
$--slider-button-hover-color: mix($--color-primary, black, 97%) !default;
$--slider-stop-background-color: $--color-white !default;
$--slider-disable-color: $--color-text-placeholder !default;
$--slider-margin: 16px 0 !default;
$--slider-border-radius: 3px !default;
$--slider-height: 6px !default;
$--slider-button-size: 16px !default;
$--slider-button-wrapper-size: 36px !default;
$--slider-button-wrapper-offset: -15px !default;
/* Steps
--------------------------*/
$--steps-border-color: $--disabled-border-base !default;
$--steps-border-radius: 4px !default;
$--steps-padding: 20px !default;
/* Menu
--------------------------*/
$--menu-item-color: $--color-text-primary !default;
$--menu-item-fill: $--color-white !default;
$--menu-item-hover-fill: $--color-primary-light-9 !default;
/* Rate
--------------------------*/
$--rate-height: 20px !default;
$--rate-font-size: $--font-size-base !default;
$--rate-icon-size: 18px !default;
$--rate-icon-margin: 6px !default;
$--rate-icon-color: $--color-text-placeholder !default;
/* DatePicker
--------------------------*/
$--datepicker-color: $--color-text-regular !default;
$--datepicker-off-color: $--color-text-placeholder !default;
$--datepicker-header-color: $--color-text-regular !default;
$--datepicker-icon-color: $--color-text-primary !default;
$--datepicker-border-color: $--disabled-border-base !default;
$--datepicker-inner-border-color: #e4e4e4 !default;
$--datepicker-inrange-color: $--border-color-extra-light !default;
$--datepicker-inrange-hover-color: $--border-color-extra-light !default;
$--datepicker-active-color: $--color-primary !default;
$--datepicker-text-hover-color: $--color-primary !default;
$--datepicker-cell-hover-color: #fff !default;
/* Loading
--------------------------*/
$--loading-spinner-size: 42px !default;
$--loading-fullscreen-spinner-size: 50px !default;
/* Scrollbar
--------------------------*/
$--scrollbar-background-color: rgba($--color-text-secondary, .3) !default;
$--scrollbar-hover-background-color: rgba($--color-text-secondary, .5) !default;
/* Carousel
--------------------------*/
$--carousel-arrow-font-size: 12px !default;
$--carousel-arrow-size: 36px !default;
$--carousel-arrow-background: rgba(31, 45, 61, 0.11) !default;
$--carousel-arrow-hover-background: rgba(31, 45, 61, 0.23) !default;
$--carousel-indicator-width: 30px !default;
$--carousel-indicator-height: 2px !default;
$--carousel-indicator-padding-horizontal: 4px !default;
$--carousel-indicator-padding-vertical: 12px !default;
$--carousel-indicator-out-color: $--border-color-hover !default;
/* Collapse
--------------------------*/
$--collapse-border-color: $--border-color-lighter !default;
$--collapse-header-height: 48px !default;
$--collapse-header-padding: 20px !default;
$--collapse-header-fill: $--color-white !default;
$--collapse-header-color: $--color-text-primary !default;
$--collapse-header-size: 13px !default;
$--collapse-content-fill: $--color-white !default;
$--collapse-content-size: 13px !default;
$--collapse-content-color: $--color-text-primary !default;
/* Transfer
--------------------------*/
$--transfer-border-color: $--border-color-lighter !default;
$--transfer-border-radius: $--border-radius-base !default;
$--transfer-panel-width: 200px !default;
$--transfer-panel-header-height: 40px !default;
$--transfer-panel-header-background: $--background-color-base !default;
$--transfer-panel-footer-height: 40px !default;
$--transfer-panel-body-height: 246px !default;
$--transfer-item-height: 30px !default;
$--transfer-item-hover-background: $--color-text-secondary !default;
$--transfer-filter-height: 32px !default;
/* Header
--------------------------*/
$--header-padding: 0 20px !default;
/* Footer
--------------------------*/
$--footer-padding: 0 20px !default;
/* Main
--------------------------*/
$--main-padding: 20px !default;
/* Break-point
--------------------------*/
$--sm: 768px !default;
$--md: 992px !default;
$--lg: 1200px !default;
$--xl: 1920px !default;
$--breakpoints: (
'xs' : (max-width: $--sm),
'sm' : (min-width: $--sm),
'md' : (min-width: $--md),
'lg' : (min-width: $--lg),
'xl' : (min-width: $--xl)
);
$--breakpoints-spec: (
'xs-only' : (max-width: $--sm - 1),
'sm-and-up' : (min-width: $--sm),
'sm-only': "(min-width: #{$--sm}) and (max-width: #{$--md} - 1)",
'sm-and-down': (max-width: $--md - 1),
'md-and-up' : (min-width: $--md),
'md-only': "(min-width: #{$--md}) and (max-width: #{$--lg } - 1)",
'md-and-down': (max-width: $--lg - 1),
'lg-and-up' : (min-width: $--lg),
'lg-only': "(min-width: #{$--lg}) and (max-width: #{$--xl } - 1)",
'lg-and-down': (max-width: $--xl - 1),
'xl-only' : (min-width: $--xl),
);
var gulp = require('gulp');
var fs = require("fs");
var tap = require('gulp-tap');
var minimist = require('minimist');
var merge = require('merge-stream');
var rename = require('gulp-rename');
var del = require("del");
var concat = require('gulp-concat');
var gulpif=require("gulp-if");
var knownOptions = {
string: 'name',
string: 'bizfile',
default: { name: process.env.NODE_ENV || 'Test' }
};
var options = minimist(process.argv.slice(2), knownOptions);
var name = options.name;
var bizfile = options.bizfile;
const BUILD_PATH = "./extra/build";
const DEST_PATH = "./extra/dest";
const CTL_PATH = "./app/base/controller/impl";
const SERVICE_PATH = "./app/base/service/impl";
const DAO_PATH = "./app/base/db/impl";
const PAGE_PATH = "./app/front/vues/pages";
const VUECOM_PATH = "./app/front/vues";
const CSS_PATH = "./app/front/entry/public/css";
const IMG_PATH = "./extra/imgs";
const DEST_IMGPATH="./app/front/entry/public/imgs";
const METABIZ_PATH = "./app/base/db/metadata/bizs/wx76a324c5d201d1a4";
gulp.task('makefile', function (done) {
// 将你的默认的任务代码放在这
del("./extra/dest/*");
var tmpName = name.toLowerCase();
var fstream = gulp.src("./extra/build/*.js")
.pipe(tap(function (file) {
var sfile = file.contents.toString('utf-8');
var rpstr = sfile.replace(/\$\{Name\}/g, name);
file.contents = new Buffer(rpstr, "utf-8");
})).pipe(
rename(function (path) {
path.basename = path.basename.replace("templ", tmpName);
})
).pipe(gulp.dest("./extra/dest"));
return fstream;
// var pageStream=gulp.src("./extra/build/page/**/*").pipe(
// gulp.dest("./extra/dest")
// );
// return merge(fstream, pageStream);
});
gulp.task('page', function (cbk) {
var tmpName = name.toLowerCase();
return gulp.src("./extra/build/page/templPage/*.*")
.pipe(
rename(function (path) {
path.basename = path.basename.replace("templ", tmpName);
})
).pipe(tap(function (file) {
var sfile = file.contents.toString();
var rpstr = sfile.replace(/\$\{COMNAME\}/g, "gsb_" + tmpName);
file.contents = new Buffer(rpstr, "utf-8");
})).pipe(
gulp.dest("./extra/dest/" + tmpName + "/")
);
});
gulp.task("cpctl", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Ctl.js").pipe(
rename(function (path) {
path.basename=path.basename.substring(0,1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(CTL_PATH));
});
gulp.task("cpsve", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Sve.js").pipe(
rename(function (path) {
path.basename = path.basename.substring(0, 1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(SERVICE_PATH));
});
gulp.task("cpdao", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "Dao.js").pipe(
rename(function (path) {
path.basename = path.basename.substring(0, 1).toLowerCase() + path.basename.substring(1);
})
).pipe(gulp.dest(DAO_PATH));
});
gulp.task("cppage", function (cbk) {
var tmpName=name.toLowerCase();
return gulp.src("./extra/dest/" + tmpName + "/*.*").pipe(gulp.dest(PAGE_PATH + "/" + tmpName + "/"));
});
gulp.task("cpbizfile", function (cbk) {
return gulp.src("./extra/build/page/meta.js").pipe(
rename(function (path) {
if (bizfile) {
path.basename = bizfile;
} else {
path.basename = name;
}
})
).pipe(gulp.dest(METABIZ_PATH + "/"));
});
gulp.task("simple", ['page', 'cppage', 'cpbizfile'], function (done) {
done();
});
gulp.task('all', ['makefile', 'page', 'cpctl', 'cpsve', 'cpdao', 'cppage', 'cpbizfile'], function (done) {
done();
});
var minifycss = require('gulp-minify-css')
gulp.task("pagecss",function(cbk){
function defaultcondition(file){
if(file.path.indexOf("spring")>=0){
return false;
}else if(file.path.indexOf("summer")>=0){
return false;
}else if(file.path.indexOf("autumn")>=0){
return false;
}else if(file.path.indexOf("winter")>=0){
return false;
}else{
return true;
}
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(defaultcondition,concat("pagecom.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("springcss",function(cbk){
function springcondition(file){
if(file.path.indexOf("spring")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(springcondition,concat("spring.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("summercss",function(cbk){
function summercondition(file){
if(file.path.indexOf("summer")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(summercondition,concat("summer.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("autumncss",function(cbk){
function autumncondition(file){
if(file.path.indexOf("autumn")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(autumncondition,concat("autumn.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("wintercss",function(cbk){
function wintercondition(file){
if(file.path.indexOf("winter")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(wintercondition,concat("winter.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task("1",function(cbk){
function mobilecondition(file){
if(file.path.indexOf("mobile")>=0){
return true;
}
return false;
}
return gulp.src(VUECOM_PATH+"/**/*/*.css").pipe(
gulpif(mobilecondition,concat("mobile.css"))
).pipe(minifycss()).pipe(gulp.dest(CSS_PATH+"/"));
});
gulp.task('allcss', ['pagecss', 'springcss', 'summercss', 'autumncss', 'wintercss'], function (done) {
done();
});
gulp.task('watch', function () {
gulp.watch(VUECOM_PATH+"/**/*/*.css",gulp.series(['allcss']));
});
gulp.task("basehandle",function(cbk){
return gulp.src(VUECOM_PATH+"/base/**/*.vue").
pipe(tap(function (file) {
file.contents=new Buffer(require(file.path).replace(/\n/g,""), "utf-8");
})).pipe(gulp.dest(VUECOM_PATH+"/allie/base/"));
});
var gulp = require('gulp'),
imagemin = require('gulp-imagemin');
pngquant = require('imagemin-pngquant'),
gulp.task('testimg', function () {
del("./extra/testimgs/*");
return gulp.src(IMG_PATH+'/**/*.{png,jpg,gif,ico}')
.pipe(imagemin({
optimizationLevel: 1, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: true,//类型:Boolean 默认:false 多次优化svg直到完全优化
use:[pngquant({
quality: [0.3]
})]
}))
//.pipe(gulp.dest(DEST_IMGPATH));
.pipe(gulp.dest("./extra/testimgs/"));
});
\ No newline at end of file
var http = require('http');
var express = require('express');
var app = express();
var setttings=require("./app/config/settings");
var environment = require('./app/config/environment');
// all environments
environment(app);//初始化环境
// 错误处理中间件应当在路由加载之后才能加载
var server = http.createServer(app);
server.listen(setttings.port, function(){
console.log('Express server listening on port ' + app.get('port'));
});
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "bigdata",
"version": "1.0.0",
"description": "h5framework",
"main": "main.js",
"scripts": {
"dev": "nodemon main.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "jy",
"license": "ISC",
"dependencies": {
"@alicloud/pop-core": "^1.7.7",
"MD5": "^1.3.0",
"after": "^0.8.2",
"ali-oss": "^4.12.2",
"alipay-sdk": "^3.1.1",
"aliyun-api-gateway": "^1.1.6",
"axios": "^0.19.2",
"babel-polyfill": "^6.26.0",
"base64id": "^1.0.0",
"bluebird": "^3.5.1",
"body-parser": "^1.18.2",
"co": "^4.6.0",
"connect-redis": "^3.3.3",
"continuation-local-storage": "^3.2.1",
"cookie-parser": "^1.4.3",
"crypto": "^1.0.1",
"crypto-js": "^3.1.9-1",
"ejs": "^2.5.8",
"element-ui": "^2.4.0",
"engine.io-parser": "^2.1.2",
"errorhandler": "^1.5.0",
"exif-js": "^2.3.0",
"express": "^4.16.2",
"express-session": "^1.15.6",
"gm": "^1.23.1",
"marked": "^0.7.0",
"method-override": "^2.3.10",
"mongoose": "^5.7.1",
"morgan": "^1.9.0",
"multer": "^1.3.0",
"mysql2": "^1.5.3",
"node-cron": "^2.0.1",
"node-uuid": "^1.4.8",
"node-xlsx": "^0.15.0",
"nodemailer": "^6.3.0",
"pinyin": "^2.9.0",
"puppeteer": "^1.20.0",
"qr-image": "^3.2.0",
"sequelize": "^4.37.8",
"sequelize-cli": "^4.1.1",
"serve-favicon": "^2.4.5",
"sha1": "^1.1.1",
"socket.io": "^2.1.1",
"tenpay": "^2.1.18",
"uuid": "^3.2.1",
"wx-pay": "^1.0.2",
"xml2js": "^0.4.23"
},
"devDependencies": {
"element-theme": "^2.0.1",
"element-theme-chalk": "^2.4.0"
}
}
1.获取请求token
1.获取请求token
[/api/opreceive/accessAuth/getAppTokenByAppKey]
请求方式:POST
参数格式 JSON
HTTP请求方式 POST
{
"actionType":"getAppTokenByAppKey",//固定写法就行
"actionBody":{
"appkey": "2019090811", //Y string appkey
"secret": "f99d413b767f09b5dff0b3610366cc46"//Y string 密钥
}
}
返回结果
{
"status": 0,
"msg": "success",
"data": {
"token": "40d64e586551405c9bcafab87266bc04" //token用于其他接口请求时,放在请求头中
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
2.渠道通过账户进行登录,有则返回用户信息,没有则创建用户---->供前端调用
地址:[/web/auth/accessAuth/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
{
"actionType": "getNeedUserPinByChannelUserId",
"actionBody": {
"needNo":"N2020021413152wiWI2e",// Y 需求号
"channelUserId":"15010929366",// Y 渠道用户ID
"channelUserName":"",// N 渠道用户名
"mobile":"15010929366", // N 渠道用户手机号
"nickName":"", // N 用户昵称
"orgName":"" // N 公司名称
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": {
"userpin":"c54abe7249a2a1195d236b333f79",
"channelTypeCode":"",//阿里公司注册编码:普通公司注册:esp.companyreg、云上公司注册:esp.companyreg_cloud
"typeCode":"gszc"//gszc公司注册,ysgszc云上公司注册
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
3.渠道通过账户进行登录,有则返回用户信息,没有则创建用户------>供后端调用
地址:[/api/opreceive/accessAuth/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
{
"actionType": "getLoginByUserName",
"actionBody": {
"channelUserId":"15010929366",// Y 渠道用户唯一标识ID
"channelUserName":"",// N 渠道登录用户名
"mobile":"15010929366", // N 渠道用户手机号
"nickName":"", // N 用户昵称
"orgName":"" // N 公司名称
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": {
"userpin":"c54abe7249a2a1195d236b333f79"//用户登录后的userpin
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
1.修改订单联系人,对已支付订单进行数据修改推送给交付系统的信息
1.修改订单联系人,对已支付订单进行数据修改推送给交付系统的信息
方式:POST
地址:
参数:
{
"orderNo": "TM34202003052259EJGx",
"notes": "订单备注put",
"orderContact": {
"contacts": "宋毅",
"mobile": "15010929369",
"email": "songyi@gongsibao.com",
"fax": ""
},
"appInfo": {
"uapp_id": "26",
"uapp_key": "202001170336",
"app_code": "gsb",
"app_name": "政策应用"
},
"userInfo": {
"channel_userid": "15010929366",
"channel_username": "15010929366",
"channel_nickname": ""
}
}
2.添加商标后,支付成功回调通知交付系统的信息
方式:POST
地址:
参数:
{
"order_info": {
"id": 135,
"uapp_id": 26,
"orderNo": "TM34202003052259EJGx",
"channelServiceNo": "TM34202003052259EJGx",
"channelOrderNo": "TM34202003052259EJGx",
"channelUserId": "15010929366",
"ownerUserId": "15010929366",
"payTime": null,
"quantity": 1,
"serviceQuantity": 0,
"orderStatusName": "待付款",
"orderStatus": 1,
"totalSum": "300.00",
"payTotalSum": "300.00",
"refundSum": "0.00",
"invoiceApplyStatus": "00",
"created_at": "2020-03-07T04:07:05.000Z"
},
"delivery_content": {
"tm": {
"picUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",
"tmName": "testbiao",
"tmFormType": "3",
"colorizedPicUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg"
},
"apply": {
"code": "91310110398635929J",
"name": "上海辰者信息科技有限公司",
"smwjUrl": "111",
"zipCode": "100000",
"gzwtsUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_wts863215710393842862019914.jpg",
"applyAddr": "上海市杨浦区国定路346号三楼0624室",
"applyArea": "",
"customerType": "ent",
"identityCardNo": "",
"identityCardPdf": "",
"identityCardPic": "",
"businessLicensePdf": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.pdf",
"businessLicensePic": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.jpg"
},
"notes": "订单备注信息",
"nclones": [
{
"code": "02",
"name": "颜料油漆",
"tbCode": "TB26202003071207dL8j",
"nclCount": 2,
"nclThree": [
{
"code": "020008",
"name": "绘画用铝粉",
"pcode": "0202",
"disabled": "false",
"fullname": "020008 绘画用铝粉"
},
{
"code": "020005",
"name": "食品用着色剂",
"pcode": "0203",
"disabled": "false",
"fullname": "020005 食品用着色剂"
}
],
"tmStatus": "dsh",
"submitTime": "",
"tmRegistNum": "",
"deliveryType": "10",
"tmStatusName": "待审核",
"nclPublicExpense": 300
}
],
"opNotes": "",
"orderContact": {
"id": 495,
"contactName": "宋毅",
"mobile": "15010929368",
"tel": null,
"email": "songyi@gongsibao.com",
"fax": null
},
"deliveryStatus": "dsh",
"deliveryStatusList": [
{
"deliveryStatus": "dsccl",
"deliveryUpdated": "2020-03-07T04:07:05.806Z",
"deliveryStatusName": "待上传材料"
},
{
"deliveryStatus": "dsh",
"deliveryUpdated": "2020-03-07T04:13:22.542Z",
"deliveryStatusName": "待审核"
}
],
"deliveryStatusName": "待审核"
},
"product_info": {
"id": 1,
"uapp_id": 26,
"is_enabled": 1,
"path_code": "/sbfu/sbzc/",
"path_name": "/商标服务/商标注册/",
"item_code": "zzsbzc",
"item_name": "商标注册【自助申请】",
"channel_item_code": "zzsbzc",
"channel_item_name": "商标注册【自助申请】",
"service_business_code": null,
"service_business_name": null,
"pic_url": "http://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_qft_pi15755163570461.png",
"product_short_desc": "适合熟知商标注册流程的企业用户",
"product_desc": "[\"自己检索商标,准备官方所需注册材料\",\"提交迅速,及时反馈\",\"全流程跟踪,掌握申请进度\"]",
"desc_url": null,
"icon_url": null,
"pay_after_jump_h5url": null,
"pay_after_jump_pcurl": null,
"productType_id": 2,
"price_item": {
"id": 4,
"pay_code": "zzsbzc-2",
"price": 30,
"supply_price": 30,
"service_charge": 0,
"public_expense": 30,
"is_default": 0,
"price_type": "mx",
"price_type_name": "项",
"sort": 2,
"price_desc": "1项",
"min_qty": null,
"max_qty": null,
"service_code": null
}
},
"appInfo": {
"uapp_id": "34",
"uapp_key": "202002291726",
"app_code": "gsbtmh5",
"app_name": "公司宝H5商标"
},
"userInfo": {
"channel_userid": "15010929366",
"channel_username": "15010929366",
"channel_nickname": "15010929366"
}
}
3.修改商标,对已支付订单进行数据修改推送给交付系统的信息
方式:POST
地址:
参数:
(1)修改申请人信息
{
"orderNo": "TM34202003052259EJGx",
"apply": {
"applyAddr": "上海市杨浦区国定路346号三楼0624室",
"applyArea": "",
"businessLicensePic": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.jpg",
"businessLicensePdf": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_yyzz120315554031547442019316.pdf",
"code": "91310110398635929J",
"customerType": "ent",
"identityCardNo": "",
"identityCardPic": "",
"identityCardPdf": "",
"name": "上海辰者信息科技有限公司11",
"zipCode": "100008"
},
"deliveryStatus": "dsh",
"deliveryStatusName": "待审核",
"appInfo": {
"uapp_id": "26",
"uapp_key": "202001170336",
"app_code": "gsb",
"app_name": "政策应用"
},
"userInfo": {
"channel_userid": "15010929366",
"channel_username": "15010929366",
"channel_nickname": ""
}
}
(2)修改商标信息
{
"orderNo": "TM34202003052259EJGx",
"tm": {
"colorizedPicUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",
"tmName": "testbiao-tibao",
"picUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_word2picb2bc98b9fc564ef2a1f4b3cbe9352f39.jpg",
"tmFormType": "3"
},
"appInfo": {
"uapp_id": "26",
"uapp_key": "202001170336",
"app_code": "gsb",
"app_name": "政策应用"
},
"userInfo": {
"channel_userid": "15010929366",
"channel_username": "15010929366",
"channel_nickname": ""
}
}
(3)修改交官材料
{
"orderNo": "TM34202003052259EJGx",
"apply": {
"gzwtsUrl": "https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_wts863215710393842862019914.jpg",
},
"appInfo": {
"uapp_id": "26",
"uapp_key": "202001170336",
"app_code": "gsb",
"app_name": "政策应用"
},
"userInfo": {
"channel_userid": "15010929366",
"channel_username": "15010929366",
"channel_nickname": ""
}
}
(4)修改尼斯信息
{
"orderNo": "TM34202003052259EJGx",
"nclones": [
{
"code": "02",
"name": "颜料油漆",
"nclThree": [
{
"code": "020008",
"disabled": "false",
"fullname": "020008 绘画用铝粉--88",
"name": "绘画用铝粉",
"pcode": "0202"
},
{
"code": "020005",
"disabled": "false",
"fullname": "020005 食品用着色剂",
"name": "食品用着色剂",
"pcode": "0203"
}
],
"nclCount": 2,
"nclPublicExpense": 300,
"tmStatus": "dsh",
"tmStatusName": "待审核",
"submitTime": "",
"deliveryType": "10",
"tbCode": "TB26202003071309yHWQ",
"tmRegistNum": ""
}
],
"appInfo": {
"uapp_id": "26",
"uapp_key": "202001170336",
"app_code": "gsb",
"app_name": "政策应用"
},
"userInfo": {
"channel_userid": "15010929366",
"channel_username": "15010929366",
"channel_nickname": ""
}
}
\ No newline at end of file
1.获取请求token
1.获取请求token
[/api/opreceive/accessAuth/getAppTokenByAppKey]
请求方式:POST
参数格式 JSON
HTTP请求方式 POST
{
"actionType":"getAppTokenByAppKey",//固定写法就行
"actionBody":{
"appkey": "2019090811", //Y string appkey
"secret": "f99d413b767f09b5dff0b3610366cc46"//Y string 密钥
}
}
返回结果
{
"status": 0,
"msg": "success",
"data": {
"token": "40d64e586551405c9bcafab87266bc04" //token用于其他接口请求时,放在请求头中
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
2.查看需求方案列表信息
地址:[/#/needProxy?needNo=XXX&userId=jfklajflsjfs&nickName=松XXX&mobile=15010929368&orgName=汉唐集团&token=XXXXX]
请求方式:GET
参数说明:
参数说明:
needNo//需求号
userId//用户唯一码
nickName//用户名称
mobile//用户手机号
orgName//公司名称
token//token值
3.推送公司表单材料
地址:[/api/opreceive/ic/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
{
"actionType": "deliveryInfo", // 办理公司表单数据
"actionBody": {
"serviceNo":"xxxxxxxxx",// Y 你那边订单号
.
.//为你那边的数据
.
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": null,
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
4.推送公司状态
地址:[/api/opreceive/ic/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
{
"actionType": "deliveryStatus", // 办理公司状态
"actionBody": {
"serviceNo":"xxxxxxxxx",// Y 你那边订单号
.
.//为你那边的数据
.
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": null,
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
5.关闭需求接口
地址:[/api/opreceive/need/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
{
"actionType": "needClose", // 关闭需求
"actionBody": {
"needNo":"xxxxxxxxx"//需求号
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": null,
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
6.商标报告
地址:[/api/action/tmQuery/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
{
"actionType":"tmreport",
"actionBody":
{
"companyname":"", //公司名称
"phonenum":"",  //电话 非必添
"email":"",   //邮箱
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": null,
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
\ No newline at end of file
已经使用的编码汇总:
已经使用的编码汇总:
100010
100020
100030 订单数量为空或有误,100030
100040
100050
100060
100070
100080
100090
100100
100110
100120
-100130 订单已支付,请勿重复付款,100130
-100140 订单已支付,请勿重复付款,100140
100150
100160
-100170 超时未支付,请刷新页面,100170 或100270
-100180 请及时支付,100180 或100280
100190
100200
100210
100220
100230
100240
100250
100260
100270
100280
100290
100300
100310
100320
100330
100340
100350
100360
100370
100380
100390
100400
100410
100420
100430
100440
100450
100460
100470
100480
100490
100500
100510
100520
100530
100540
100550
100560
\ No newline at end of file
示例:----------------------------------开始--------------------------------------------------------------------
示例:----------------------------------开始--------------------------------------------------------------------
ALTER TABLE p_channel ADD COLUMN totalChannelProfit DECIMAL(12,2) DEFAULT 0 COMMENT '渠道总利润';
ALTER TABLE h_page_statistics ADD COLUMN isRead int default 0 COMMENT '是否阅读,0未,1是';
ALTER TABLE b_customer_roll_pic ADD COLUMN picCategory ENUM('ip','ic','pa','icbc','common') DEFAULT 'ip';
ALTER TABLE p_customer_info DROP COLUMN customerContact;
ALTER TABLE biz_receiptvoucher modify COLUMN receiptType ENUM('sk','tk','zz','csrz','ptdsk','ptzz') DEFAULT 'sk';
示例:----------------------------------结束--------------------------------------------------------------------
ALTER TABLE c_app_product ADD COLUMN pushServiceItemCode VARCHAR(100) DEFAULT NULL COMMENT '推送到服务商的产品编码';
ALTER TABLE b_order ADD COLUMN needNoOrderNo VARCHAR(64) DEFAULT NULL COMMENT '需求订单号';
ALTER TABLE b_order_tm_product ADD COLUMN needNoOrderNo VARCHAR(64) DEFAULT NULL COMMENT '需求订单号';
ALTER TABLE b_order_tm_product modify COLUMN deliveryStatus ENUM('dqrfa','fabtg','dfwsfw','dsccl','dsh','ddj','ydj','ywc') DEFAULT 'dfwsfw';
\ No newline at end of file
1.获取请求token
1.获取请求token
[/api/opreceive/accessAuth/getAppTokenByAppKey]
请求方式:POST
参数格式 JSON
HTTP请求方式 POST
{
"actionType":"getAppTokenByAppKey",//固定写法就行
"actionBody":{
"appkey": "2019090811", //Y string appkey
"secret": "f99d413b767f09b5dff0b3610366cc46"//Y string 密钥
}
}
返回结果
{
"status": 0,
"msg": "success",
"data": {
"token": "40d64e586551405c9bcafab87266bc04" //token用于其他接口请求时,放在请求头中
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
2.阿里通过授权码获取用户userpin---->供前端调用
地址:[/web/auth/channelAccessAuth/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
{
"actionType": "getUserPinByAliCode",
"actionBody": {
"code":"N2020021413152wiWI2e"// Y 授权码
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": {
"userpin":"c54abe7249a2a1195d236b333f79"
},
"requestId": "2016c54abe7249a2a1195d236b333f79"
}
3.获取钉钉用于支付宝支付的信息---->供前端调用
地址:[/web/payment/channelPayment/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
请求头中需要有userpin
{
"actionType": "getAliPayInfo",
"actionBody": {
"orderNo":"N2020021413152wiWI2e"// Y 订单号
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": {
"service": "mobile.securitypay.pay",
"partner": "2088001575712426",
"_input_charset": "utf-8",
"notify_url": "http://alitm.qifu.gongsibao.com/tlpay/aliPayNotify",
"out_trade_no": "sytest001",
"subject": "测试01",
"payment_type": "1",
"seller_id": "2022815690@qq.com",
"total_fee": 0.01,
"sign_type": "RSA",
"sign": "CVvZuC0w2ZjcClTUfXtSNj8FtFs5spThQxv+oQ5tvjqFA5qoK7vihf2TkKuDX/6DvdZn1N47VIp1jsr33wMO77fS8E8ouaDJghnnUeyIST6QawYfYc3j0qIuWfXakkrcvzMhQAujbuogd/D7ntLJd1RyC3g03SaOYCPIfFfqc6U="
},
"requestId": "8691ec2bf95d4eef94cff70959c4f062"
}
4.获取钉钉鉴权信息---->供前端调用
地址:[/web/auth/channelAccessAuth/springBoard]
请求方式:POST
请求头中需要有token(token值从接口1中获取)
{
"actionType": "getDingJsApiAuthInfo",
"actionBody": {
"nowPageUrl":"http://alitm.qifu.gongsibao.com"// Y 当前网页的URL,不包含#及其后面部分
}
}
返回结果
{
"status": 0,//0成功,否则失败
"msg": "success",
"data": {
"agentId": "639185135",
"corpId": "ding1d097f874960e207",
"timeStamp": "1585319973691",
"nonceStr": "SY202003272239rOpDt2",
"signature": "f413e164fd1fe1cf057bf9ff0bbc23747ee7b732"
},
"requestId": "17e6cf486d1e40c49e3e7def2eb16e28"
}
\ 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