/** * 自定义公共函数包 * 这里可以写你自己的公共函数 */ 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 getFadadaSign = function(api, params, timestamp) { 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 } // 步骤 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 */ pubFun.fadada = async function(api, params) { const timestamp = vk.pubfn.timeFormat(new Date(), "yyyyMMddhhmmss"); const msg_digest = getFadadaSign(api, params, timestamp) const res = await vk.request({ url: url + '/' + api, method: "POST", header: { "content-type": "application/x-www-form-urlencoded;charset=UTF-8", }, data: { app_id: app_id, timestamp, v: '2.0', msg_digest, ...params } }); 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) { } module.exports = pubFun;