Commit 405ccd85 authored by xinzhedeai's avatar xinzhedeai

add:retry http

parent fe84681d
/** 爱山东网管请求封装
* 请求拦截、相应拦截、错误统一处理
*/
const BASE_URL = 'https://gqyjpt.weihai.cn/prod-api'
// var errors = []
// if(localStorage.getItem('wenti')){
// errors = JSON.parse(localStorage.getItem('wenti'))
// }
// localStorage.setItem('wenti', JSON.stringify(errors))
var http2 = {
// 2025年6月19日15 新增重试配置参数
post: function (params, fn, retryOptions = { maxRetry: 3, delay: 1000 }) {
// 保存原始参数(用于重试时恢复)
const originalParams = { ...params };
let currentRetry = 0; // 当前重试次数
// 定义实际执行请求的函数(支持重试)
const executeRequest = () => {
// 每次重试前恢复原始参数(防止参数被修改)
params = { ...originalParams };
/**
* 网关验签接口
* @param {1} = appid应用唯一标识
* @param {2} = interfaceid接口唯一标识
* @param {3} = data接口参数,请使用json格式, 例如:{"siteid":"2","cateid":"1"}
* @param {4} = fromport端口来源"0":PC;"1":APP;"2":支付宝;"3":微信
* @param {5} = extraData 额外参数,附件,请求头一类的参数
*
*/
const data = SM.encrypt(
JSON.stringify(params.reqParams),
params.interfacePublicKey
)
// console.log('http请求普通参数前', params.reqParams)
// console.log('http请求参数加密后', data)
const extraData = {
// 公共请求头设置
// header: {
// // Authorization: "Bearer eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiI0ODA3ODFkZmQxYmE0MmM0OGQyZDQ5NTllYzcyYTUwNCIsInVzZXIiOiJqYyIsInN1YiI6ImpjIn0.WfLq11T7iWPiMuzqDY2N54aIqdv-ciYCe6pINqQAeBdqlMiJmkufsqlD2YMmUzsHA-o4WerkiSYnPzexEMiAJA"
// // Authorization: localStorage.getItem('token')
// Authorization: gemhoUtil.getCookie('token')
// },
verificationHeaders: {
// 二次核验请求头
interfaceTicket: gemhoUtil.getCookie('ticket'),
},
}
// if (gemhoUtil.getCookie('token')) {
extraData.header = {
Authorization: gemhoUtil.getCookie('token')
// Authorization:
// 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiMTU4YjM0M2MtNTFmMS00ZDYzLTk0ZWUtNzcxZWRkYTAxMjFmIn0.ehBDVx2ldKNypKcQ4Vnzzii7Dy9El8gRBRQ1Fs_Lq0tkp-zCxSHoEesF5YsWD5weKSaYdAYj_3gXQk-P832QrA',
// }
}
if (params.fileList) {
// 用于接口传递的额外参数 如文件流等){
extraData.fileList = params.fileList
}
// console.log('http请求额外参数', JSON.stringify(extraData))
// console.log('http2方法进来了~extraData', extraData)
// vaildInterfacefn("gqyjglptxiefn", params.serviceId, data, "1", "https://" + urldomaincreatesign, "https://" + urldomaingateway).then((value) => {
vaildInterfacefn(
'gqyjglptxiefn',
params.serviceId,
data,
'1',
extraData
).then((value) => {
/**
* code: 200
data: "048b04671ad85e52e" // value 值就是接口返回的data值
msg: "请求成功"
success: true
*/
if (!value) {
// var errors = JSON.parse(localStorage.getItem('wenti'))
// errors.push('中台发生了错误-中台value为undefined')
// localStorage.setItem('wenti', JSON.stringify(errors))
// vant.Dialog.alert({
// title: '信息提示',
// message: '网络异常, 请重试',
// // message: '请求异常'
// })
// fn && fn(null) // 2025年6月19日 针对中台偶尔null问题,进行重试请求处理
// 可重试的错误类型
if (currentRetry < retryOptions.maxRetry) {
currentRetry++;
console.log(`请求失败,第${currentRetry}次重试...`);
setTimeout(executeRequest, retryOptions.delay);
} else {
console.log('超过最大重试次数,请求终止');
fn && fn(null, error.message);
}
return
}
let sm2_encrypt_result = value // 后台返回待解密内容
let sm2_decrypt_result = sm2_Decrypt(
sm2_encrypt_result,
params.interfacePrivateKey
)
// console.log('vaildInterfacefn响应解密', sm2_decrypt_result)
if (!sm2_decrypt_result) {
// 解密为空字符串
// var errors = JSON.parse(localStorage.getItem('wenti'))
// errors.push('中台发生了错误-解密为空')
// localStorage.setItem('wenti', JSON.stringify(errors))
fn && fn(null, 'decrypt')
return
}
const decryptRes = JSON.parse(sm2_decrypt_result)
console.log('当前请求参数', params.reqParams, '当前请求返回值', decryptRes)
if (
decryptRes.code === 400 ||
decryptRes.code === 401 ||
decryptRes.status === 401
) {
gemhoUtil.setCookie('token', '') // 清空token
vant.Dialog.alert({
title: '信息提示',
message: decryptRes.msg || decryptRes.message,
}).then(() => {
// confirm按钮回调
if (gemhoUtil.getPageName() === 'index') {
lightAppJssdk.navigation.close({
success: function (data) {
//成功回调
console.log('关闭页面')
},
fail: function (data) {
console.log('关闭失败')
},
})
} else {
gemhoUtil.navigatePage('../index.html')
}
})
return
}
fn && fn(sm2_decrypt_result)
})
}
// 首次执行请求
executeRequest();
},
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment