repository = $repository; //点餐小程序 $this->appid = 'wx10669a2eca032216'; $this->secret = '0e71d5c636fdb9bf1c79c403db70f739'; } public function getUserUnionid(){ $data = $this->request->params(['code','source']); if(!$data['code'] || $data['code'] == '' || $data['code'] =='undefined') { return app('json')->fail("异常操作"); } $appid = 'wx82986c4471ce7efc'; $secret = '4ae3f790d8c5503a22579338504cdb61'; $url = "https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$secret."&js_code=".$data['code']."&grant_type=authorization_code"; $get = curlGet($url); if(!$get){ return app('json')->fail($url); } $get['cache_key'] = md5(time() . $data['code']); try { Cache::set('mp_code_' . $get['cache_key'], $get['session_key'], 86400); }catch (\Exception $exception) { Log::error($exception->getMessage()); } return app('json')->success($get); } public function getPhoneToBind(){ $data = $this->request->params([ 'cache_key', 'iv', 'encryptedData', 'third_user_id', 'source' ]); $session_key = Cache::get('mp_code_' . $data['cache_key']); $appid = $this -> appid; $secret = $this -> secret; if($data['source'] && $data['source'] == 'cxb'){ $appid = env('WECHAT_MP.APPID'); $secret = env('WECHAT_MP.SECRET'); } //解密获取用户信息urldecode $returnCode = $this -> decryptData($session_key,$data['encryptedData'],$data['iv'],$userInfo,$appid); if($returnCode != 0){ return app('json')->fail($returnCode); } $userInfo = json_decode($userInfo,true); if (!$userInfo || !isset($userInfo['purePhoneNumber'])) return app('json')->fail('手机号码获取失败'); $phone = $userInfo['purePhoneNumber']; $repository = app()->make(UserRepository::class); $user = $repository->thirdBinding($phone, false,'MP',$data['third_user_id'],1,"http://". $this->request->host(true));//2222 if($user){ $userRepository = app()->make(UserRepository::class); $userInfo1 = $userRepository->getOne(['uid' => $user['uid']]); //绑定线下充值金额 $unionUsersRepository = app()->make(UnionUsersRepository::class); $orderMerchantRepository = app()->make(OrderMerchantRepository::class); $notBind = $unionUsersRepository->getAllNotBind($data['third_user_id']); if ($notBind) { $orderMerchantRepository->doBindUser($userInfo1, 1); $userAccount = Db::name("UserAccount"); $userAccount -> insert(['type'=>1,'uid'=>$user['uid'],'nickname'=>$notBind['nickname'],'avater'=>$notBind['avatar']]); } $user = $repository->accountByUser($userInfo['purePhoneNumber']); $tokenInfo = $repository->createToken($user); $repository->loginAfter($user); return app('json')->success($repository->returnToken($user, $tokenInfo)); }else{ return app('json')->fail("绑定失败"); } } public function getUser(){ $data = $this->request->params(['unionid','nickname','avatar']); if(!$data['unionid'] || $data['unionid'] == '' || $data['unionid'] =='undefined'){ return app('json')->fail("异常操作"); } $repository = app()->make(UserRepository::class); $result = $repository ->wechatCheck($data['unionid']); if(isset($result['code']) && $result['code'] == 200){ //用户已注册并绑定了手机号码 $user = $repository->accountByUser($result['user']['account']); $tokenInfo = $repository->createToken($user); $repository->loginAfter($user); return app('json')->success($repository->returnToken($user, $tokenInfo)); } else{ try { if($data['avatar'] && $data['avatar'] != ''){ $data['avatar'] = str_replace('"', '', $data['avatar']); } Db::transaction(function () use ($data,$repository) { $unionData = [ 'unionid' => $data['unionid'], 'nickname' => $data['nickname'] ? : time(), 'avatar' => $data['avatar'] ? : 'http://app.bjtdba.com/uploads/def/20201118/5984361a2e00f5407776bcd6eaaae1ce.png', 'is_lock' => 1, 'lock_time' => date('Y-m-d H:i:s'), 'balance' => 0, 'give_money' => 0, 'pension' => 0, 'type' => 1, ]; $unionUsersDao = app()->make(UnionUsersDao::class); $unionUsersRepository = app()->make(UnionUsersRepository::class); $unionUser = $unionUsersRepository->getWhere(['unionid' => $data['unionid']]); if (!$unionUser) { $unionUsersDao->create($unionData); } else { $updateData = [ 'nickname' => $data['nickname'] ? : time(), 'avatar' => $data['avatar'] ? : 'http://app.bjtdba.com/uploads/def/20201118/5984361a2e00f5407776bcd6eaaae1ce.png', 'update_time' => date('Y-m-d H:i:s') ]; $unionUsersDao->update($unionUser->id, $updateData); } }); } catch (\Throwable $e) { Log::info($e->getMessage()); } } return app("json")->fail($result['msg']); } /** * 检验数据的真实性,并且获取解密后的明文. * @param $sessionKey string sessionKey * @param $encryptedData string 加密的用户数据 * @param $iv string 与用户数据一同返回的初始向量 * @param $data string 解密后的原文 * * @return int 成功0,失败返回对应的错误码 */ public function decryptData($sessionKey,$encryptedData, $iv, &$data, $appid) { if (strlen($sessionKey) != 24) { return -41001; } $aesKey=base64_decode($sessionKey); if (strlen($iv) != 24) { return -41002; } $aesIV=base64_decode($iv); $aesCipher=base64_decode($encryptedData); $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV); $dataObj=json_decode( $result ); if( $dataObj == NULL ) { return -41003; } if( $dataObj->watermark->appid != $appid ) { return -41003; } $data = $result; return 0; } }