/** * 自定义公共函数包 * 这里可以写你自己的公共函数 */ 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(params, timestamp) { const copyParams = { ...params } //1. A.将参与摘要计算的业务参数按字典升序排列 var sortedParams = Object.keys(params).sort().reduce((acc, curr, index) => { acc += params[curr]; return acc; }, ''); // 1.B.将 app_secret 附加到字符串串前 const str1 = app_secret + sortedParams // 步骤 2.对得到的字符串进⾏SHA1 加密 const sha1_1 = CryptoJS.SHA1(str1).toString().toUpperCase() console.log('sha1_1: ', sha1_1); // 步骤 3.计算 timestamp的MD5值,并和app_id,步骤 2 中得到的字符串拼接得到新的字符串 const timestampMd5 = CryptoJS.MD5(timestamp).toString().toUpperCase() const str2 = app_id + timestampMd5 + sha1_1 // 步骤 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(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 } }); return res; } module.exports = pubFun;