收藏
回答

云函数用户数据解密

问题模块 框架类型 问题类型 终端类型 AppID 基础库版本
云开发 小程序 Bug 工具 wx374aa024a19a8946 2.2.5

代码片段

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


最后一次编辑于  2018-09-11  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

3 个回答

  • 异想天开
    异想天开
    2018-09-24

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


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

    2018-09-24
    赞同
    回复 2
    • ✨大灰狼✨
      ✨大灰狼✨
      2018-09-26

      有完整的例子吗, 现在需要获取用户信息,手机号等通过云函数加解密

      2018-09-26
      回复
    • 异想天开
      异想天开
      2018-09-28

      let session_key = res.session_key;前加个 res=JSON.parse(res) 试试,还有你的secert暴露在代码里了,不知道是不是真的secert

      2018-09-28
      回复
  • 李燚
    李燚
    2018-10-28

    菜鸟请教一下,我试了上面的代码,得到

    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?

    2018-10-28
    赞同
    回复 1
    • 异想天开
      异想天开
      2018-10-28

      可以在本地的云函数目录下运行 npm install axios,然后再在开发工具中上传即可

      2018-10-28
      回复
  • 哈枫
    哈枫
    2018-12-19

    axios获取到的数据格式是多层的,session_key是包在data层下,let session_key = res.session_key 写成 let session_key = res.data.session_key就可以了。

    2018-12-19
    赞同
    回复