Newer
Older
miniCreditFactory / utils / api.js
bello on 29 May 2020 11 KB init
//获取应用实例
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
}