Browse Source

[修改] 页面分享参数改成使用token的形式

[新增] MD5函数方法文件,用于生成16位MD5,原先的MD5文件好像不支持
threedate
邓平艺 4 years ago
parent
commit
9216539f37
  1. 6
      common/api.js
  2. 187
      common/shareMD5.js
  3. 32
      common/shared.js
  4. 11
      pages/center/invite.vue
  5. 35
      pages/goodsDetail/index.vue
  6. 6
      pages/index/index.vue
  7. 76
      pages/route/index - 副本.vue
  8. 24
      pages/route/index.vue

6
common/api.js

@ -71,4 +71,8 @@ export const API_WXBILL = '/api/salesman/qrcode'//微信小程序太阳码
/* 商户相关 */
export const API_CONFIRM_CODE = '/api/confirm/code'; // 扫码核销
export const API_WIDTHDRAW = '/api/income/extract'; // 提现
export const API_WIDTHDRAW = '/api/income/extract'; // 提现
/* token相关 */
export const API_WAREHOUSE_SET = '/api/warehouse/set'; // 存储token
export const API_WAREHOUSE_GET = '/api/warehouse/get'; // 获取token

187
common/shareMD5.js

@ -0,0 +1,187 @@
// 源出处:https://blog.csdn.net/lijia_yong/article/details/111641251
export function md5(string,bit) {
function md5_RotateLeft(lValue, iShiftBits) {
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
}
function md5_AddUnsigned(lX, lY) {
var lX4, lY4, lX8, lY8, lResult;
lX8 = (lX & 0x80000000);
lY8 = (lY & 0x80000000);
lX4 = (lX & 0x40000000);
lY4 = (lY & 0x40000000);
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
if (lX4 & lY4) {
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
}
if (lX4 | lY4) {
if (lResult & 0x40000000) {
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
} else {
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
}
} else {
return (lResult ^ lX8 ^ lY8);
}
}
function md5_F(x, y, z) {
return (x & y) | ((~x) & z);
}
function md5_G(x, y, z) {
return (x & z) | (y & (~z));
}
function md5_H(x, y, z) {
return (x ^ y ^ z);
}
function md5_I(x, y, z) {
return (y ^ (x | (~z)));
}
function md5_FF(a, b, c, d, x, s, ac) {
a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_F(b, c, d), x), ac));
return md5_AddUnsigned(md5_RotateLeft(a, s), b);
};
function md5_GG(a, b, c, d, x, s, ac) {
a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_G(b, c, d), x), ac));
return md5_AddUnsigned(md5_RotateLeft(a, s), b);
};
function md5_HH(a, b, c, d, x, s, ac) {
a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_H(b, c, d), x), ac));
return md5_AddUnsigned(md5_RotateLeft(a, s), b);
};
function md5_II(a, b, c, d, x, s, ac) {
a = md5_AddUnsigned(a, md5_AddUnsigned(md5_AddUnsigned(md5_I(b, c, d), x), ac));
return md5_AddUnsigned(md5_RotateLeft(a, s), b);
};
function md5_ConvertToWordArray(string) {
var lWordCount;
var lMessageLength = string.length;
var lNumberOfWords_temp1 = lMessageLength + 8;
var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
var lWordArray = Array(lNumberOfWords - 1);
var lBytePosition = 0;
var lByteCount = 0;
while (lByteCount < lMessageLength) {
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
lBytePosition = (lByteCount % 4) * 8;
lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
lByteCount++;
}
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
lBytePosition = (lByteCount % 4) * 8;
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
return lWordArray;
};
function md5_WordToHex(lValue) {
var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount;
for (lCount = 0; lCount <= 3; lCount++) {
lByte = (lValue >>> (lCount * 8)) & 255;
WordToHexValue_temp = "0" + lByte.toString(16);
WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
}
return WordToHexValue;
};
function md5_Utf8Encode(string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
};
var x = Array();
var k, AA, BB, CC, DD, a, b, c, d;
var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
var S21 = 5, S22 = 9, S23 = 14, S24 = 20;
var S31 = 4, S32 = 11, S33 = 16, S34 = 23;
var S41 = 6, S42 = 10, S43 = 15, S44 = 21;
string = md5_Utf8Encode(string);
x = md5_ConvertToWordArray(string);
a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
for (k = 0; k < x.length; k += 16) {
AA = a; BB = b; CC = c; DD = d;
a = md5_FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
d = md5_FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
c = md5_FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
b = md5_FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
a = md5_FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
d = md5_FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
c = md5_FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
b = md5_FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
a = md5_FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
d = md5_FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
c = md5_FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
b = md5_FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
a = md5_FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
d = md5_FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
c = md5_FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
b = md5_FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
a = md5_GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
d = md5_GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
c = md5_GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
b = md5_GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
a = md5_GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
d = md5_GG(d, a, b, c, x[k + 10], S22, 0x2441453);
c = md5_GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
b = md5_GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
a = md5_GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
d = md5_GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
c = md5_GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
b = md5_GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
a = md5_GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
d = md5_GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
c = md5_GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
b = md5_GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
a = md5_HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
d = md5_HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
c = md5_HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
b = md5_HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
a = md5_HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
d = md5_HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
c = md5_HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
b = md5_HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
a = md5_HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
d = md5_HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
c = md5_HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
b = md5_HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
a = md5_HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
d = md5_HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
c = md5_HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
b = md5_HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
a = md5_II(a, b, c, d, x[k + 0], S41, 0xF4292244);
d = md5_II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
c = md5_II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
b = md5_II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
a = md5_II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
d = md5_II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
c = md5_II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
b = md5_II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
a = md5_II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
d = md5_II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
c = md5_II(c, d, a, b, x[k + 6], S43, 0xA3014314);
b = md5_II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
a = md5_II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
d = md5_II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
c = md5_II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
b = md5_II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
a = md5_AddUnsigned(a, AA);
b = md5_AddUnsigned(b, BB);
c = md5_AddUnsigned(c, CC);
d = md5_AddUnsigned(d, DD);
}
if(bit==32){
return (md5_WordToHex(a) + md5_WordToHex(b) + md5_WordToHex(c) + md5_WordToHex(d)).toLowerCase();
}
return (md5_WordToHex(b) + md5_WordToHex(c)).toLowerCase();
}

