微信小程序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 相关文章推荐
juqery 学习之四 筛选过滤
Nov 30 Javascript
Mac地址验证的javascript代码
Nov 09 Javascript
JS获取图片高度宽度的方法分享
Apr 17 Javascript
node.js require() 源码解读
Dec 13 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
Jun 12 Javascript
angularjs指令之绑定策略(@、=、&)
Apr 13 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
原生js实现省市区三级联动代码分享
Feb 12 Javascript
微信小程序url传参写变量的方法
Aug 09 Javascript
解决bootstrap模态框数据缓存的问题方法
Aug 10 Javascript
详解puppeteer使用代理
Dec 27 Javascript
如何在 Vue 表单中处理图片
Jan 26 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中的实现trim函数代码
2007/03/19 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
墨西哥网上超市:Superama
2018/07/10 全球购物
幼儿园教师的考核评语
2014/04/18 职场文书
计算机专业自荐信
2014/05/24 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
离婚协议书范本2014
2014/10/27 职场文书
外出听课学习心得体会
2016/01/15 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL