PHP实现微信小程序用户授权的工具类示例(3)

保存用户信息的方法

 /**
   * 保存用户信息的方法
   * @param $wxaUserData
   * @param $regFromGh 表示是否从公众号进行注册
   */
  public function regWxaUser($wxaUserData,$regFromGh = false)
  {
    $value = $wxaUserData['unionId'];
    $key = getCacheKey('redis_key.cache_key.zset_list.lock') . $value;
    $newExpire = RedisHelper::getLock($key);
    $data = $this->storeWxaUser($wxaUserData,$regFromGh);
    RedisHelper::releaseLock($key, $newExpire);
    return $data;
  }
  
  /**
   * 保存信息
   * @param $wxaUserData
   * @return mixed
   */
  public function storeWxaUser($wxaUserData,$regFromGh = false)
  {
    $wxUnionId = $wxaUserData['unionId'];
    if (!$user = $this->getByWxUnionId($wxUnionId)) {
      $getAccountDataStartTime = time();
      //这里是因为需要统一账户获取uid,所以这个是用户中心的接口,如果没有这个流程,则直接使用数据
      if($accountData = AccountCenterHelper::regWxaUser($wxaUserData)){
        $getAccountDataEndTime = time();
        $accountRegTime = $getAccountDataEndTime - $getAccountDataStartTime;
        error_log("reg user spend time is ===================>" . $accountRegTime);
        $user = [
          'uid' => $accountData['uid'],
          'user_name' => $accountData['user_name'],
          'nick_name' => $wxaUserData['nickName'],
          'sex' => $accountData['sex'],
          'wx_union_id' => $accountData['wx_union_id'],
          'avatar' => isset($accountData['avatar'])?$accountData['avatar']:"",
          'from_appid' => $accountData['from_appid'],
          'province' => $wxaUserData['province'],
          'city' => $wxaUserData['city'],
          'country' => $wxaUserData['country'],
          'openid' => $wxaUserData['openId'],
          'wx_header' => isset($wxaUserData['avatarUrl'])?$wxaUserData['avatarUrl']:"",
          'gh_openid' => $regFromGh?$wxaUserData['openId']:"",
        ];
        error_log("insert data=============>" . json_encode($user));
        $user = $this->store($user);
        $regApiUserEndTime = time();
        error_log(" reg api user spend time================>" . ($regApiUserEndTime - $getAccountDataEndTime));
        error_log(" after insert data=============>" . json_encode($user));
      }
    }else{
      if(!$user['wx_header']){
        $updateData = [
          'id' => $user['id'],
          'uid' => $user['uid'],
          'wx_header' => $wxaUserData['avatarUrl'],
        ];
        $this->update($updateData);
      }
      //同步用户的openid
      if($wxaUserData['openId'] != $user['openid']){
        $updateData = [
          'id' => $user['id'],
          'uid' => $user['uid'],
          'openid' => $wxaUserData['openId'],
        ];
        $this->update($updateData);
      }
    }
    $data['uid'] = $user['uid'];
    $data['unionid'] = $wxUnionId;
    return $data;
  }

根据unionid获取用户信息