整个流程图
在网上查了很多,但看到有人用javascript前端做腾讯AI开放平台,生成签名的,所以闲着就自己弄了一下。实现的流程是和官方的实例是一样的,不过官方只给了PHP和Pythonr的方式。
大致的流程是:字典排序 -> 拼接URL键值对(value部分需要URL编码) -> 拼接app_key -> MD5运算 -> 转换大写
字典排序:《javascript实现PHP字典排序ksort》
拼接URL键值对:
// 拼按URL键值对
Object.keys(aa).forEach((key, i) => {
if (aa[key] !== ''){
bb += key + '=' + encodeURIComponent(aa[key]) + '&'
}
});
拼接app_key:
// 拼接app_key
let cc = `${bb}app_key=${config.tencentKey}`
MD5运算:
const MD5 = require("../../static/javascripts/md5");
// MD5运算
let dd = MD5(cc)
// 转换大写
// 转换大写
let sign = dd.toUpperCase()
最后,得出sign合法签名。这样就可以请求腾讯API开放平台上的API。
【注意:】
如果使用身份证OCR接口,image字段是的base64的时候,格式问题(不需要前面data:image/jpg;base64,)。如果使用微信小程序,可以下得到base64格式:
wx.chooseImage({
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: function (res) {
wx.getFileSystemManager().readFile({
filePath: res.tempFilePaths[0], //选择图片返回的相对路径
encoding: 'base64', //编码格式
success: res => { //成功的回调
console.log('data:image/png;base64,' + res.data)
}
})
}
})
其他方法:
/**
* JS生成随机字符串
* @param {Number} len 字节长度
*/
export function randomString(len) {
len = len || 32;
var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
var maxPos = $chars.length;
var pwd = '';
for (var i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。