/** * encryptionFun() 示例1 http://xxx.com?id=123 encryptionFun('id=123') 示例2 http://xxx.com {"id":123} encryptionFun('{"id":123}') 示例3 http://xxx.com?id=123&name=张三 {"id":123} encryptionFun('id=123&name=张三{"id":123}') */ import { generateUUID } from "@/utils/index" import { sha256 } from 'js-sha256' /** * * @param { str } raw 参数用&隔开 * @param { Object } body * @returns */ // 替换无效编码序列(解决 decodeURIComponent 报错 "URI malformed" 的问题) export const decodeURIComponentSafe = (str) => { try { return decodeURIComponent(str); } catch (e) { // 替换无效的百分号编码为空字符串 return decodeURIComponent(str.replace(/%(?![\da-f]{2})/gi, '')); } } export const encryptionFun = ({raw, body, appId, AppSecret, timestamp}) => { const initSign = { appId, nonce: generateUUID(), timestamp, } const _initSignArr = Object.keys(initSign).map(key => { return `${key}=${initSign[key]}` }) const _initSign = _initSignArr.join('&') const paramsStr = _initSign + AppSecret let str = '' if (raw) { str += decodeURIComponentSafe(raw) } if (body && Object.keys(body).length) { str += decodeURIComponentSafe(JSON.stringify(body)) } return { ...initSign, sign: sha256(str + paramsStr) } }