import { ksort } from "../util/ksort.js"; import { md5 } from "../util/md5.js"; import { sm3 } from "../util/SM3.js"; import { sha1 } from "../util/sha1.js"; import { sm4Key } from "../network/api.js"; import SM4Util from '../util/sm4.js' import { getItem, StorageKeys } from "@/utils/storage"; const s4 = new SM4Util() const _signCode = "etc123456"; //签名码 function pad2(n) { return n < 10 ? "0" + n : n; } //获取时间ymdHis function getDate() { var date = new Date(); return ( date.getFullYear().toString() + pad2(date.getMonth() + 1) + pad2(date.getDate()) + pad2(date.getHours()) + pad2(date.getMinutes()) + pad2(date.getSeconds()) + pad2(date.getMilliseconds()) ); } /** * 获取随机数 */ function generateMixed(n) { var chars = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; var res = ""; for (var i = 0; i < n; i++) { var id = Math.ceil(Math.random() * 8); res += chars[id]; } return res; } //签名 function sign(data, signCode) { data = ksort(data); var signStr = ""; var requestId = false; for (let k in data) { if (k != "sign") { if (k == "requestId") { requestId = data[k]; } signStr += k + "=" + data[k] + "&"; } } signStr += "signCode=" + signCode; if (!requestId) { return false; } signStr = md5(signStr); signStr = signStr.toUpperCase(); signStr += requestId; signStr = sha1(signStr); signStr = signStr.toUpperCase(); return signStr; } //arrayToJsonString array 转json字符串 export function arrayToJsonString(array) { var json = {}; for (var i in array) { if (array[i] instanceof Array) { json[i] = {}; for (var o in array[i]) { if (array[i][o] instanceof Array) { json[i][o] = {}; for (var q in array[i][o]) { if (array[i][o][q] instanceof Array) { json[i][o][q] = {}; for (var w in array[i][o][q]) { json[i][o][q][w] = array[i][o][q][w]; } } else { json[i][o][q] = array[i][o][q]; } } } else { json[i][o] = array[i][o]; } } } else { json[i] = array[i]; } } return JSON.stringify(json); } /** *json字符串转换成json对象 */ export function stringToJson(data) { return JSON.parse(data); } //array转json对象 export function arrayToJson(array) { return stringToJson(arrayToJsonString(array)); } // 判断是否是微信小程序 export function isWeixin() { if (getItem("loginSource") == '69af303ba2eb4608a099163f0d2a5dbd') { return true; } else { return false; } } //时间格式化 export function formatTime(date) { const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); const hour = date.getHours(); const minute = date.getMinutes(); const second = date.getSeconds(); return `${[year, month, day].map(formatNumber).join("-")}T${[ hour, minute, second, ] .map(formatNumber) .join(":")}`; } function formatNumber(n) { n = n.toString(); return n[1] ? n : `0${n}`; } function textToBase64(text, key, iv) { const keyBytes = new TextEncoder().encode(key); const ivBytes = new TextEncoder().encode(iv); const textBytes = new TextEncoder().encode(text); const encrypted = sm4.encrypt(textBytes, keyBytes, { mode: 'cbc', iv: ivBytes }); console.log('输出内容', encrypted) const base64 = uni.arrayBufferToBase64(encrypted); return base64; } //调用中台参数 export function encryption(ifCode, subdata, type) { var requestData = new Array(); const key = 'TlRJd016QXhNekZmTWpBeU16QTRNekU9' requestData["ifCode"] = ifCode; requestData["appId"] = "52030131"; // || "admin001" requestData["signType"] = "SM3"; // || "NONE" requestData["encryptType"] = "SM4"; requestData["reqId"] = requestData["appId"] + "_" + getDate() + "_" + generateMixed(5); requestData["timestamp"] = formatTime(new Date()); requestData["bizContent"] = s4.encryptData_CBC(subdata, sm4Key) requestData["accessToken"] = getItem(StorageKeys.Token) requestData["sign"] = sm3( "appId=" + requestData["appId"] + "&bizContent=" + requestData["bizContent"] + "&signType=" + requestData["signType"] + "&encryptType=" + requestData["encryptType"] + "×tamp=" + requestData["timestamp"] + "&ifCode=" + requestData["ifCode"] + "&reqId=" + requestData["reqId"] + "&accessToken=" + requestData["accessToken"], key ); let endData = arrayToJson(requestData); return endData; }