* @time 2019.5.11 */ public static function syncWeixinUser($merchantId, $nextOpenId = '') { set_time_limit(0); $merchant = xhMerchantService::getById($merchantId); //一次拉取调用最多拉取10000个关注者的OpenID $result = weixinUtil::getSubscribeUserList($merchant, $nextOpenId); $total = isset($result['total']) ? $result['total'] : 0; $next_openid = isset($result['next_openid']) ? $result['next_openid'] : ''; $count = isset($result['count']) ? $result['count'] : 0; $openIdList = isset($result['data']['openid']) ? $result['data']['openid'] : []; if ($count == 0) { return ['code' => 'A0001', 'msg' => '完成更新', 'data' => ['total' => $total]]; } $total = count($openIdList); $totalPage = $total > 100 ? ceil($total / 100) : 1; $userSource = Yii::$app->dict->getValue('userSourceGetId', 'official'); $source = $userSource['name']; for ($m = 1; $m <= $totalPage; $m++) { $offset = ($m - 1) * 100; $subIdList = array_slice($openIdList, $offset, 100); $info = weixinUtil::batchGetUserInfo($merchant, $subIdList); if (empty($info) || isset($info['user_info_list']) == false || empty($info['user_info_list'])) { continue; } $user_info_list = $info['user_info_list']; foreach ($user_info_list as $val) { $val['isFull'] = 1; $val['unionId'] = $val['unionid']; $val['headImgUrl'] = $val['headimgurl']; $val['openId'] = $val['openid']; $val['nickName'] = $val['nickname']; $val['merchantId'] = $merchantId; self::replaceUser($val, $source, $merchantId); } } return ['code' => 'A0001', 'msg' => '完成更新', 'data' => ['total' => $total]]; } /** * 更新用户的访问时间 */ public static function updateVisitTime($merchantId, $userId) { $date = date("Ymd"); if (empty($userId)) { return false; } //每5分钟更新一次访问时间 $key = 'UserVisitTime_' . $date . '_' . $merchantId . '_' . $userId; $respond = Yii::$app->redis->executeCommand('GET', [$key]); //每过5分钟更新访问时间 if (empty($respond)) { Yii::$app->redis->executeCommand('SET', [$key, $date]); Yii::$app->redis->executeCommand('EXPIRE', [$key, 300]); $time = time(); self::updateById($userId, ['visitTime' => $time]); } } /** * 将微信和小程序获取的用户信息转成可以保存的用户信息 */ public static function switchUserInfo($info, $source) { $openId = ''; if (isset($info['openid']) && !empty($info['openid'])) { $openId = $info['openid']; unset($info['openId']); } if (isset($info['openId']) && !empty($info['openId'])) { $openId = $info['openId']; unset($info['openId']); } if (!empty($openId)) { $userSource = self::$userSourceId; switch ($source) { case $userSource['mini']['name']: $info['miniOpenId'] = $openId; break; case $userSource['official']['name']: $info['openId'] = $openId; break; default: throw new \Exception('未知来源的用户'); } } if (isset($info['nickname'])) { $info['userName'] = $info['nickname']; } if (isset($info['nickName'])) { $info['userName'] = $info['nickName']; } if (isset($info['unionid'])) { $info['unionId'] = $info['unionid']; } if (isset($info['unionId'])) { $info['unionId'] = $info['unionId']; } if (isset($info['headimgurl'])) { $info['headImgUrl'] = $info['headimgurl']; } if (isset($info['avatarUrl'])) { $info['headImgUrl'] = $info['avatarUrl']; } if (isset($info['subscribe_time'])) { $info['subscribeTime'] = $info['subscribe_time']; } if (isset($info['subscribe'])) { $info['subscribe'] = $info['subscribe']; } return $info; } //升级成为会员,并更新用户相关信息 shish 2019.9.7 public static function upgradeToMember($userId, $merchantId, $data = []) { self::updateById($userId, $data); /**会员数+1**/ MerchantAssetService::addMemberNum($merchantId); } //取消关注 shish 2019.9.8 public static function unFocus($userId, $merchantId) { self::updateById($userId, ['subscribe' => 0, 'hasSubscribe' => 1]); /**商家粉丝减少**/ MerchantAssetClass::reduceFans($merchantId); } //批量获取用户信息,图片等信息处理好了 shish 2019.11.28 public static function getUserByIds($ids) { return UserClass::getUserByIds($ids); } //验证支付密码是否正确 shish 2019.12.6 public static function validPayPassword($password, $user) { if (isset($user['payPassword']) == false || empty($user['payPassword'])) { util::fail('您还没有设置支付密码'); } $payPassword = $user['payPassword']; if (password_verify($password, $payPassword) == false) { util::fail('密码错误'); } } //验证用户权限 public static function valid($info, $merchantId) { return UserClass::valid($info, $merchantId); } //根据消费次数和有没领优惠券来判断是不是新人 public static function newUser($userInfo) { return UserClass::newUser($userInfo); } //添加新客户 shish 2020.1.10 public static function addUser($data) { //merchantId $source $realName $member $growth $balance $mobile //必传参数 validate::easyCheck(['merchantId', 'mobile'], $data); $merchantId = $data['merchantId']; $source = isset($data['source']) ? $data['source'] : 'official'; $mobile = $data['mobile']; $realName = isset($data['realName']) ? $data['realName'] : $mobile; $member = isset($data['member']) ? $data['member'] : -1; $balance = isset($data['balance']) ? $data['balance'] : 0; $originalInfo = []; $originalInfo['merchantId'] = $merchantId; $originalInfo['mobile'] = $mobile; $originalInfo['realName'] = $realName; $user = UserService::replaceUser($originalInfo, $source, $merchantId); $extend = MerchantExtendService::getByMerchantId($merchantId); //等级 $growth = 0; if ($member > 0) { $gradeList = xhMerchantExtendService::getGradeList($extend, 'desc'); $growth = isset($gradeList[$member]['growth']) ? $gradeList[$member]['growth'] : 0; } //余额成长值更新 $userId = $user['id']; $data = []; $data['growth'] = $growth; $data['balance'] = $balance > 0 ? $balance : 0; UserAssetService::updateByUserId($userId, $data); //会员升级 UserIntegralService::increaseToUpgrade(0, $growth, 0, $userId, $merchantId, $extend); } }