今天在尝试的时候发现点击获取openid时,获取失败,查了很多可能的原因,包括未开通云开发、未上传部署云函数、未指定环境、未配置环境ID、以及未安装sdk等,都没有发现问题。

可以看到我的云开发是开通了的,而且云函数也已经部署成功了。另外我环境也是设置好的。

看到有人说每个云函数中都必须要有我下图中框出来的这些文件,可以看到我也已经是添加了的,但依然没有办法获取openid。

添加方法:这里需要右击云函数login文件夹,在终端中打开,然后输入命令npm install --save wx-server-sdk@latest进行安装就好了,其他云函数也是一样的。

后来通过控制台的云函数调用日志发现,函数调用成功,但返回结果为空,于是查到了Zero Ice的一篇文章(传送门),发现是异步的问题。

于是按照作者的方法,修改了“index.js”文件中的代码,增加了async和await,成功解决了openid调用失败的问题。

代码如下:

exports.main = async (event, context) => {
  console.log(event)
  console.log(context)

  // 可执行其他自定义逻辑
  // console.log 的内容可以在云开发云函数调用日志查看

  // 获取 WX Context (微信调用上下文),包括 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件)
  const wxContext = await cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

更多推荐

微信小程序开发记录2——获取openid失败