微信小程序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 相关文章推荐
小议Function.apply() 之一------(函数的劫持与对象的复制)
Nov 30 Javascript
js和jquery设置disabled属性为true使按钮失效
Aug 07 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
May 15 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
Jan 08 Javascript
BootStrap实现鼠标悬停下拉列表功能
Feb 17 Javascript
vue resource post请求时遇到的坑
Oct 19 Javascript
vue props传值失败 输出undefined的解决方法
Sep 11 Javascript
如何使用 vue + d3 画一棵树
Dec 03 Javascript
Vue Router history模式的配置方法及其原理
May 30 Javascript
Electron 调用命令行(cmd)
Sep 23 Javascript
使用webpack搭建pixi.js开发环境
Feb 12 Javascript
javascript 易错知识点实例小结
Apr 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
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
phpize的深入理解
2013/06/03 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
python递归计算N!的方法
2015/05/05 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
python中pyqtgraph知识点总结
2021/01/26 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
学校岗位设置方案
2014/01/16 职场文书
班级文化建设标语
2014/06/23 职场文书
元旦晚会活动总结
2014/07/09 职场文书
政风行风评议工作总结
2014/10/21 职场文书
2014年保密工作总结
2014/11/22 职场文书
转让协议书
2015/01/27 职场文书
先进个人自荐书
2015/03/06 职场文书
十七岁的单车观后感
2015/06/12 职场文书
Python合并多张图片成PDF
2021/06/09 Python
详解Flask开发技巧之异常处理
2021/06/15 Python