微信小程序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 相关文章推荐
jQuery 技巧大全(新手入门篇)
May 12 Javascript
基于jquery的给文章加入关键字链接
Oct 26 Javascript
javascript数组去重3种方法的性能测试与比较
Mar 26 Javascript
jQuery模拟点击A标记示例参考
Apr 17 Javascript
jQuery中removeClass()方法用法实例
Jan 05 Javascript
javascript中innerText和innerHTML属性用法实例分析
May 13 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
Apr 20 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
原生js实现针对Dom节点的CRUD操作示例
Aug 26 Javascript
关于小程序优化的一些建议(小结)
Dec 10 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
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
图书管理程序(二)
2006/10/09 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
vue写一个组件
2018/04/09 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
python根据文件大小打log日志
2014/10/09 Python
Python类定义和类继承详解
2015/05/08 Python
Python中的自省(反射)详解
2015/06/02 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
python使用TensorFlow进行图像处理的方法
2018/02/28 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
python判断输入日期为第几天的实例
2018/11/13 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
详解Python中的路径问题
2020/09/02 Python
python安装及变量名介绍详解
2020/12/12 Python
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
投资意向书范本
2014/04/01 职场文书
六一节目主持词
2014/04/01 职场文书
大学班级学风建设方案
2014/05/01 职场文书
孔子观后感
2015/06/08 职场文书
销售人员管理制度
2015/08/06 职场文书
八年级英语教学反思
2016/02/15 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书