ajax/index.js
1import axiosApi from '../js/fetch'; 2import { baseUrl, headerParams } from '../js/baseUrl'; 3// import引用AES源码js 4import CryptoJS from 'crypto-js/crypto-js'; 5console.log(process.env); 6// 密钥 4492d531a3a04939 7// 生成验签的密钥不做任何处理 8let signKey = '4492d531a3a04939'; 9// 参与加解密的验签 10var keyCode = '4492d531a3a04939'; 11switch (process.env.NODE_ENV) { 12case 'development': keyCode = '4492d531a3a04939'; break; 13case 'test': keyCode = '4492d531a3a04939'; break; 14case 'production': keyCode = '/static/dev/'; break; 15default: keyCode = '4492d531a3a04939'; break; 16} 17 18// 随机数 19function getRandom (length) { 20 let randomStr = ''; 21 if (!length) { 22 var length = 5; 23 } 24 for (var i = 0; i <= length; i++) { 25 randomStr += Math.floor(Math.random() * 10); 26 } 27 return randomStr; 28} 29 30// 得到验签 31function getRequestObj () { 32 var newRequestObj = {}; // 参数对象 33 let initArray = []; // 延签数组 34 let nonce = getRandom(); // 随机数 35 let timestamp = new Date().getTime(); 36 initArray.push(nonce, timestamp, signKey); 37 let initStr = initArray.sort().join(''); // 延签 38 console.log(initStr); 39 // eslint-disable-next-line new-cap 40 initStr = CryptoJS.SHA1(initStr).toString().toUpperCase(); 41 // console.log('加密后的验签', initStr); 42 let queryStr = ''; 43 // 拼接参数 44 newRequestObj.timestamp = timestamp; 45 newRequestObj.nonce = nonce; 46 newRequestObj.signature = initStr; 47 for (var key in newRequestObj) { 48 queryStr += key + '=' + newRequestObj[key] + '&'; 49 } 50 queryStr = queryStr.substring(0, queryStr.length - 1); 51 return queryStr; 52} 53// 处理key 54function getKey (lightKey) { 55 // eslint-disable-next-line new-cap 56 var realKey = CryptoJS.SHA1(lightKey); 57 // eslint-disable-next-line new-cap 58 realKey = CryptoJS.SHA1(realKey).toString().substring(0, 32); // 真正的key 59 // console.log('realKey', realKey); 60 return realKey; 61} 62// 加密 63export function encrypt (data, lightKey) { 64 lightKey = lightKey || keyCode; // 这一步异常关键!!!!!! 65 var realKey = getKey(lightKey); 66 var encrypt = CryptoJS.AES.encrypt(data, CryptoJS.enc.Hex.parse(realKey), { 67 mode: CryptoJS.mode.ECB, 68 padding: CryptoJS.pad.Pkcs7 69 }); 70 return encrypt.ciphertext.toString(CryptoJS.enc.Base64); 71} 72// 解密 73export function decrypt (data, lightKey) { 74 lightKey = lightKey || keyCode; // 这一步异常关键!!!!!! 75 var realKey = getKey(lightKey); 76 var decrypt = CryptoJS.AES.decrypt({ 77 ciphertext: CryptoJS.enc.Base64.parse(data) 78 }, CryptoJS.enc.Hex.parse(realKey), { 79 mode: CryptoJS.mode.ECB, 80 padding: CryptoJS.pad.Pkcs7 81 }); 82 return decrypt.toString(CryptoJS.enc.Utf8); 83} 84 // 解析响应 85function ajax (opts) { 86 return new Promise((resolve, reject) => { 87 axiosApi 88 .request(opts) 89 .then(data => { 90 // 对入参解密 91 data = JSON.parse(decrypt(data)); 92 const { code } = data; 93 if (Number(code) === 0) return resolve(data); 94 reject(data); 95 }) 96 .catch(err => { 97 reject(err); 98 }); 99 }); 100} 101 102// 加解密封装ajax; 103export function doAjax (name, params, method) { 104 var test = getRequestObj(); 105 console.log(test, '===>'); 106 const opts = { 107 url: baseUrl + name + '?' + test, 108 method: method, // 请求方式 109 data: encrypt(JSON.stringify(headerParams(name, params))), 110 headers: { 'Content-Type': 'application/json' } 111 }; 112 var data = encrypt(JSON.stringify(headerParams(name, params))); 113 console.log(data, '====>加密'); 114 console.log(JSON.parse(decrypt(data)), '===>解密'); 115 return ajax(opts); 116} 117 118export default { 119 encrypt, 120 decrypt 121}; 122
headerParams封装在baseUrl.js文件中
1export const baseUrl = 'http://10.29.32.19:8088/bmp/payment/'; 2 3export const headerParams = (name, data) => { 4 if (!data) { 5 data = {}; 6 }; 7 let headerParams = { 8 charset: 'utf-8', 9 method: 'com.taiping.cashier.' + name, 10 signature: '', 11 timestamp: new Date().getTime(), 12 transId: '', 13 version: '2.0', 14 requestData: data 15 }; 16 return headerParams; 17};
