
概述
在开发微信小程序的时候,不免要对接小程序的API接口,大多数不涉及敏感信息的都可以使用明文传输返回,但是有些接口就必须遵循安全鉴权模式,虽然这样比较安全,但是对于开发来讲确实是有难度的,我们需要对原API的请求内容加密与签名,同时API的回包内容需要开发者验签与解密。
这篇文章就给大家介绍如何开启API安全,已经如何使用我封装的方法,通过微信物流服务接口的示例,让大家能快捷的实用API加密接口。
签名与验签
平台支持对接口的请求内容和响应内容进行 AES256/SM4 加密(资源上传类API暂不支持加密),加密后,在网络上传输的接口报文内容将会由明文内容变为密文内容,可以大幅提升接口内容传输的安全性。 接口数据加密与签名,可以在接口数据泄露的情况下,确保接口内容保密且不被篡改。 开发者应先加密请求数据,然后对密文签名。
上面的介绍和图示写了好像也不明白是什么意思对吧,下面就跟着我的步骤来给大家一步步的剖析吧。
一、开启API安全
1.在小程序后台,管理->开发管理->API安全,点击修改

2.配置API对称秘钥,使用随机生成即可,生成之后,自己在你常用的文档中做好备份记录

3.API非对称秘钥
也可以随机生成秘钥对,但是不要复制上面生成的新秘钥,这个是PUBLIC公共秘钥,我们要点击下面的"下载私钥" 下载下来,检查一下前缀是"RSA PRIVATE KEY",这里面的代码才是我们需要的私钥
点击"确认",会返回到刚刚的开发管理页面,可以看到不同秘钥类型有对应的编号,这个也要对应的存下来,API签名也会用到的。
保存好设置的API安全的编号及秘钥后,这样准备工作就做好了,来看一下如何使用我的插件调用API加密接口的。
二、使用xxm-wx-crypto加密与签名插件
1.下载xxm-wx-crypto插件
插件地址:ext.dcloud.net.cn/plugin?id=2...
2.插件参数配置
下载插件到项目,在unicloud -> cloudfunctions -> common 目录下会新增xxm-wx-crypto公共模块,修改目录下的config.js,设置你自己小程序后台对称密钥和非对称秘钥。
在上面API安全中,我们已经保存了秘钥,配置如下: 注意: 该插件是基于uni-id的,所以在插件的config.js中直接读取的公共模块"uni-config-center"内的mp-weixin的appid和secret,如果你不是基于uni-id的unicloud云开发项目,那么你只需要将appid和secret放到config.js中即可,如下代码所示:
javascript
//基于uni-id可直接读取appid和secret
const configCenter = require("uni-config-center/uni-id/config.json")
const {
appid,
appsecret: secret
} = configCenter['mp-weixin']['oauth']['weixin'];
//非uni-id可直接设置
const appid="wx30f1d3a4187cf93253a";
const secret="87a0ee0dc159db5f21b2f6b307a273f3abe";
3.数据初始化
该项目依赖于插件"xxm-wx-mp-token"用于存储微信小程序token的方法,所以需要按照下面的步骤进行初始化,如果项目中之前已经安装过插件"xxm-wx-mp-token",那么就可以直接忽略这一步;
在uniCloud -> database内有wx-access-token.schema.json(单击右键上传schema)、wx-access-token.init_data.json(初始化云数据数据);
三、在项目中应用
插件已经安装完成了,我们就使用微信小程序"同城配送"API加密接口为例,来演示一下这个插件的应用。
1.引入xxm-wx-crypto公共模块
在需要的云函数/云对象文件夹上,单击右键"管理公共模块或扩展库依赖",选择项目下的公共模块,勾选"xxm-wx-crypto"公共模块;
2.导入公共模块
在你的cloudfunctions云函数/云对象内部,导入公共模块"xxm-wx-crypto"内的encryption方法
javascript
const { encryption } = require("xxm-wx-crypto");
3.查询门店接口
以微信同城配送加密API接口为例,调用同城中查询门店接口
javascript
async demoFn() {
return await encryption({
url_path: "https://api.weixin.qq.com/cgi-bin/express/intracity/querystore"
});
}
输出结果:
javascript
{
"errcode": 0,
"errmsg": "ok",
"appid": "wx3f17cf93d3a4823a",
"store_list": [{
"wx_store_id": "4000000000017626017",
"out_store_id": "",
"city_id": 370100,
"address_info": {
"province": "山东省",
"city": "济南市",
"area": "历下区",
"street": "舜华路街道",
"house": "工业南路57号",
"lat": 36.685902,
"lng": 117.128315,
"phone": "***"
},
"order_pattern": 1,
"service_trans_prefer": ""
}],
"_n": "83c77a542ce4be19d4b319ec2edcc453",
"_appid": "wx3f17cf93d3a4823a",
"_timestamp": 1755578704
}
总结
看着文档非常复杂,其实按照步骤,配合插件很容易就可以实现调用微信加密API接口了,大家可以下载插件源码研究一下如何实现加密与解密的,如果发现插件有优化的地方,也可以给我评论留言哈,感谢各位的观看。