207 lines
6.4 KiB
JavaScript
207 lines
6.4 KiB
JavaScript
/**
|
|
* 自定义公共函数包
|
|
* 这里可以写你自己的公共函数
|
|
*/
|
|
var CryptoJS = require("crypto-js");
|
|
const crypto = require('crypto');
|
|
var pubFun = {};
|
|
/**
|
|
* 公共函数写法示例
|
|
* 调用示例:
|
|
* pubFun.test();
|
|
* 或
|
|
* vk.myfn.test();
|
|
*/
|
|
pubFun.test = function (path) {
|
|
// 此处可以直接使用 vk 实例
|
|
let timeStr = vk.pubfn.timeFormat(new Date(), "yyyy-MM-dd hh:mm:ss");
|
|
// 逻辑
|
|
// ...
|
|
// 逻辑
|
|
return {
|
|
timeStr,
|
|
msg: "这是公共函数test的返回"
|
|
}
|
|
}
|
|
|
|
// const url = 'http://test.api.fabigbig.com:8888/api'
|
|
// const app_id = 405942
|
|
// const app_secret = 'ODDW0vm9FvDj2RYQRmoryVnH'
|
|
|
|
const url = 'https://textapi.fadada.com/api2/'
|
|
const app_id = 502704
|
|
const app_secret = 'cd1nHX8WnyE1DOiRXfKGNlwu'
|
|
|
|
const getFadadaSign = function (api, params, timestamp) {
|
|
if (api === 'https://tczapi.fadada.com/czapi/api/compliance-contract-report' || api === 'https://czapi-test.fadada.com/evidence-api/api/compliance-contract-report') {
|
|
console.log('app_id', app_id)
|
|
console.log('timestamp', timestamp)
|
|
console.log('app_secret', app_secret)
|
|
console.log('contractNum', params.contractNum)
|
|
// let bParams = `${app_secret}${params.contractNum}${app_id}${params.evidenceType}`
|
|
let bParams = `${app_secret}${params.contractNum}`
|
|
const b = CryptoJS.SHA1(bParams).toString().toUpperCase()
|
|
const a = CryptoJS.SHA1(`${app_id}${CryptoJS.MD5(timestamp).toString().toUpperCase()}${b}`).toString().toUpperCase()
|
|
// if (params.reportExpressInfo) {
|
|
// bParams += `${params.reportExpressInfo.address}${params.reportExpressInfo.mobile}${params.reportExpressInfo.name}`
|
|
// }
|
|
// if (params['reportExpressInfo.name']) {
|
|
// bParams += `${params['reportExpressInfo.address']}${params['reportExpressInfo.mobile']}${params['reportExpressInfo.name']}`
|
|
// }
|
|
console.log('timestamp cryp', CryptoJS.MD5(timestamp).toString().toUpperCase())
|
|
console.log('a data', `${app_id}${CryptoJS.MD5(timestamp).toString().toUpperCase()}${b}`)
|
|
console.log('aParams', a)
|
|
console.log('bParams', bParams)
|
|
console.log('b', b)
|
|
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(a));
|
|
}
|
|
const copyParams = {
|
|
...params
|
|
}
|
|
//1. A.将参与摘要计算的业务参数按字典升序排列
|
|
let computeKeys = Object.keys(params)
|
|
|
|
var sortedParams = computeKeys.sort().reduce((acc, curr, index) => {
|
|
acc += params[curr];
|
|
return acc;
|
|
}, '');
|
|
|
|
// 1.B.将 app_secret 附加到字符串串前
|
|
let str1 = app_secret + sortedParams
|
|
console.log('sortedParams: ', sortedParams);
|
|
if (api === 'generate_contract.api') {
|
|
str1 = app_secret + params.template_id + params.contract_id
|
|
} else if (api === 'uploaddocs.api') {
|
|
str1 = app_secret + params.contract_id
|
|
} else if (api === 'extsign.api') {
|
|
str1 = app_secret + params.customer_id
|
|
} else if (api === 'uploadtemplate.api') {
|
|
str1 = app_secret + params.template_id
|
|
}
|
|
|
|
|
|
// 步骤 2.对得到的字符串进⾏SHA1 加密
|
|
const sha1_1 = CryptoJS.SHA1(str1).toString().toUpperCase()
|
|
console.log('sha1_1: ', sha1_1);
|
|
// 步骤 3.计算 timestamp的MD5值,并和app_id,步骤 2 中得到的字符串拼接得到新的字符串
|
|
let timestampMd5 = ''
|
|
if (api === 'extsign.api') {
|
|
timestampMd5 = CryptoJS.MD5(params.transaction_id + timestamp).toString().toUpperCase()
|
|
} else {
|
|
timestampMd5 = CryptoJS.MD5(timestamp).toString().toUpperCase()
|
|
}
|
|
|
|
let str2 = app_id + timestampMd5 + sha1_1
|
|
if (api == 'generate_contract.api') {
|
|
str2 += params.parameter_map
|
|
} else if (api == 'extsign.api') {
|
|
|
|
}
|
|
|
|
// 步骤 4.对步骤3中得到的字符串进行SHA1 加密
|
|
const str3 = CryptoJS.SHA1(str2).toString().toUpperCase()
|
|
// 步骤 5.对步骤 4 中得到的字符串进⾏base64 加密
|
|
var wordArray = CryptoJS.enc.Utf8.parse(str3);
|
|
const msg_digest = CryptoJS.enc.Base64.stringify(wordArray);
|
|
|
|
return msg_digest;
|
|
|
|
}
|
|
pubFun.getFadadaSign = getFadadaSign
|
|
|
|
/**
|
|
* 给法大大发请求
|
|
|
|
* @param {Object} api
|
|
* @param {Object} params
|
|
* @param {Object} fullUrl
|
|
* @param header
|
|
*/
|
|
pubFun.fadada = async function (api, params, fullUrl = false, header = {
|
|
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
|
|
}) {
|
|
const timestamp = vk.pubfn.timeFormat(new Date(), "yyyyMMddhhmmss");
|
|
// const timestamp = '20251021181001';
|
|
const msg_digest = getFadadaSign(api, params, timestamp)
|
|
console.log('msg_digest: ', msg_digest, timestamp);
|
|
const res = await vk.request({
|
|
url: !fullUrl ? (url + '/' + api) : api,
|
|
method: "POST",
|
|
header,
|
|
data: {
|
|
app_id: app_id,
|
|
appId: app_id,
|
|
timestamp,
|
|
v: '2.0',
|
|
msg_digest,
|
|
msgDigest: msg_digest,
|
|
...params
|
|
},
|
|
timeout: 60000
|
|
});
|
|
console.log('res: ', res);
|
|
return res;
|
|
}
|
|
|
|
function buildQueryString(params) {
|
|
let queryString = '';
|
|
for (const key in params) {
|
|
if (params.hasOwnProperty(key)) {
|
|
if (queryString.length > 0) {
|
|
queryString += '&';
|
|
}
|
|
queryString += `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`;
|
|
}
|
|
}
|
|
return queryString;
|
|
}
|
|
|
|
/**
|
|
* 给法大大发请求
|
|
|
|
* @param {Object} api
|
|
* @param {Object} params
|
|
*/
|
|
pubFun.fadadaUrl = function (api, params) {
|
|
|
|
|
|
const timestamp = vk.pubfn.timeFormat(new Date(), "yyyyMMddhhmmss");
|
|
const msg_digest = getFadadaSign(api, params, timestamp)
|
|
|
|
const queryParams = buildQueryString({
|
|
app_id: app_id,
|
|
timestamp,
|
|
v: '2.0',
|
|
msg_digest,
|
|
...params
|
|
});
|
|
const fullUrl = `${url}/${api}?${queryParams}`;
|
|
|
|
|
|
return fullUrl;
|
|
}
|
|
|
|
pubFun.base64ToFile = function (base64, fileName) {
|
|
|
|
}
|
|
|
|
pubFun.sendNotifySms = async function (userId, templateId, data = {}) {
|
|
const user = await vk.baseDao.findByWhereJson({
|
|
dbName: "uni-id-users",
|
|
whereJson: {
|
|
_id: userId
|
|
}
|
|
})
|
|
if (user) {
|
|
const smsRes = await vk.system.smsUtil.sendSms({
|
|
provider: "aliyun",
|
|
templateId,
|
|
phone: user.mobile,
|
|
data
|
|
})
|
|
console.log('smsSendPhone', user.mobile)
|
|
console.log('smsRes', smsRes)
|
|
}
|
|
}
|
|
|
|
module.exports = pubFun; |