微信小程序request请求封装,验签代码实例
这篇文章主要介绍了微信小程序request请求封装,验签代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1.公共文件util添加
request请求
//简单封装请求
functionrequest(params,path,isShowLoading=true,goBack=false,type='none',obj={}){
try{
console.log(path)
letNowTime=Date.parse(newDate())/1000;
letdefaultParams={
platform:app.globalData.platform,
appVersion:app.globalData.version,
deviceId:uuId(),
timestamp:params.timestamp?params.timestamp:NowTime
};
params=Object.assign(params,defaultParams);
letrequestParams=signature(params)
isShowLoading&&wx.showLoading&&wx.showLoading({
title:'加
中...'
})
returnnewPromise((resolve,reject)=>{
letheader;
obj.header=obj.header||{};
console.log('获取ptkey')
console.log(plugin.getJdListStorage(['guid','pt_key','pt_token','pt_pin']))
let[GUID='',KEY='',TOKEN='',PIN='']=plugin.getJdListStorage(['guid','pt_key','pt_token','pt_pin']),
_cookie=`guid=${GUID};pt_pin=${encodeURIComponent(PIN)};pt_key=${KEY};pt_token=${TOKEN};${wx.getStorageSync("accessToken_v1")}`,{
cookie
}=obj.header;
console.log(cookie)
obj.header.cookie=cookie?`${cookie};${_cookie}`:_cookie;
if(!isEmpty(getToken())){
obj.header.authorization='Bearer'+getToken()
}
console.log(obj.header)
wx.request({
url:getApp().globalData.host+path,//获取app.js全局ip
data:requestParams,
method:'POST',
header:obj.header,
success:function(res){
console.log(res)
isShowLoading&&wx.hideLoading&&wx.hideLoading()
//缺少登录失效的处理方法
if(res.statusCode==200&&res.data.code==200){
if(isEmpty(res.data.data)||res.data.data==true){
resolve('true')
return
}
if(res.data.data){
resolve(res.data.data);
}elseif(res.data.data==0){
resolve(res.data.data);
}else{
resolve('true')
}
}elseif(res.statusCode==200&&res.data.code==401){//token过期
Login();
resolve(false);
return;
}else{
//需要再判断code码
//errorShow(res.data.msg,goBack,type);
errorShow(res.data.msg);
resolve(false);
//reject(res.data.res);
}
},
fail:function(err){
console.log(err)
//因为hide会让showToast隐藏
isShowLoading&&wx.hideLoading&&wx.hideLoading()
errorShow('网络请求失败');
reject(newError('Networkrequestfailed'))
//thrownewError('Networkrequestfailed')
},
complete:function(){}
})
})
}catch(err){
console.log(err)
errorShow('网络请求失败');
returnfalse;
}
}
2.signature签名
//生成签名
functionsignature(params){
letkeyArr=[]
for(letkeyinparams){
keyArr.push(key)
}
letarr=keyArr.sort();
letresult="";
arr.map((item,index)=>{
if(params[item]==null||params[item]==undefined){
deleteparams[item];
arr.splice(index,1);
}
})
console.log("arr")
console.log(arr)
arr.map((item,index)=>{
if(Array.isArray(params[item])==true){
letres=''
letarr=params[item]
arr.map(obj=>{
console.log(typeof(obj))
if(typeof(obj)!='object'){
res+=obj
}else{
for(letkeyinobj){
if(Array.isArray(obj[key])){
letval='';
obj[key].map(item=>{
val+=item
})
res+=key+val
}else{
res+=key+obj[key]
}
}
}
})
result+=''+item+''+res
}else{
result+=''+item+''+params[item]
}
})
console.log("result")
console.log(result)
letpos;
if(isEmpty(getToken())){
pos=result
}else{
pos=result+getToken()
}
console.log(pos)
console.log("signature")
letsignature=sha256.hmac.create('pos_secret').update(pos).hex().toLowerCase();//需要引入sha256.min.js
console.log(signature)
letobj={
'signature':signature
}
returnObject.assign(params,obj);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。