微信小程序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 相关文章推荐
extjs3 combobox取value和text案例详解
Feb 06 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
Dec 30 Javascript
Bootstrap每天必学之级联下拉菜单
Mar 27 Javascript
JQuery实现简单的服务器轮询效果实例
Mar 31 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
canvas实现图片根据滑块放大缩小效果
Feb 24 Javascript
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
详解vuex的简单使用
Mar 12 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
Sep 18 Javascript
JS如何实现动态添加的元素绑定事件
Nov 12 Javascript
React 父子组件通信的实现方法
Dec 05 Javascript
Vue组件简易模拟实现购物车
Dec 21 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
php桌面中心(二) 数据库写入
2007/03/11 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP实现验证码校验功能
2017/11/16 PHP
PHP实现简易计算器功能
2020/08/28 PHP
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
Python线性拟合实现函数与用法示例
2018/12/13 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
在Python中使用Neo4j的方法
2019/03/14 Python
python画图的函数用法以及技巧
2019/06/28 Python
详解Python文件修改的两种方式
2019/08/22 Python
wxPython实现分隔窗口
2019/11/19 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
python 画图 图例自由定义方式
2020/04/17 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
数组越界问题
2015/10/21 面试题
私有程序集与共享程序集有什么区别
2013/04/05 面试题
会计助理的岗位职责
2013/11/29 职场文书
九年级科学教学反思
2014/01/29 职场文书
论文致谢词范文
2015/05/14 职场文书
人与自然的观后感
2015/06/18 职场文书
红色经典观后感
2015/06/18 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android