【修复】移动端小程序/APP微信登录授权失败解决办法

admin 发布于 BUG提交 2022-02-10 20:27:06

移动端小程序/APP微信登录授权失败,错误提示如下图所示:

attachmentId-225

原因是微信官方近期更新了微信登录接口,获取会员的头像和昵称等都发生了改变,如发现上述问题可以参考下面办法做修复

修改代码如下:

1、打开pages/login/login.js 文件 整体替换function unilogin(that, params) 函数

/**
 * UniAPP统一登录接口
 * 兼容APP微信登录/小程序登录/QQ登录
 * @param {Object} that
 * @param {Object} params
 */
function unilogin(that, params) {

  // 操作系统版本
  let system = Math.floor(parseFloat(uni.getSystemInfoSync().system))
  if (params.logintype == 'apple' && system < 13) {
    uni.showModal({
      title: '提示',
      content: 'iOS13及以上系统版本才支持苹果登录',
      showCancel: false
    })
    return
  }

  // #ifdef MP-WEIXIN
  uni.login({
    success(res) {
      params.code = res.code
    }
  })
  uni.getUserProfile({
    desc: '同步您的头像和昵称',
    success(res) {
      if (res.errMsg.indexOf("getUserProfile:ok") > -1) {
        Object.assign(params, {
          portrait: res.userInfo.avatarUrl,
          nickname: res.userInfo.nickName,
          scene: 'weixinmp'
        })
      login(params)
    } else if (res.errMsg) {
      uni.showModal({
      title: '提示',
      content: res.errMsg,
      showCancel: false
      })
    }
    }
  })
  // #endif

  // # ifndef MP-WEIXIN
  uni.login({
    provider: params.logintype,
    success() {
      uni.getUserInfo({
        provider: params.logintype,
        lang: 'zh_CN',
        success(res) {
          let userInfo = res.userInfo
          Object.assign(params, {
            unionid: userInfo.unionId ? userInfo.unionId : (userInfo.openId ? userInfo.openId : ''),
            openid: userInfo.openId ? userInfo.openId : '',
            portrait: userInfo.avatarUrl,
            nickname: userInfo.fullName ? (userInfo.fullName.familyName + userInfo.fullName
					.givenName) : userInfo.nickName
          })
          login(params)
        },
        fail(res) {
          uni.showModal({
             title: '提示',
             content: res.errMsg,
             showCancel: false
          })
        }
      })
    }
  })
  // #endif
}

2、打开服务端common\plugins\connect\weixinmp\weixinmp.plugin.php 文件, 修改 public function getUserInfo($response = null) 函数

public function getUserInfo($response = null) 
{
  return $response;
}

修改为:

public function getUserInfo($response = null)
{
  // 头像和昵称已在小程序端[getUserProfile]获取到
  if($this->params->portrait) {
    $response->portrait = $this->params->portrait;
  }
  if($this->params->nickname) {
    $response->nickname = $this->params->nickname;
  }
  return $response;
}
最后编辑于 2023-03-11 21:12:49
1 1158

回复(1)

沙发
此办法可以解决APP端下微信登录,未授权过无法登录的问题
发布于 2022-02-13 20:45:33
回复
Re :

admin 这家伙什么都没留下

  • 回答

    97
  • 发布

    86
  • 经验

    6430

内容精选

联系我们

  • 微信官网

    关注公众号

    系统更新,推送提醒
  • 开发交流群

    技术交流Q群

    安装使用,开发交流

垂询热线:18978189162