| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | namespace app\controller\api; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use app\exception\RepositoryException; | 
					
						
							|  |  |  | use app\model\Account; | 
					
						
							| 
									
										
										
										
											2022-02-08 16:38:36 +08:00
										 |  |  | use app\model\Business; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | use app\repository\AccountRepository; | 
					
						
							| 
									
										
										
										
											2021-12-02 15:51:47 +08:00
										 |  |  | use app\repository\BusinessRepository; | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  | use app\repository\CouponRepository; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | use app\service\File; | 
					
						
							|  |  |  | use app\service\Jwt; | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  | use app\service\Tool; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | use app\service\wx\WechatApplets; | 
					
						
							|  |  |  | use app\validate\User as UserValidate; | 
					
						
							|  |  |  | use EasyWeChat\Kernel\Exceptions\InvalidConfigException; | 
					
						
							|  |  |  | use Exception; | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  | use think\exception\ValidateException; | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  | use think\facade\Config; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | use think\response\Json; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-29 13:59:29 +08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * 用户相关 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Class User | 
					
						
							|  |  |  |  * @package app\controller\api | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | class User extends Base | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     protected $noNeedLogin = [ | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |         'login','checkNewAccount',"decodeMobile" | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |     ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 登录  成功返回token及用户信息 | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return Json | 
					
						
							|  |  |  |      * @throws InvalidConfigException | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function login(): Json | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |         $params = [ | 
					
						
							|  |  |  |             'code'          => $this->request->param('code', ''), | 
					
						
							| 
									
										
										
										
											2022-01-17 10:56:07 +08:00
										 |  |  |             'nick_name'     => filterEmoji($this->request->param('nickName', '')), | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |             'avatar_url'    => $this->request->param('avatarUrl', ''), | 
					
						
							| 
									
										
										
										
											2021-12-15 15:04:20 +08:00
										 |  |  |             'gender'        => $this->request->param('gender/d', 0), | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |             'real_name'     => $this->request->param('real_name/s', '',"trim"), | 
					
						
							|  |  |  |             'mobile'        => $this->request->param('mobile/s', ''), | 
					
						
							| 
									
										
										
										
											2021-12-16 10:34:06 +08:00
										 |  |  |             'lat'           => $this->request->param('lat/f', 0), | 
					
						
							|  |  |  |             'lng'           => $this->request->param('lng/f', 0), | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |         ]; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $validate = new UserValidate(); | 
					
						
							|  |  |  |         if (!$validate->scene('wx_applets')->check($params)) { | 
					
						
							|  |  |  |             return $this->json(4000, $validate->getError()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $minApp = WechatApplets::getInstance(); | 
					
						
							|  |  |  |         $jsCode = $params['code']; | 
					
						
							|  |  |  |         $wxUser = $minApp->auth->session($jsCode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (isset($wxUser['errcode']) && $wxUser['errcode'] != 0) { | 
					
						
							|  |  |  |             return $this->json(4001, $wxUser['errcode'].';'.$wxUser['errmsg'] ?? '登录失败'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         // $wxUser success has [session_key, openid, unionid]
 | 
					
						
							|  |  |  |         // 有效期2小时
 | 
					
						
							|  |  |  |         $wxUser['expire_time'] = time() + 7200; | 
					
						
							|  |  |  |         $wxUser['session_key'] = $wxUser['session_key'] ?? ''; | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |         $openID                = $wxUser['openid'] ?? ''; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (empty($openID)) { | 
					
						
							|  |  |  |             return $this->json(4002, '登录失败'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try { | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |             $repo       = AccountRepository::getInstance(); | 
					
						
							|  |  |  |             $account    = $repo->findByOpenID($openID); | 
					
						
							|  |  |  |             $nowDate    = date('Y-m-d H:i:s'); | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if (!$account) { | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |                 if(empty($params['real_name'])){ | 
					
						
							|  |  |  |                     return $this->json(4001, '真实姓名不能为空'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 if(!is_mobile($params['mobile'])){ | 
					
						
							|  |  |  |                     return $this->json(4001, '手机号格式错误'); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |                 // 自动注册
 | 
					
						
							|  |  |  |                 $account = $repo->create([ | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |                     'user_code'         => createUuid(), // 用户UUID
 | 
					
						
							|  |  |  |                     'open_id'           => $openID, | 
					
						
							|  |  |  |                     'create_time'       => $nowDate, | 
					
						
							|  |  |  |                     'login_time'        => $nowDate, | 
					
						
							|  |  |  |                     'type'              => Account::type_consumer, // 默认为普通消费者
 | 
					
						
							| 
									
										
										
										
											2022-01-17 10:56:07 +08:00
										 |  |  |                     'nick_name'         => $params['nick_name'] ?: generateDefaultNickName(), | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |                     'avatar_url'        => $params['avatar_url'] ?: Account::DEFAULT_AVATAR, | 
					
						
							|  |  |  |                     'gender'            => $params['gender'], | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |                     'real_name'         => $params['real_name'], | 
					
						
							|  |  |  |                     'mobile'            => $params['mobile'], | 
					
						
							| 
									
										
										
										
											2021-12-15 15:04:20 +08:00
										 |  |  |                     'lat'               => $params['lat'], | 
					
						
							|  |  |  |                     'lng'               => $params['lng'], | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |                 ]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 $updateData     = [ | 
					
						
							| 
									
										
										
										
											2021-12-16 11:18:14 +08:00
										 |  |  |                     'login_time'    => $nowDate, | 
					
						
							|  |  |  |                     'lat'           => empty($account->lat)?$params['lat']   :$account->lat,//如果之前的位置信息是空的
 | 
					
						
							|  |  |  |                     'lng'           => empty($account->lng)?$params['lng']   :$account->lng,//如果之前的位置信息是空的
 | 
					
						
							|  |  |  |                     'mobile'        => (!is_mobile($account->mobile))?$params['mobile']:$account->mobile,//如果之前的电话信息是空的
 | 
					
						
							|  |  |  |                     'real_name'     => empty($account->real_name)?$params['real_name']:$account->real_name,//如果之前的电话信息是空的
 | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |                 ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 // 更新资料
 | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |                 $modifyStringList = ['nick_name', 'avatar_url']; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |                 foreach ($modifyStringList as $modifyKey) { | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |                     if (isset($params[$modifyKey]) && !empty($params[$modifyKey])) { | 
					
						
							|  |  |  |                         $updateData[$modifyKey] = $params[$modifyKey]; | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 $repo->update($updateData, ['id' => $account['id']]); | 
					
						
							|  |  |  |                 $account = $repo->findById($account['id']); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } catch (RepositoryException | Exception $e) { | 
					
						
							|  |  |  |             return $this->json(4003, '登录失败!'.$e->getMessage()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $account = $account->toArray(); | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |         $account['avatar_url'] = File::convertCompleteFileUrl($account['avatar_url']); | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |         $jwtData = [ | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |             'user_id'       => $account['id'], | 
					
						
							|  |  |  |             'user_code'     => $account['user_code'], | 
					
						
							|  |  |  |             'open_id'       => $openID, | 
					
						
							|  |  |  |             'session_key'   => $wxUser['session_key'], | 
					
						
							|  |  |  |             'expire_time'   => $wxUser['expire_time'], | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 16:19:54 +08:00
										 |  |  |         $data   = [ | 
					
						
							|  |  |  |             'avatar'        => File::convertCompleteFileUrl($account['avatar_url']), | 
					
						
							|  |  |  |             'nickName'      => $account['nick_name'], | 
					
						
							|  |  |  |             'token'         => Jwt::generate($jwtData), | 
					
						
							|  |  |  |             'userType'      => $account['type'], | 
					
						
							|  |  |  |             'userTypeDes'   => Account::accountTypeDescList()[$account['type']] ?? '游客', | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  |         ]; | 
					
						
							|  |  |  |         return $this->json(0, 'success', $data); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * 获取个人中心资料 | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getUserCenterInfo() | 
					
						
							| 
									
										
										
										
											2021-11-25 18:54:59 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  |         $accountId = $this->request->user['user_id'] ?? 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $accountRepo    = AccountRepository::getInstance(); | 
					
						
							|  |  |  |             $couponRepo     = CouponRepository::getInstance(); | 
					
						
							| 
									
										
										
										
											2021-12-02 15:51:47 +08:00
										 |  |  |             $busRepo        = BusinessRepository::getInstance(); | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             $account        = $accountRepo->findById($accountId, [], function ($q) { | 
					
						
							|  |  |  |                 return $q->with(['business', 'parent']); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |             if (empty($account)) { | 
					
						
							|  |  |  |                 throw new ValidateException('用户无效!'); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-11-25 18:54:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-23 11:02:00 +08:00
										 |  |  |             if ( in_array($account['type'],[Account::type_business,Account::type_staff]) ) { | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  |                 // 商家用户
 | 
					
						
							|  |  |  |                 if (empty($account['business'])) { | 
					
						
							|  |  |  |                     throw new ValidateException('用户无效!没有相关的商户信息记录'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 $businessRes    = [ | 
					
						
							|  |  |  |                     'avatar'    => File::convertCompleteFileUrl($account['avatar_url']), | 
					
						
							|  |  |  |                     'nickName'  => $account['nick_name'], | 
					
						
							|  |  |  |                     'userType'  => $account['type'], | 
					
						
							|  |  |  |                     'userTypeDes'   => Account::accountTypeDescList()[$account['type']] ?? '游客', | 
					
						
							|  |  |  |                     'couponCount'   => 0, | 
					
						
							|  |  |  |                     'business'      => [ | 
					
						
							|  |  |  |                         'code'          => $account['business']['code'], | 
					
						
							|  |  |  |                         'businessName'  => $account['business']['business_name'], | 
					
						
							|  |  |  |                         'state'         => $account['business']['state'], | 
					
						
							|  |  |  |                         'reason'        => $account['business']['reason'], | 
					
						
							|  |  |  |                         'balance'       => $account['business']['balance'], | 
					
						
							|  |  |  |                         'enable'        => $account['business']['enable'], | 
					
						
							| 
									
										
										
										
											2021-12-21 14:24:05 +08:00
										 |  |  |                         // 商家优惠卷情况统计
 | 
					
						
							|  |  |  |                         'couponCountList'   => $busRepo->getCountBusinessOnShelf($account['business']['code'], 29), | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  |                     ], | 
					
						
							| 
									
										
										
										
											2021-12-17 14:44:05 +08:00
										 |  |  |                     "alertMoney"=>config("wechat.balance"), | 
					
						
							|  |  |  |                     "redPrice"=>CouponRepository::getInstance()->getUserRedPrice( $account['user_code']), | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  |                 ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return $this->json(0, 'success', $businessRes); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 // 用户领取的优惠卷总数量
 | 
					
						
							|  |  |  |                 $couponCount    = $couponRepo->getModel()::getCountByWhere(['consumer_code' => $account['user_code']]); | 
					
						
							|  |  |  |                 $personalRes    = [ | 
					
						
							|  |  |  |                     'avatar'    => File::convertCompleteFileUrl($account['avatar_url']), | 
					
						
							|  |  |  |                     'nickName'  => $account['nick_name'], | 
					
						
							|  |  |  |                     'userType'  => $account['type'], | 
					
						
							|  |  |  |                     'userTypeDes'   => Account::accountTypeDescList()[$account['type']] ?? '游客', | 
					
						
							|  |  |  |                     'couponCount'   => $couponCount, | 
					
						
							| 
									
										
										
										
											2021-12-17 14:44:05 +08:00
										 |  |  |                     "alertMoney"=>config("wechat.balance"), | 
					
						
							|  |  |  |                     "redPrice"=>CouponRepository::getInstance()->getUserRedPrice( $account['user_code']), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  |                 ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-02 15:51:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-23 11:02:00 +08:00
										 |  |  | //                if ($account['type'] == Account::type_staff) {
 | 
					
						
							|  |  |  | //                    // 员工
 | 
					
						
							|  |  |  | //                    $businessCode = $account['parent']['business_code'] ?? '';
 | 
					
						
							|  |  |  | //                    if (!empty($businessCode)) {
 | 
					
						
							|  |  |  | //                        $business = $busRepo->findOneByWhere(['code' => $businessCode]);
 | 
					
						
							|  |  |  | //                        if ($business) {
 | 
					
						
							|  |  |  | //                            $personalRes['business'] = [
 | 
					
						
							|  |  |  | //                                'code'          => $business['code'],
 | 
					
						
							|  |  |  | //                                'businessName'  => $business['business_name'],
 | 
					
						
							|  |  |  | //                                'state'         => $business['state'],
 | 
					
						
							|  |  |  | //                                'reason'        => $business['reason'],
 | 
					
						
							|  |  |  | //                                'balance'       => $business['balance'],
 | 
					
						
							|  |  |  | //                                'enable'        => $business['enable'],
 | 
					
						
							|  |  |  | //                            ];
 | 
					
						
							|  |  |  | //                        }
 | 
					
						
							|  |  |  | //                    }
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //                    $personalRes['parent'] = [];
 | 
					
						
							|  |  |  | //                    if (!empty($account['parent'])) {
 | 
					
						
							|  |  |  | //                        $personalRes['parent'] = [
 | 
					
						
							|  |  |  | //                            'avatar'    => File::convertCompleteFileUrl($account['parent']['avatar_url']),
 | 
					
						
							|  |  |  | //                            'nickName'  => $account['parent']['nick_name'],
 | 
					
						
							|  |  |  | //                            'userType'  => $account['parent']['type'],
 | 
					
						
							|  |  |  | //                            'userTypeDes'   => Account::accountTypeDescList()[$account['parent']['type']] ?? '',
 | 
					
						
							|  |  |  | //                            'couponCount'   => 0,
 | 
					
						
							|  |  |  | //                            'businessCode'  => $account['parent']['business_code'],
 | 
					
						
							|  |  |  | //                        ];
 | 
					
						
							|  |  |  | //                    }
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //                }
 | 
					
						
							| 
									
										
										
										
											2022-02-08 16:38:36 +08:00
										 |  |  |                 $personalRes['business'] =[ | 
					
						
							|  |  |  |                     "state"     =>  Business::state_consumer,//未认证
 | 
					
						
							|  |  |  |                     "reason"    =>  "",//未认证
 | 
					
						
							|  |  |  |                 ]; | 
					
						
							| 
									
										
										
										
											2021-12-23 11:02:00 +08:00
										 |  |  |                 if(!empty($account['business'])) { | 
					
						
							| 
									
										
										
										
											2021-12-02 15:51:47 +08:00
										 |  |  |                     // 商户认证记录
 | 
					
						
							| 
									
										
										
										
											2022-02-08 16:38:36 +08:00
										 |  |  |                     $personalRes['business']["state"]   = $account['business']['state']; | 
					
						
							|  |  |  |                     $personalRes['business']["reason"]  = $account['business']['reason']; | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return $this->json(0, 'success', $personalRes); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } catch (ValidateException $e) { | 
					
						
							|  |  |  |             return $this->json(4001, $e->getError()); | 
					
						
							|  |  |  |         } catch (Exception $e) { | 
					
						
							| 
									
										
										
										
											2021-12-21 15:02:38 +08:00
										 |  |  |             return $this->json(5001, '服务器繁忙!获取用户个人信息失败'); | 
					
						
							| 
									
										
										
										
											2021-12-01 14:56:09 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-11-25 18:54:59 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |     //检查是新用户还是老用户
 | 
					
						
							|  |  |  |     public function checkNewAccount() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         Config::load('extra/wechat', 'wechat'); | 
					
						
							|  |  |  |         $config = config('wechat'); | 
					
						
							|  |  |  |         $code = $this->request->param('code/s'); | 
					
						
							|  |  |  |         $appId = $config["applets_appId"]??'';//appid
 | 
					
						
							|  |  |  |         $appSecret = $config["applets_appSecret"]??'';//appsecret
 | 
					
						
							|  |  |  |         $url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' | 
					
						
							|  |  |  |             . $appId | 
					
						
							|  |  |  |             . '&secret=' | 
					
						
							|  |  |  |             . $appSecret | 
					
						
							|  |  |  |             . '&js_code=' | 
					
						
							|  |  |  |             . $code | 
					
						
							|  |  |  |             . '&grant_type=authorization_code'; | 
					
						
							|  |  |  |         $data = json_decode(Tool::httpRequest($url, "get"), true); | 
					
						
							| 
									
										
										
										
											2021-12-16 11:18:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |         //返回状态
 | 
					
						
							|  |  |  |         if (isset($data["openid"])) { | 
					
						
							|  |  |  |             $account = AccountRepository::getInstance()->findByOpenID($data["openid"]); | 
					
						
							|  |  |  |             if(empty($account)){ | 
					
						
							| 
									
										
										
										
											2021-12-16 11:18:14 +08:00
										 |  |  |                 return $this->json(0, "success",[ | 
					
						
							|  |  |  |                     "showMobile"=>true, | 
					
						
							|  |  |  |                     "showRealName"=>true, | 
					
						
							|  |  |  |                     "session_key"=>$data["session_key"]]); | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-12-16 11:18:14 +08:00
										 |  |  |             return $this->json(0, "success",[ | 
					
						
							|  |  |  |                 "showMobile"=>is_mobile($account->mobile)?false:true, | 
					
						
							|  |  |  |                 "showRealName"=>(!empty($account->real_name))?false:true, | 
					
						
							|  |  |  |                 "session_key"=>$data["session_key"] | 
					
						
							|  |  |  |             ]); | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-12-16 11:18:14 +08:00
										 |  |  |         return $this->json(5001, "获取登录状态失败", ["showMobile"=>true, | 
					
						
							|  |  |  |                 "showRealName"=>true, | 
					
						
							|  |  |  |                 "session_key"=>'']); | 
					
						
							| 
									
										
										
										
											2021-12-14 17:34:27 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 解密手机号 | 
					
						
							|  |  |  |      * */ | 
					
						
							|  |  |  |     public function decodeMobile() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $params    = input('post.'); | 
					
						
							|  |  |  |         $rules = [ | 
					
						
							|  |  |  |             'encryptedData|加密数据'        => 'require', | 
					
						
							|  |  |  |             'iv|IV'                         => 'require', | 
					
						
							|  |  |  |             'session_key|会话标识'          => 'require', | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $validate = $this->validateByApi($params, $rules); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($validate !== true) { | 
					
						
							|  |  |  |             return $validate; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 解密手机相关数据
 | 
					
						
							|  |  |  |         $minApp      = WechatApplets::getInstance(); | 
					
						
							|  |  |  |         $sessionKey  = $params['session_key'] ?? ''; | 
					
						
							|  |  |  |         $decryptData = $minApp->encryptor->decryptData($sessionKey, $params['iv'], $params['encryptedData']); | 
					
						
							|  |  |  |         $phone       = $decryptData['phoneNumber'] ?? ''; // 通过iv和加密数据 解密出手机号
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($phone) { | 
					
						
							|  |  |  |          return $this->json(0,"success",["mobile"=>$phone]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $this->json(5001,"获取手机号失败"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-19 13:40:46 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * 静默登录 | 
					
						
							|  |  |  |      * */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-18 17:57:04 +08:00
										 |  |  | } |