使用promise函数封装post请求,封装aes加解密方法,并进行请求头aes加密,封装sm2国密加解密,进行请求体数据加密,响应数据解密。

该代码段展示了一个在uni-app中封装的POST请求函数,包含了加载提示、AES加密处理、错误提示及登录状态检查。请求头包含了动态生成的加密通道和场景值,数据部分根据配置决定是否加密。当请求成功时,会进行解密操作并根据返回的状态码进行不同的业务处理。
摘要由CSDN通过智能技术生成
export default {
	async post(url, params = { header:{}, data:{} }, showLoading = true){
		if(showLoading){
			uni.showLoading({
				title:"加载中",
				mask:true
			})
		}
		let options={
			header:{...params.header},
			url:globalParams.basepath+url.url,
			data:{...params.data}
		}
		//渠道  aesEncryption是封装的aes加密方法,headerKey是后端生成
		options.header["channel"] = aesEncryption("h5pre",globalParams.headerKey)
		//场景值 options.header["scene"]根据业务场景不同传值不相同
		options.header["scene"]= aesEncryption(options.header["scene"],globalParams.headerKey)
		let securityParam = {},
		if(options.data){
			//使用globalParams.globalData.encryptOn判定是否需要开启加密功能
			if(globalParams.globalData.encryptOn){
				securityParam = encryptObjectData({...options.data})
			}else{
				securityParam = options.data
			}
		}
		return new Promise((resolve,reject)=>{
			uni.request({
				header:options.header,
				data:{
					securityParam
				},
				url:options.url,
				timeout:60000,
				methods:"POST",
				"Content-type":"application/json,charset=UTF-8",
				success:(res)=>{
					console.log("response===>",res)
					if(res.statusCode != 200){
						uni.showModal({
							title:"错误",
							content:res?.data?.erortx||"请求状态:"+res.statusCode,
							showCancel:false
						});
						return;
					}
					//这里写请求正常返回的码值  decryptData是解密方法
					let trnData = JSON.parse(decryptData(res?.data?.securityRes));
					console.log("加密之前",res?.data?.securityRes);
					console.log("加密之后",trnData);
					console.log("返回值",trnData.erortx);
					if(res.statusCode == 200){
						if(trnData?.erorcd == 200){
							resolve(trnData.data)
						}else if(trnData?erorcd == 400 || trnData?.erorcd == 406){
							uni.showModal({
								title:"错误",
								content:trnData?.eorotx||"请求错误",
								showCancel:false
							});
							reject()
						}else{
							uni.showModal({
								title:"错误",
								content:trnData?.erortx || "请求错误",
								showCancel:false
							})
						}
					}else if(res.statusCode == -1){
						//-1占位,之后再替换
						uni.showModal({
							title:"温馨提示",
							content:"登录过期,请重新登录",
							showCancel:false,
							success:()=>{
								globalParams.globalData.isLogin = false;
								uni.reLaunch({
									url:"/pages/login/index",
									success:()=>{}
								})
							}
						})
						return;
					}else{
						uni.showModal({
							title:"温馨提示",
							content:trnData.msg || "接口报错",
							showCancel:false,
							success:()=> reject(trnData)
						})
					}
				},
				fail:(fail)=>{
					uni.hideLoading();
					uni.showModal({
						title:"错误",
						content:"请求失败",
						showCancel:false
					})
				},
				complete:()=>{
					uni.hideLoading()
				}
			})
		})
	}
}

sm2加密方法:
在这里插入图片描述
aes加密方法:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值