微信小程序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 相关文章推荐
关于__defineGetter__ 和__defineSetter__的说明
May 12 Javascript
jQuery EasyUI API 中文文档 - Panel面板
Sep 30 Javascript
JS中prototype关键字的功能介绍及使用示例
Jul 21 Javascript
JS实现图片翻书效果示例代码
Sep 09 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
Apr 17 Javascript
Markdown+Bootstrap图片自适应属性详解
May 21 Javascript
js实现图片懒加载效果
Jul 17 Javascript
JS array数组检测方式解析
May 19 Javascript
关于vue的列表图片选中打钩操作
Sep 09 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
js实现复制粘贴的两种方法
Dec 04 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
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
chrome原生方法之数组
2011/11/30 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
json实现前后台的相互传值详解
2015/01/05 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
javascript轮播图算法
2016/10/21 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
python使用str & repr转换字符串
2016/10/13 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
三八妇女节活动主持词
2014/03/17 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
2014年维稳工作总结
2014/11/18 职场文书
销售业务员岗位职责
2015/02/13 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers