之前未绑定微信开放平台,没有UnionID,后续又绑定时,存在的问题:
1. 老用户登录后不识别而是新建账户,再次退出重登又成功以老账号登录
小程序绑定微信开放平台后,老用户再次登录会携带UnionID,但老用户在WechatUser表中无UnionID,导致未查询到对应值,$userInfo不会被赋值,此时没有分支来继续处理此种情况了,直接触发新建用户,因此需要将根据openid获取用户信息的备选命令单独出去,作$userInfo仍为空的后续处理。(后续老用户同步更新了UnionId,所以退出重登又能成功登录老账号)
crmeb\app\services\wechat\WechatUserServices.php Line 322 修改
if (!$userInfo) {
if (isset($wechatInfo['unionid']) && $wechatInfo['unionid']) {
$uid = $this->dao->value(['unionid' => $wechatInfo['unionid'], 'is_del' => 0], 'uid');
file_put_contents('test.log', print_r(json_encode($uid ).'288888', true)."\n", FILE_APPEND);
if ($uid) {
$userInfo = $userServices->getOne(['uid' => $uid, 'is_del' => 0]);
}
}
}
if (!$userInfo){
//原本在上方代码块的else里,只要有UnionID,即便$userInfo为null也不会再执行,所以单拎出来
$userInfo = $this->getAuthUserInfo($openid, $userType);
}
2. 用户拥有UnionID后每次重登会初始化WechatUser表中的Nickname
原因为,CacheService没有存Nickname,可能是我升级遗留的问题,每次登录获取不到WechatUser表中的Nickname会重新赋予随机名称wx******
crmeb\app\services\wechat\RoutineServices.php Line 76 新增
$routineInfo['nickname'] = app()->make(WechatUserServices::class)->getWechatUserInfo(['openid' => $openid, 'is_del' => 0])['nickname'];
