微信小程序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 相关文章推荐
js 字符串转化成数字的代码
Jun 29 Javascript
jQuery获取注册信息并提示实现代码
Apr 21 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
Jun 24 Javascript
jquery设置控件位置的方法
Aug 21 Javascript
Js操作Select大全(取值、设置选中等等)
Oct 29 Javascript
javascript正则匹配汉字、数字、字母、下划线
Apr 10 Javascript
JavaScript实现点击自动选择TextArea文本的方法
Jul 02 Javascript
javascript从定义到执行 你不知道的那些事
Jan 04 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
Jun 19 Javascript
详解Vue路由钩子及应用场景(小结)
Nov 07 Javascript
浅谈如何优雅处理JavaScript异步错误
Nov 12 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
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
Python中optparser库用法实例详解
2018/01/26 Python
python 接收处理外带的参数方法
2018/12/03 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
详解python多线程之间的同步(一)
2019/04/03 Python
为什么是 Python -m
2020/06/19 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
会计人员演讲稿
2014/09/11 职场文书
销售2014年度工作总结
2014/12/08 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL