微信小程序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 相关文章推荐
javascript Zifa FormValid 0.1表单验证 代码打包下载
Jun 08 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 Javascript
JavaScript实现16进制颜色值转RGB的方法
Feb 09 Javascript
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
利用Angular.js限制textarea输入的字数
Oct 20 Javascript
基于vue的下拉刷新指令和滚动刷新指令
Dec 23 Javascript
Vue实现自带的过滤器实例
Mar 09 Javascript
vue+node+webpack环境搭建教程
Nov 05 Javascript
关于express与koa的使用对比详解
Jan 25 Javascript
JavaScript常用数学函数用法示例
May 14 Javascript
jQuery实现动态添加和删除input框代码实例
Mar 29 jQuery
微信小程序实现动态列表项的顺序加载动画
Jul 25 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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
JavaScript 事件的一些重要说明
2009/10/25 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
python学生管理系统代码实现
2020/04/05 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
Django 开发环境配置过程详解
2019/07/18 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
Python如何获取文件路径/目录
2020/09/22 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
养殖项目策划书范文
2014/01/13 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript