微信小程序request请求封装,验签代码实例


Posted in Javascript onDecember 04, 2019

这篇文章主要介绍了微信小程序request请求封装,验签代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.公共文件util添加

request请求

//简单封装请求
function request(params, path, isShowLoading = true, goBack = false, type = 'none', obj={}) {
 try {
  console.log(path)
  let NowTime = Date.parse(new Date()) / 1000;
  let defaultParams = {
   platform: app.globalData.platform,
   appVersion: app.globalData.version,
   deviceId: uuId(),
   timestamp: params.timestamp ? params.timestamp : NowTime
  };
 
  params = Object.assign(params, defaultParams);
  let requestParams = signature(params)
  isShowLoading && wx.showLoading && wx.showLoading({
   title: '加
中...'
  })
  return new Promise((resolve, reject) => {
   let header;
   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);
      } else if (res.data.data == 0){
       resolve(res.data.data);
      } else {
       resolve('true')
      }
     } else if (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(new Error('Network request failed'))
     // throw new Error('Network request failed')
    },
    complete: function() {}
   })
  })
 } catch (err) {
  console.log(err)
  errorShow('网络请求失败');
  return false;
 }
}

2.signature 签名

//生成签名
function signature(params) {
 let keyArr = []
 for (let key in params) {
  keyArr.push(key)
 }
 let arr = keyArr.sort();
 let result = "";
 arr.map((item, index) => {
  if (params[item] == null || params[item] == undefined) {
   delete params[item];
   arr.splice(index, 1);
  }
 })
 console.log("arr")
 console.log(arr)
 arr.map((item, index) => {
  if (Array.isArray(params[item]) == true) {
   let res = ''
   let arr = params[item]
   arr.map(obj => {
    console.log(typeof(obj))
    if (typeof(obj) != 'object') {
     res += obj
    } else {
     for (let key in obj) {
      if (Array.isArray(obj[key])) {
       let val = '';
       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)

 let pos;
 if (isEmpty(getToken())) {
  pos = result
 } else {
  pos = result + getToken()
 }
 console.log(pos)
 console.log("signature")
 let signature = sha256.hmac.create('pos_secret').update(pos).hex().toLowerCase(); //需要引入sha256.min.js
 console.log(signature)
 let obj = {
  'signature': signature
 }
 return Object.assign(params, obj);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
图片连续滚动代码[兼容IE/firefox]
Jun 11 Javascript
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
jQuery实现个性翻牌效果导航菜单的方法
Mar 09 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
JavaScript的设计模式经典之建造者模式
Feb 24 Javascript
Javascript 正则表达式校验数字的简单实例
Nov 02 Javascript
Angular 4.0学习教程之架构详解
Sep 12 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
通过jquery的ajax请求本地的json文件方法
Aug 08 jQuery
微信小程序iOS下拉白屏晃动问题解决方案
Oct 12 Javascript
vue.js实现照片放大功能
Jun 23 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
Jul 31 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 #Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 #Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
Dec 04 #Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
Dec 04 #Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 #jQuery
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 #Javascript
Vue实现base64编码图片间的切换功能
Dec 04 #Javascript
You might like
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php筛选不存在的图片资源
2015/04/28 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
js切换div css注意的细节
2012/12/10 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
js实现股票实时刷新数据案例
2017/05/14 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
js实现小星星游戏
2020/03/23 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
python实现按日期归档文件
2021/01/30 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
副处级干部考察材料
2014/05/17 职场文书
安全演讲稿开场白
2014/08/25 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
单位工作证明格式模板
2014/10/04 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
十岁生日答谢词
2015/01/05 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
安全生产隐患排查制度
2015/08/05 职场文书
MySQL sql模式设置引起的问题
2022/05/15 MySQL