微信小程序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 相关文章推荐
Linux下使用jq友好的打印JSON技巧分享
Nov 18 Javascript
jQuery地图map悬停显示省市代码分享
Aug 20 Javascript
jquery实现网站列表切换效果的2种方法
Aug 12 Javascript
JavaScript正则替换HTML标签功能示例
Mar 02 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
Sep 19 Javascript
Vue2.0 slot分发内容与props验证的方法
Dec 12 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 Javascript
angularjs实现table增加tr的方法
Feb 27 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
Aug 09 jQuery
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 Javascript
Element-UI踩坑之Pagination组件的使用
Oct 29 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
Aug 07 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面向对象中的魔术方法中文说明
2014/03/04 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
详解Python的Lambda函数与排序
2016/10/25 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
Python登录注册验证功能实现
2018/06/18 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
使用python求解二次规划的问题
2020/02/29 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
如何在C# winform中异步调用web services
2015/09/21 面试题
大学生四年生活自我鉴定
2013/11/21 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
党员自我对照检查材料
2014/08/19 职场文书
运动会班级前导词
2015/07/20 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python