/** * 自定义公共函数包 * 这里可以写你自己的公共函数 */ 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;