var baseURL = require('./api.js');
var sm2 = require('./sm2.js');
var appJs;
// 展示進度條的網路請求
// url:網路請求的url
// params:請求引數
// message:進度條的提示資訊
// methods:請求方式
// hideLoad:隱藏wx.showLoading
// hideToast:隱藏wx.showToast
//用于生成uuid
function S4() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
function guid() {
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}
function objKeySort(obj) { //排序的函式
var newkey = Object.keys(obj).sort();
//先用Object內置類的keys方法獲取要排序物件的屬性名,再利用Array原型上的sort方法對獲取的屬性名進行排序,newkey是一個陣列
var newObj = {}; //創建一個新的物件,用于存放排好序的鍵值對
for (var i = 0; i < newkey.length; i++) { //遍歷newkey陣列
newObj[newkey[i]] = obj[newkey[i]]; //向新創建的物件中按照排好的順序依次增加鍵值對
}
return newObj; //回傳排好序的新物件
}
function timest() {
var tmp = Date.parse(new Date()).toString();
tmp = tmp.substr(0, 10);
return tmp;
}
var uuid;
var token = "";
var _token_ = "";
let superPrivateKey = sm2.superPrivateKey;
let privateKey = "";
const rsa = require('../utils/cryptojs-master/cryptojs.js');
const Encrypt = require('../utils/jsencrypt.min.js');
let encryptor = new Encrypt.JSEncrypt();
encryptor.setPrivateKey(superPrivateKey); // 設定私鑰
// function getResult(callback, callback1) {
// if (!privateKey) {
// callback()
// debugger
// } else {
// callback1()
// }
// }
// getResult(getA, requestLoading);
function getA() {
wx.request({
url: baseURL.baseURL + 'api/services/app/Setting/GetCerPriKeyAsync',
data: '',
header: {},
method: 'Get',
success: function(res) {
console.log(res)
let array = res.data.Result.Data;
let sourcePrivate = '';
for (let a = 0; a < array.length; a++) {
sourcePrivate += encryptor.decrypt(array[a]);
}
console.log("原始私鑰" + sourcePrivate);
encryptor.setPrivateKey(sourcePrivate);
privateKey = sourcePrivate;
debugger
// requestLoading()
// getHomeSetting()
},
fail: function(res) {
console.log(res)
},
complete: function(res) {},
})
}
function requestLoading(url, params, message, methods, hideLoad, hideToast) {
if (!appJs) {
appJs = getApp();
}
return new Promise(function(resolve, reject) {
if (!privateKey) {
getA()
debugger
reject()
}
var method = methods || "GET";
params = params || {};
params.MpContentType = 1;
if (!hideLoad) {
if (method == "POST") {
if (message != "") {
wx.showLoading({
title: message,
mask: true
})
} else {
wx.showLoading({
title: '資料加載中',
mask: true
});
}
}
}
if (url.substring(0, 1) == '/') {
url = url.substr(1);
}
// token存在直接使用,不存在為空
if (appJs) {
token = appJs.globalData.token;
appJs.globalData.privateKey = privateKey;
if (!token) {
token = wx.getStorageSync('token') || wx.getStorageSync('token');
appJs.globalData.token = token;
}
_token_ = token;
} else {
token = wx.getStorageSync('token') || wx.getStorageSync('token');
_token_ = token;
}
// url拼接token和__shop__
let __shop__ = wx.getStorageSync('organizationid') || '';
if (url.lastIndexOf("?") == -1) {
url = url + '?_token_=' + _token_ + '&__shop__=' + __shop__
} else {
url = url + '&_token_=' + _token_ + '&__shop__=' + __shop__
}
if (method == "GET") {
params.timestamp = timest();
params = objKeySort(params);
let str = Object.keys(params).map(function(key) {
return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(params[key]));
}).join('&');
str = '_token_=' + _token_ + '&__shop__=' + __shop__ + '&' + str;
let sha256sign = encryptor.sign(str, rsa.Crypto.SHA256, "SHA256");
sha256sign = encodeURIComponent(sha256sign);
params.sign = sha256sign;
}
if (method == "POST" || method == "PUT") {
var aa = JSON.stringify(params);
let str = '_token_=' + _token_ + '&__shop__=' + __shop__ + '×tamp=' + timest() + aa;
let sha256sign = encryptor.sign(str, rsa.Crypto.SHA256, "SHA256")
sha256sign = encodeURIComponent(sha256sign);
url = url + '×tamp=' + timest() + '&sign=' + sha256sign;
}
if (method == "DELETE") {
let index = url.lastIndexOf("?");
let str = url.substring(index + 1, url.length) + '×tamp=' + timest() + JSON.stringify(params);
let sha256sign = encryptor.sign(str, rsa.Crypto.SHA256, "SHA256")
sha256sign = encodeURIComponent(sha256sign);
url = url + '×tamp=' + timest() + '&sign=' + sha256sign;
}
// uuid存在直接使用,否則存盤本地使用新的
uuid = wx.getStorageSync('uuid');
if (!uuid) {
uuid = guid();
wx.setStorageSync('uuid', uuid);
}
var Device = "device/" + uuid
if (wx.canIUse('getAccountInfoSync')) {
const accountInfo = wx.getAccountInfoSync();
var MicroApp = accountInfo.miniProgram.version;
if (MicroApp) {
Device = Device + " microapp/" + MicroApp
}
}
wx.request({
url: baseURL.baseURL + url,
data: params,
header: {
'Content-Type': 'application/json',
'Abp.Tenantld': '2',
'authorization': token,
"Device": Device
},
method: method,
success: function(res) {
if (message != "") {
wx.hideLoading()
} else {
wx.hideLoading()
}
//請求成功
//判斷狀態碼---errCode狀態根據后端定義來判斷
if (res.statusCode == 200) {
if (res.data.Result.Code == 0) {
resolve(res);
wx.hideLoading();
} else if (res.data.Result.Code == 401 && url != 'api/services/app/MemberSession/GetLoginState') {
wx.hideLoading();
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: '登錄已過期,請重新登錄',
icon: 'none',
duration: 1000,
mask: true
})
}, 500)
}
wx.removeStorageSync('OpenId');
wx.removeStorageSync('token');
appJs.globalData.token = ""
wx.removeStorageSync('MemberId');
reject();
wx.reLaunch({
url: '/pages/member/loginAndRegister/loginAndRegister',
})
} else if (res.data.Result.Code == 404 || res.data.Result.Code == 101) {
wx.hideLoading();
resolve(res);
} else {
wx.hideLoading();
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: res.data.Result.Message,
icon: 'none',
duration: 2000,
mask: true
})
}, 500)
}
resolve(res);
}
wx.hideLoading();
} else if (res.statusCode == 401) {
wx.hideLoading();
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: '登錄已過期,請重新登錄',
icon: 'none',
duration: 2000,
mask: true
})
}, 500)
}
wx.removeStorageSync('OpenId');
wx.removeStorageSync('token');
appJs.globalData.token = ""
wx.removeStorageSync('skin');
wx.removeStorageSync('Router');
wx.removeStorageSync('Url');
reject();
wx.reLaunch({
url: '/pages/member/loginAndRegister/loginAndRegister',
})
} else {
wx.hideLoading();
wx.hideToast();
if (res.data.Error.Message) {
if (!hideToast) {
wx.showToast({
title: res.data.Error.Message,
icon: 'none',
duration: 2000,
mask: true
})
}
} else {
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: '請求例外',
icon: 'none',
mask: true
})
}, 500)
}
}
//其他例外
reject('運行時錯誤,請稍后再試');
}
},
fail: function(res) {
wx.hideLoading();
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: '請求例外',
icon: 'none',
mask: true
})
}, 500)
}
//請求失敗
reject(res);
},
complete: function(res) {},
})
})
}
module.exports = {
requestLoading: requestLoading
}
現在需求是需要先執行getA獲取私鑰,然后執行requestLoading請求介面。但是requestLoading是直接暴露出去的會被直接呼叫。該怎么辦
uj5u.com熱心網友回復:
function requestLoading (){//requestLoading 邏輯
}
function getA(callback){
//getA邏輯
callback();
}
getA(function(){
requestLoading();
});
uj5u.com熱心網友回復:
function getA() {
return new Promise((resolve, reject) =>{
wx.request({
url: baseURL.baseURL + 'api/services/app/Setting/GetCerPriKeyAsync',
data: '',
header: {},
method: 'Get',
success: function(res) {
console.log(res)
let array = res.data.Result.Data;
let sourcePrivate = '';
for (let a = 0; a < array.length; a++) {
sourcePrivate += encryptor.decrypt(array[a]);
}
console.log("原始私鑰" + sourcePrivate);
encryptor.setPrivateKey(sourcePrivate);
privateKey = sourcePrivate;
resolve()
debugger
// requestLoading()
// getHomeSetting()
},
fail: function(res) {
console.log(res)
},
complete: function(res) {},
})
})
}
if (!privateKey) {
await getA()
debugger
reject()
}
uj5u.com熱心網友回復:
這方法試了,不行的。1樓兄弟的還是異步,2樓兄弟的寫法有問題的會報錯的uj5u.com熱心網友回復:
function asyncFn(){
return new Promise((resolve,reject) => {
//在需要的地方呼叫resolve()表示當前函式執行結束,可傳參
resolve(1)
})
}
function fn(){
asyncFn().then(res => console.log(res))
}
fn()
uj5u.com熱心網友回復:
4樓的兄弟提供的這個也不行啊uj5u.com熱心網友回復:
方法1:回呼函式大法方法2:async/await大法
uj5u.com熱心網友回復:
已經解決了呢轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/28890.html
標籤:JavaScript
上一篇:使用js控制media player播放提示沒有play()方法
下一篇:開課吧培訓機構怎么樣
