代码片段
exports.main = async (event, context) => { return new Promise((resolve, reject) => { let code = event.code; let iv = event.iv; let encryptedData = event.encryptedData; console.log( typeof (encryptedData), 'encryptedData' ) axios.get( 'https://api.weixin.qq.com/sns/jscode2session?appid=wx374aa024a19a8946&secret=2ad8f6e664e66dbecd9fe3116911f633&js_code=' + code + '&grant_type=authorization_code' ) .then(res => { let session_key = res.session_key; let openid = res.openid let pc = new WXBizDataCrypt( 'wx374aa024a19a8946' , session_key) let data = pc.decryptData(encryptedData, iv)//就是这句报错 resolve(data) }) . catch (err => { console.log(err, 'err' ) reject(err) }) }) } |
- 当前 Bug 的表现(可附上截图)
执行到这里的时候总是报错,提示参数必须时字符串,数组,Buffer,因为这个加密数据本身就是一个字符串,解密用到的构造函数也是官方提供的,不知道为啥还会报错
- 预期表现
希望知道这里为啥会报错或者有其他的解密方法告知也可以
- 复现路径
- 提供一个最简复现 Demo
axios获取到的数据格式是多层的,session_key是包在data层下,let session_key = res.session_key 写成 let session_key = res.data.session_key就可以了。
菜鸟请教一下,我试了上面的代码,得到
Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud function service error code -504002, error message ReferenceError: axios is not defined
如果我加上const axios = require('axios'),又得到
Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud function service error code -504002, error message Cannot find module 'axios'; at cloud.callFunction api;
请问如何在云函数里正确引入axios?
可以在本地的云函数目录下运行 npm install axios,然后再在开发工具中上传即可
我也是一样的情况,刚解决,
我用的request模块获取的session_key,返回的结果需要做JSON.parse,否则是字符串形式,let session_key = res.session_key;会导致session_key为undefine,所以报错,建议你检查返回结果的类型,及session_key取值是否正确
有完整的例子吗, 现在需要获取用户信息,手机号等通过云函数加解密
在let session_key = res.session_key;前加个 res=JSON.parse(res) 试试,还有你的secert暴露在代码里了,不知道是不是真的secert