32
common/shared.js

@ -1,6 +1,7 @@
/*
全局共享实用方法 shared.js
*/
let shareMD5 = require("./shareMD5.js"); // 签名加密js文件
// 判断对错/是否显示,万能校验
export function isRight(obj) {
@ -24,4 +25,35 @@ export function isRight(obj) {
export function isValueType(value) {
let str = Object.prototype.toString.call(value);
return str.match(/\[object (.*?)\]/)[1].toLowerCase();
}
// 生成随机唯一token
export function createToken(par = {}){
const date = new Date(); // 获取时间对象
let fullYear = date.getFullYear(); // 年
let month = String(date.getMonth() + 1); // 月
month = fillZero(month);
let getdate = String(date.getDate()); // 日
getdate = fillZero(getdate);
let hours = String(date.getHours()); // 时
hours = fillZero(hours);
let minutes = String(date.getMinutes()); // 分
minutes = fillZero(minutes);
let seconds = String(date.getSeconds()); // 秒
seconds = fillZero(seconds);
let randomStr = Math.random().toString(32).substr(2); // 随机字符串
let tmp = `${fullYear}/${month}/${getdate} ${hours}:${minutes}:${seconds} ${randomStr}`;
for(let i in par){
tmp += par[i];
}
let token = shareMD5.md5(tmp, 16);
return token;
}
//不足2位补0
export function fillZero(time) {
if (time <= 9) {
time = '0' + time;
}
return time;
}

11
pages/center/invite.vue

@ -77,8 +77,17 @@
},
getWxCode() {
let userInfo = uni.getStorageSync('userinfo') || {};
const token = this.$shared.createToken();
let options = {
route: 'home',
pt: 2,
id: 2,
share_id: userInfo.id
}
this.generateKooken(token, options); // token
this.$http(this.API.API_WXBILL, {
scene: 'route=home&id=2&pt=2'+'&share_id='+userInfo.id,
scene: token,
page: 'pages/route/index',
width: '2800'
}).then(res => {

35
pages/goodsDetail/index.vue

@ -221,8 +221,17 @@
},
getWxCode() {
let userInfo = uni.getStorageSync('userinfo') || {};
const token = this.$shared.createToken();
let options = {
route: 'goods',
pt: 2,
id: this.goods_id,
share_id: userInfo.id
}
this.generateKooken(token, options); // token
this.$http(this.API.API_WXBILL, {
scene: 'route=goods&pt=2&id='+this.goods_id+'&share_id='+userInfo.id,
scene: token,
page: 'pages/route/index',
width: '2800'
}).then(res => {
@ -489,13 +498,35 @@
} else {
return null;
}
},
// token
generateKooken(token, options){
let values = JSON.stringify(options);
this.$http(this.API.API_WAREHOUSE_SET, {
key: token,
value: values
}).then(res => {
console.log("res", token, res);
});
}
},
onShareAppMessage() {
const token = this.$shared.createToken();
let goods = this.goods_detail;
let options = {
id: goods.id,
route: 'goods'
}
this.generateKooken(token, options); // token
// let goods = this.goods_detail;
// let title = goods.name;
// let imageUrl = goods.share_cover || goods.cover;
// let path = '/pages/route/index?route=goods_detail&id=' + goods.id;
let title = goods.name;
let imageUrl = goods.share_cover || goods.cover;
let path = '/pages/route/index?route=goods_detail&id=' + goods.id;
let path = '/pages/route/index?token='+ token;
return {
title,

6
pages/index/index.vue

@ -208,9 +208,13 @@
// this.getGoodsList();
},
onShareAppMessage(){
const token = this.$shared.createToken();
let options = {route: 'home'};
this.generateKooken(token, options); // token
let shareInfo = {
title: this.shareInfo.title || '欢迎使用时空网小程序',
path: '/pages/route/index?route=home'
path: '/pages/route/index?token='+ token
}
if(this.shareInfo.cover){

76
pages/route/index - 副本.vue

@ -0,0 +1,76 @@
<template>
<view></view>
</template>
<script>
/* 路由分发页面仅供跳转页面 */
export default {
onLoad(options){
console.log('wai',options)
if(this.$shared.isValueType(options.scene) != 'undefined'){
const scene = decodeURIComponent(options.scene); //
const par = this.strToObj(scene);
this.routeToPage(par);
console.log('内部',options)
console.log('====',par)
}else{
this.routeToPage(options); //
}
},
methods: {
//
routeToPage(options){
if(options.route == 'goods_detail' || options.route == 'goods'){
options.page_url = '/pages/goodsDetail/index';
this.joinPagePath(options);
}else if(options.route == 'home'){
options.page_url = '/pages/index/index';
options.is_tabbar = true; // tabbar
this.joinPagePath(options);
}else{
let obj = {
page_url: '/pages/index/index', //
is_tabbar: true
};
this.joinPagePath(obj);
}
},
//
joinPagePath(par){
let path = par.page_url;
let options = {}; // switch
let flag = true; //
for(let i in par){
if(i != 'route' && i != 'page_url' && i != 'is_tabbar'){ // routepage_urlis_tabbar
options[i] = par[i];
if(flag){
path += '?'+ i +'='+ par[i];
flag = false;
}else{
path += '&'+ i +'='+ par[i];
}
}
}
console.log(par);
if(par.is_tabbar){
uni.setStorageSync('homePageOptions', options);
this.$url(par.page_url, {type: 'switch'});
}else{
this.$url(path, {type: 'redirect'});
}
},
// key=value&key=value
strToObj(str){
let obj = {};
if(!str) return obj;
let arr = str.split('&');
arr.map(item => {
let a = item.split('=');
obj[a[0]] = a[1];
});
return obj;
}
}
}
</script>

24
pages/route/index.vue

@ -9,15 +9,29 @@
console.log('wai',options)
if(this.$shared.isValueType(options.scene) != 'undefined'){
const scene = decodeURIComponent(options.scene); //
const par = this.strToObj(scene);
this.routeToPage(par);
console.log('内部',options)
console.log('====',par)
// const par = this.strToObj(scene);
// this.routeToPage(par);
// console.log('',options)
// console.log('====',par)
this.getTokenValue(scene);
}else{
this.routeToPage(options); //
// this.routeToPage(options);
//
this.getTokenValue(options.token);
}
},
methods: {
getTokenValue(token){
this.$http(this.API.API_WAREHOUSE_GET, {key: token}).then(res => {
console.log("getTokenValue", res);
let options = JSON.parse(res.data);
this.routeToPage(options);
}).catch(err => {
// token
this.$url('/pages/index/index', {type: 'switch'});
})
},
//
routeToPage(options){
if(options.route == 'goods_detail' || options.route == 'goods'){

Loading…
Cancel
Save