微信小程序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()) / ;
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 == && res.data.code == ) {
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 == ){
resolve(res.data.data);
} else {
resolve('true')
}
} else if (res.statusCode == && res.data.code == ) { //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, );
}
})
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);
}
3/ util文件引入
const app = getApp()
const sha256 = require('../libs/sha256.min.js');
微信小程序request请求封装,验签的更多相关文章
- 微信小程序 request请求封装
在utils文件夹新建文件utils.js,封装代码如下: 小程序升级后内部不自带Promise方法,需外部引入Promise方法 var sendRequest = function (url, ...
- 微信小程序request请求封装
var app = getApp(); function request(url,postData,doSuccess,doFail,doComplete){ var host = getApp(). ...
- mpvue学习笔记-之微信小程序数据请求封装
简介 美团出品的mpvue已经开源出来很久了,一直说要进行一次实践,这不最近一次个人小程序开发就用上了它. 看了微信官方的数据请求模块--request,对比了下get和post请求的代码,发现如果在 ...
- 微信小程序request请求的封装
目录 1,前言 2,实现思路 3,实现过程 3.1,request的封装 3.2,api的封装 4,实际使用 1,前言 在开发微信小程序的过程中,避免不了和服务端请求数据,微信小程序给我们提供了wx. ...
- 微信小程序request请求之GET跟POST的区别
1.GET 例子: wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' , y: '' }, header: { 'content ...
- 微信小程序request请求动态获取数据
微信小程序开发文档链接 1 后台代码: clickButton:function(){ var that = this; wx.request({ url: 'http://localhost:909 ...
- 微信小程序request请求实例,网络请求。
最近微信小程序开始开放测试了,小程序提供了很多api,极大的方便了开发者,其中网络请求api是wx.request(object),这是小程序与开发者的服务器实现数据交互的一个很重要的api. 官方参 ...
- 微信小程序request(ajax)接口请求封装
微信小程序request(ajax)接口请求封装 最近在进行小程序的编写,需要调用后端接口,经常要用到wx.request方法,所以就自己封装了一下,简化一下代码,如果能给大家提供帮助更好,在封装的时 ...
- 微信小程序数据请求方法wx.request小测试
微信小程序数据请求方法 wx.request wxml文件: <view> <textarea value="{{textdata}}"/> </vi ...
随机推荐
- JavaScript Array -->map()、filter()、reduce()、forEach()函数的使用
题目: 1.得到 3000 到 3500 之内工资的人. 2.增加一个年龄的字段,并且计算其年龄. 3.打印出每个人的所在城市 4.计算所有人的工资的总和. 测试数据: function getDat ...
- (转载)搜索引擎的Query自动纠错技术和架构详解
from http://www.52nlp.cn/%E8%BE%BE%E8%A7%82%E6%95%B0%E6%8D%AE%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E7 ...
- Java多线程和并发(七),synchronized
目录 1.线程安全的主要原因 2.互斥锁的特性 3.锁的类别 4.类锁和对象锁的总结 七.synchronized 1.线程安全的主要原因 2.互斥锁的特性 Java中synchronized锁的不是 ...
- Python惯例
“惯例”这个词指的是“习惯的做法,常规的办法,一贯的做法”,与这个词对应的英文单词叫“idiom”.由于Python跟其他很多编程语言在语法和使用上还是有比较显著的差别,因此作为一个Python开发者 ...
- Linux命令-文本编辑(二)
Linux命令-文本编辑(二) Linux mtype命令 mtype为mtools工具指令,模拟MS-DOS的type指令,可显示MS-DOS文件的内容. 语法: mtype [-st][文件] 参 ...
- AtCoder AGC036D Negative Cycle (图论、DP)
题目链接 https://atcoder.jp/contests/agc036/tasks/agc036_d 题解 这都是怎么想出来的啊..目瞪口呆系列.. 第一步转化至关重要: 一张图中不存在负环意 ...
- js几种加密方法
1.base64加密 它的github地址:https://github.com/dankogai/js-base64 <!DOCTYPE HTML> <html> <h ...
- H5自定义video功能与样式处理
H5的video非常简单,方便,有时我们可能需要自己来设置样式来自定义的video,自定义的话我们需要对功能进行一些处理,这里常用的功能几乎是都用到了,第一次练习代码很累赘,之后会慢慢改进. 常用的一 ...
- Unity3D_(游戏)控制物体的上、下、左、右移动
通过键盘上↑.↓.←.→实现对物体的控制 using System.Collections; using System.Collections.Generic; using UnityEngine; ...
- Unity3D_(游戏)甜品消消乐03_游戏UI设计
甜品消消乐01_游戏基础界面 传送门 甜品消消乐02_游戏核心算法 传送门 甜品消消乐03_游戏UI设计 传送门 (源码在文章最下面~) 实现过程 游戏界面UI 分数与时间的UI显示 有关游戏U ...