要求:要封装一个md5加密的请求头,加密部分:url  问号后面部分和data参数。

签名步骤:

1、 按照参数首字母进行排序, 并拼接为字符串, 并用&链接
2、追加密钥&key=xxxxxxx到字符串(具体加密密钥每个项目不同)
3、把得到的字符串进行md5加密,并转大写
4、把计算得到的签名追加到 GETPOST请求中即可: sign=签名结果

前端封装步骤:

首先建一个common文件夹然后在里面建一个network.js文件。目录结构是这样:

封装的内容写在network.js里面。

1.要用到md5加密,要先下载一个md5.js。我这里没有下载,用了uView框架里面的md5,那么先把它引进来:

import md5Libs from "../uview-ui/libs/function/md5.js";

2.把data对象转换成数组,这里用 entries

let result = Object.entries(date);  //data参数对象转数组
console.log(result);

3.再把数组用&拼接成字符串(这里要做判断,判断数组里是否包含多个元素,若是,则要用+=,否则直接用=)

let dateStr = ""for(var i=0;i<result.length;i++){console.log(result[i]);if(result.length>1){dateStr += "&" + result[i][0] +"="+result[i][1];}else{dateStr = "&" + result[i][0] +"="+result[i][1]}}

4.然后再看url里面的(url里是否包含"?",若包含则截取下来)

截取下来后再与data里的参数按首字母排序,再拼接。

最后md5计算,转大写。

