//获取应用实例
const app = getApp()
var CryptoJS = require('../libs/crypto-js/crypto-js.js');
var RSA = require('../utils/wx_rsa.js')
var U = require('../utils/Urls.js')
var Time = require('../utils/time.js')
/**
* 加密请求参数
*/
var encryptReq = function(info) {
try {
var auth = {
"app_key": "5d7c7d4d6971ba34e4e21be92c40378c",
"app_version": "wx1.0.1",
"mb_brand": app.globalData.wxBrand,
"mb_model": app.globalData.wxModel,
"mb_screen": app.globalData.wxScreenWidth + '*' + app.globalData.wxScreenHeight + '*' + app.globalData.wxPixelRatio,
"os": app.globalData.wxPlatform,
"os_version": app.globalData.wxSystem,
"time_stamp": Time.getYMD(2),
"uid": app.globalData.uid,
"username": app.globalData.username
};
var data = JSON.stringify({
'auth': auth,
'info': info
});
// console.log('data => ' + data);
// DES加密
var keyHex = CryptoJS.enc.Utf8.parse('abef25b77285d1e3c91142c1')
var encrypted = CryptoJS.TripleDES.encrypt(data, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var desResult = encrypted.toString();
// console.log('des => ' + desResult);
var a = '{ "merCustId": "M000000006","sign": "QMS7A0JjwAm2whbGr7AjkBqOHq+7MtzweAeHLEUldibSUDAv3dMVsvZUcrZCHaeXTvPSV8l6MBxBEYzHMhRzkPQrjnYTw7+pC92gSsTfgrIcW7HKEGMhRboMc55WwG2TleRPE9/WXiWVDnmuQ1e3FpORWP7EQeEocO/Ys26r9IU=","data": "' + desResult + '"}';
var pk = `
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCx4Z7EWbHq7GinjSpz+uISYcl7
mt3QdZkS4BgLVp5+wwA/141jmyIn0WQkxSFL37y84EOzYSepZfOreXAtaytROz8M
vZA3CS0pvp7CpCtqTJH432sx+4SNs7Hpeq0xBI5iURjuPkW4jOKtDjCZiN9lYL5O
RsOr8CVJZZIwZtobhQIDAQAB
-----END PUBLIC KEY-----
`;
// console.log(pk);
var encrypt_rsa = new RSA.RSAKey();
encrypt_rsa = RSA.KEYUTIL.getKey(pk);
var result = encrypt_rsa.encryptLong(a);
// console.log(result);
return result;
} catch (e) {
return null;
}
};
/**
* 解密返回数据
*/
var decodeResp = function(resp) {
try {
var pk = `
-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKLgi07aPSIKHuin
1hx/xK/DhUJhca8vuVsJIa16ZNlKwOgyJQs6h2vCVZg01JZH0CBEklGy/Gf+hGyo
bgyFmRtikA/7yqrXkDbTFOVYZo/6QA0b+jX2QVzewT/4MQ5vfojoZyBKU6nw5zdU
g2q/YfS39tcdqyUOz0msf3U1HiHfAgMBAAECgYBfuFzGa4Vv4sjFbBVtzDzYGqzP
FRtNnFtvP8+V9w8bkE4MZ6PTlIMPdjb9a1bgNrX+sK3Y67pgl3hVryp1m3Ida7wy
La/PIKyYbUJ1b5ioHwSBaBS+UNgtYS06iJ8VbFwfA4zGpF/gWUvjMOruVHOY7PNW
UoAeJydE2izdSXS3oQJBAPtSgmJrom/WKgKbwpSaMD46gqG8xHoVpuGNBuc+oXeL
RugHzMPWWDE1DW1ZJbvcGMR1PvTlOy/duJsDm+DdhpECQQCl6J1fZfQOZWjW98Po
lmkpZzm99n4+L7lbTFN0cDBQXKBeIgq3Og5SquVBrFoI8MNf3dszF7RKHq2erRku
srlvAkBxLUnsGn6PEIngnNY2Z208SMsVHNX6CJAbWI/4SRsbo4vt571Nn9QdbL+8
M34rqEU7C3WrgSNzPczpeemTjQ8RAkAR+AGjZW1rabxTG/6R4Eh/fXiZhGrj3VNb
+gZH5Ca3bXDJATLb6WPHvE6cMEiIE1t1tJebDwQtyujO+LxzfFPtAkADkurMatbJ
2mhE/LrR3TC1ntGOAY7ryLXrVuzc1ugKF+h32JCzqKwN3d7FxQwJWzLT0GM+V/AO
UJASSSp5I6iV
-----END PRIVATE KEY-----
`;
// RSA解密
var encrypt_rsa = new RSA.RSAKey();
encrypt_rsa = RSA.KEYUTIL.getKey(pk);
var result = encrypt_rsa.decryptLong(resp);
result = JSON.parse(result);
// console.log(result);
// DES解密
var keyHex = CryptoJS.enc.Utf8.parse('abef25b77285d1e3c91142c1')
var decrypted = CryptoJS.TripleDES.decrypt(result['data'], keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var desResult = decrypted.toString(CryptoJS.enc.Utf8);
// console.log('des => ' + desResult);
return JSON.parse(desResult);
} catch (e) {
return null;
}
};
/**
* 统一接口入口
*/
var Request = function(info, url, cb) {
try {
// console.log(info);
// 封装请求数据
var data = encryptReq(info);
if (data == null) {
cb(null);
} else {
// wx网络请求
wx.request({
url: url,
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
data: {
data: data
},
success(r) {
console.log(r);
if (r['data']['code'] == '000200') {
if (r['data']['data'] ==null){
cb(r['data']['msg'])
} else {
// 解密response数据
cb(decodeResp(r['data']['data']));
}
} else {
cb(r['data']['msg'])
}
},
fail(e) {
cb(null);
}
})
}
} catch (e) {
cb(null);
}
};
/**
* 获取上传策略
*/
var UploadOSS = function (orderId, selectData, cb) {
console.log('select===')
console.log(selectData)
// var that = this
// 上传参数
var info = {
attSts: '02', //阶段
bussPk: orderId, //业务pk
attName: selectData['picName'], // 附件名称
bussType: selectData['typeId'], // 附件分类
subclassType: selectData['typeSubId'], // 附件二级分类
threeClassType: selectData['typeId'] + selectData['typeSubId'].slice(0, 1) // 附件三级分类
};
// 获取上传策略
Request(info, U.URLS['ossPolicy'], function (r) {
console.log('获取上传策略====>')
console.log(r)
if (r != null && r != '') {
if (typeof r == 'string') {
wx.showModal({
title: '提示',
content: r,
showCancel: false,
confirmText: '重试',
success(res) {
// if (res.confirm) {
// console.log('用户点击确定')
// 重复操作
UploadOSS(orderId, selectData, cb)
// } else if (res.cancel) {
// console.log('用户点击取消')
// }
}
})
} else {
UploadPic(r, selectData, cb)
}
} else {
wx.showToast({
title: '获取上传策略失败',
})
}
});
};
/**
* 开始上传图片
*/
var UploadPic = function (oss, selectData, cb) {
// var that = this
console.log('上传................................')
try {
// 解析文件名
var url = selectData['picPath'];
var name = url.substring(url.lastIndexOf('/') + 1)
// 上传图片
wx.uploadFile({
method: 'POST',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
url: oss['host'],
filePath: selectData['picPath'],
name: 'file',
formData: {
success_action_status: '200',
key: oss['dir'] + name,
policy: oss['policy'],
OSSAccessKeyId: oss['accessid'],
signature: oss['signature'],
callback: oss['callback']
},
success(res) {
console.log('上传图片返回==>')
console.log(res)
if (res != null && res != '') {
console.log(res['data'])
var r = JSON.parse(res['data'])
// 返回成功,同步上传数据
if (r['code'] == '000200') {
SynOnlinePic(r, selectData, cb)
} else {
wx.showToast({
title: JSON.stringify(r),
})
// 重试
UploadPic(oss, selectData, cb)
}
} else {
wx.showToast({
title: '上传失败',
})
}
},
fail(e) {
console.log(e)
}
})
} catch (e) {
// 重试
UploadPic(oss, selectData, cb)
}
};
/**
* 同步图片数据到后台
*/
var SynOnlinePic = function (r, selectData, cb) {
// 新增
if (r != null) {
selectData['id'] = r['data']['crttim']
selectData['uid'] = app.globalData.uid,
selectData['picUrl'] = r['data']['extfld']
selectData['picId'] = r['data']['pk']
if (selectData['isSingle'] != 1 && selectData['picName'].indexOf("_") == -1 && selectData['picName'].indexOf(".") == -1) {
if(selectData['picPath'].lastIndexOf('mp4') != -1){
selectData['picName'] = selectData['picName'] + '_' + r['data']['crttim'] + '.mp4'
} else {
selectData['picName'] = selectData['picName'] + '_' + r['data']['crttim'] + '.jpg'
}
} else {
if (selectData['picName'].indexOf(".") == -1) {
if (selectData['picPath'].lastIndexOf('mp4') != -1) {
selectData['picName'] = selectData['picName'] + '.mp4'
} else {
selectData['picName'] = selectData['picName'] + '.jpg'
}
}
}
selectData['createTime'] = Time.getYMD()
selectData['updateTime'] = Time.getYMD()
selectData['isUsable'] = 1
selectData['imei'] = 'wx1234567890'
} else {
//删除
selectData['updateTime'] = Time.getYMD()
selectData['isUsable'] = 0
// selectData['typeSubId'] = ''
if (selectData['isSingle'] == 1) {
if (selectData['picName'].indexOf('.') != -1) {
selectData['picName'] = selectData['picName'].split('.')[0]
}
if (selectData['picName'].indexOf('_') != -1) {
selectData['picName'] = selectData['picName'].split('_')[0]
}
}
}
// var that = this
// 更新图片数据到后台图片表
var picInfo = []
picInfo.push(selectData)
Request(picInfo, U.URLS['picSave'], function (resp) {
console.log('syn pic data ......')
console.log(resp)
if (resp != 'OK') {
wx.showModal({
title: '提示',
content: resp,
showCancel: false,
confirmText: '重试',
success(res) {
// if (res.confirm) {
// console.log('确定')
// 重复操作
SynOnlinePic(r, selectData, cb)
// }
}
})
} else {
cb(r, selectData)
}
wx.hideLoading()
})
};
module.exports = {
Request: Request,
UploadOSS: UploadOSS,
SynOnlinePic: SynOnlinePic
}