优化代码

This commit is contained in:
java110 2020-11-06 01:08:33 +08:00
parent 266fa1056c
commit 171165e92c
4 changed files with 95 additions and 3 deletions

View File

@ -25,6 +25,9 @@ const DEFAULT_COMMUNITY_NAME = "丰仪家园";
// 微信公众号 appId小程序和app 可以不用修改
const wAppId="wx43458162e3c31d92"; //微信AppId
//app支付时这里需要填写支付秘钥
const appPayKey="";
const logLevel="DEBUG"; // 日志级别
export default{
@ -32,5 +35,6 @@ export default{
DEFAULT_COMMUNITY_ID:DEFAULT_COMMUNITY_ID,
DEFAULT_COMMUNITY_NAME:DEFAULT_COMMUNITY_NAME,
wAppId:wAppId,
logLevel:logLevel
logLevel:logLevel,
appPayKey:appPayKey
}

View File

@ -0,0 +1,73 @@
import conf from '../conf/config.js'
/*
* 生成订单信息
* @params orderInfo: any 后端返回的数据格式和上面一样
*/
export function getPayInfo (orderInfo) {
let time = new Date(),
let timestamp = time.getTime().toString().substr(0, 10), // 时间戳
let noncestr = randomSrt(true, 10, 20), // 随机数
let key = conf.appPayKey, // 加密Key微信支付填写的key
payInfo = {
appid: orderInfo.appid,
noncestr,
package: 'Sign=WXPay',
partnerid: orderInfo.partnerid,
prepayid: orderInfo.prepayid,
timestamp: Number(timestamp)
}
// 键值对按照ASCII码从小到大排序生成类似appid=xxx&body=xx&device_info=1000
let keyValueStr = mapObjToKeyValue(payInfo, true);
// 插入加密Key到最后
let strSignTemp = `${keyValueStr}&key=${key}`;
// 真正的二次加密
let sign = md5(strSignTemp).toUpperCase().substr(0, 32);
console.log(sign) // 可以去微信支付文档做校验
payInfo.sign = sign;
// 返回字符串给uniapp调起支付用
return payInfo;
}
/*
* 生成指定的随机字符串
* @params isRandomLength: boolean 是否在min ~ max生成随机长度
* @params min: number 最小长度
* @params max: number 最大长度
*/
export function randomSrt(isRandomLength, min, max) {
let str = "",
range = min;
const arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
];
// 随机产生
if (isRandomLength) {
range = Math.round(Math.random() * (max - min)) + min;
}
for (var i = 0; i < range; i++) {
let pos = Math.round(Math.random() * (arr.length - 1));
str += arr[pos];
}
return str;
},
/*
* 根据object生成key value字符串
* @params obj: any 要map的对象
* @params isSort: boolean 是否根据ASCII字典排序
*/
export function mapObjToKeyValue(obj, isSort = false) {
let keys = Object.keys(obj);
let str = "";
if (isSort) keys.sort();
keys.forEach(key => {
if (obj.hasOwnProperty(key)) {
str += `${key}=${obj[key]}&`;
}
});
return str.replace(/&$/, "");
}

View File

@ -67,6 +67,8 @@ class WexinPayFactory {
});
}
};
module.exports = new WexinPayFactory();

View File

@ -134,6 +134,10 @@
// #endif
// #ifdef
import {getPayInfo} from '../../factory/WexinAppPayFactory.js'
// #endif
import {addMonth,formatDate} from '../../utils/DateUtil.js'
export default {
data() {
@ -257,7 +261,11 @@
if (res.statusCode == 200 && res.data.code == '0') {
let data = res.data; //
let obj = {
let obj = {};
let orderInfo = {};
// #ifdef MP-WEIXIN
obj = {
appid: data.appId,
noncestr: data.nonceStr,
package: 'Sign=WXPay', //
@ -266,8 +274,13 @@
timestamp: data.timeStamp,
sign: data.sign //
}
// #endif
// #ifdef APP-PLUS
obj = getPayInfo(data);
// #endif
//
let orderInfo = JSON.stringify(obj)
orderInfo = JSON.stringify(obj)
uni.requestPayment({
provider: 'wxpay',
orderInfo: orderInfo, //