云函数用户数据解密
发布于 6 年前 作者 likong 15658 次浏览 来自 问答

代码片段

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
3 回复

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?

我也是一样的情况,刚解决,

我用的request模块获取的session_key,返回的结果需要做JSON.parse,否则是字符串形式,let session_key = res.session_key;会导致session_key为undefine,所以报错,建议你检查返回结果的类型,及session_key取值是否正确

回到顶部