微信小程序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 相关文章推荐
javascript Array数组对象的扩展函数代码
May 22 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 Javascript
动态加载jQuery的两种方法实例分析
Jul 17 Javascript
js弹出窗口返回值的简单实例
May 28 Javascript
AngularJS+Bootstrap实现多文件上传与管理
Nov 08 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
Bootstrap table右键功能实现方法
Feb 20 Javascript
AngularJS 防止页面闪烁的方法
Mar 09 Javascript
webpack写jquery插件的环境配置
Dec 21 jQuery
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
Jan 08 Javascript
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
微信小程序动态设置图片大小的方法
Nov 21 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 超链接 抓取实现代码
2009/06/29 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
PHP生成树的方法
2015/07/28 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
JavaScript计时器示例分析
2015/02/05 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
详解vue axios二次封装
2018/07/22 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Python装饰器语法糖
2019/01/02 Python
python3 线性回归验证方法
2019/07/09 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
班队活动设计方案
2014/01/30 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
行政主管岗位职责
2015/02/03 职场文书
学生会个人总结范文
2015/02/15 职场文书
Django 如何实现文件上传下载
2021/04/08 Python