let urlStr = url;let md5Str = "";let key = "1^)(^*^$$#$%!@#$!@#$%";let sign = "";if(urlStr.indexOf("?")!=-1){  //url参数截取let index = urlStr.lastIndexOf("\?");urlStr = urlStr.substring(index+1,urlStr.length);console.log(urlStr);md5Str = urlStr+dateStr; //url参数和data字符串相加拼接console.log(md5Str);if(md5Str.indexOf("&")!=-1){md5Str= md5Str.split("&"); //分割成数组排序md5Str = md5Str.sort();md5Str = md5Str.join("&");//拼接成字符串用&连接console.log(md5Str);md5Str = md5Str+"&key="+key;sign= md5Libs.md5(md5Str).toUpperCase();}else{md5Str = md5Str+"&key="+key;sign= md5Libs.md5(md5Str).toUpperCase();}} console.log("sign="+sign);

完整代码为:

import md5Libs from "../uview-ui/libs/function/md5.js";
const baseUrl = '';//url域名这里省略let Token = uni.getStorageSync("Token")?uni.getStorageSync("Token") :"";
const request = (url = '', date = {}, type = 'POST', header = {
}) => {return new Promise((resolve, reject) => {let result = Object.entries(date);  //data参数对象转数组console.log(result);let dateStr = ""for(var i=0;i<result.length;i++){console.log(result[i]);if(result.length>1){dateStr += "&" + result[i][0] +"="+result[i][1];}else{dateStr = "&" + result[i][0] +"="+result[i][1]}}let urlStr = url;let md5Str = "";let key = "1^)(^*^$$#$%!@#$!@#$%";let sign = "";if(urlStr.indexOf("?")!=-1){  //url参数截取let index = urlStr.lastIndexOf("\?");urlStr = urlStr.substring(index+1,urlStr.length);console.log(urlStr);md5Str = urlStr+dateStr; //url参数和data字符串相加拼接console.log(md5Str);if(md5Str.indexOf("&")!=-1){md5Str= md5Str.split("&"); //分割成数组排序md5Str = md5Str.sort();md5Str = md5Str.join("&");//拼接成字符串用&连接console.log(md5Str);md5Str = md5Str+"&key=1^)(^*^$$#$%!@#$!@#$%";sign= md5Libs.md5(md5Str).toUpperCase();}else{md5Str = md5Str+"&key=1^)(^*^$$#$%!@#$!@#$%";sign= md5Libs.md5(md5Str).toUpperCase();}} console.log("sign="+sign);uni.request({method: type,url: baseUrl + url + '&sign='+sign,data: date,header: {"Token":Token},dataType: 'json',         }).then((response) => {setTimeout(function() {uni.hideLoading();}, 200);let [error, res] = response;        resolve(res.data);}).catch(error => {let [err, res] = error;reject(err)})});
}export default request;

效果为:

然后微信支付这里有个可以测试的  测试加密是否正确

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=20_1

把参数填进去,生成的sign一样就说明正确

uniapp封装md5请求加密相关推荐

  1. uniapp 封装网络请求

    文章目录 一.前端 1. 封装网络请求 2. 封装模块请求方法 二.后端 2.1. 返回对象 2.2. 热搜接口 三.微信模拟请求 3.1. Network 3.2. Console 一.前端 1. ...

  2. 前端:uniapp封装网络请求笔记

    uniapp作为开发移动端的前端框架,目前国内是非常流行的,使用HbuilderX开发工具基于uniapp框架开发的系统可以方便的转换为小程序.APP等移动端程序,大大降低了移动开发的成本.网络请求更 ...

  3. uniapp封装网络请求_八张图带你走进“通过一个完美请求封装一个网络模块”

    本文提供视频课程讲解,需要的小伙伴可以点赞+私信''网络模块''前往领取 学习大纲 1.网络模块在应用中的地位 1.1当今占统治地位的网络组件 OKHttp OkHttp 是一个相对成熟的解决方案,据 ...

  4. uniapp封装ajax请求

    module.exports = { config: function (name) { var info = null; if (name) { var name2 = name.split(&qu ...

  5. Uni-app 实现md5加密

    写下这篇文章,记录自己走过的坑 第一次尝试:参照博客uniapp使用md5_清雨小竹的博客-CSDN博客_uniapp md5 引入md5.js后,在main.js中import后,无法使用md5.h ...

  6. 一、uniapp项目(封装异步请求、moment.js时间处理、封装手势滑动组件、下载图片到本地)

    一.封装异步请求: 1. 为什么要封装? 2. 封装的思路 export default (params) => {// 显示加载中uni.showLoading({title: "加 ...

  7. uniapp封装请求的方法(luch-request插件使用)

    1.安装luch-request npm i luch-request -S 2.设置根地址 新建一个baseUrl目录 ,设置一个url.js //基础Api const BASE_API=&quo ...

  8. php封装一个加密算法,PHP封装的非对称加密RSA算法示例

    本文实例讲述了PHP封装的非对称加密RSA算法.分享给大家供大家参考,具体如下: 将php的openssl扩展中的非对称加密函数封装成一个Rsa类. 需要注意的是,在windows上,需要打开open ...

  9. uniapp封装方法

    uniapp封装方法 参考:https://www.cnblogs.com/gqx-html/p/10967570.html 根据报错和实际情况作了一些修改 1.环境配置 common文件夹下新建co ...

最新文章

  1. 用它调试线上 bug,真得劲 | webconsole
  2. [开发工具]JBuilder2008已经发布
  3. 遇到虚拟系统内存问题怎么办?Hypervisor帮你除bug
  4. 列表推导式与生成表达式的区别
  5. xml与java对象转换 -- XStreamAlias
  6. 剑指offer---用两个栈实现队列
  7. LeetCode 257. Binary Tree Paths (二叉树路径)
  8. RabbitMQ的问题
  9. php中curl的用法
  10. 瑞友杯虚拟化征文---瑞友天翼应用虚拟化之实战演示
  11. python爬虫实例
  12. matlab7.0 win10安装报错,win10系统安装Matlab7.0后出现Runtime Error警告窗口的技巧介绍...
  13. jq vue js json转字符串 字符串转json
  14. 卸载office 2016 报错:错误1321
  15. 自动驾驶公司如何打造产品市场体系
  16. 【css】让img图片居中显示
  17. 骨传导式耳机推荐,2021骨传导耳机排行榜
  18. 最新版项目部署到腾讯云超详细教学
  19. 软件测试基础-Web前端(二)
  20. 再现地表最强屏幕,三星Note 9破11项纪录称皇

热门文章

  1. 基于java的在线考试系统源码
  2. 计算机启动硬盘自检,硬盘自检怎么关闭-电脑启动时硬盘自检的解决方法 - 河东软件园...
  3. [时态]七、时态总结
  4. 基于MATLAB的图像拼接技术
  5. vue遇到ie兼容问题如何处理_详解vue 兼容IE报错解决方案
  6. 防爆等级Exd II BT4含义介绍
  7. [综]Review of bike-sharing system studies using bibliometrics method
  8. php即时聊天的框架_workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)...
  9. VR全景+汽车,打造汽车销售新模式
  10. 读书笔记之《从优秀到卓越》