$sence_id = rand(1000000,9999999);//100W到999W之間的數字爲網站登錄場景 todo:隨機值重複狀況沒有作處理 $wxConfig = new \WxConfig(); $img = $wxConfig->getQrCode(60,'temp',$sence_id,true); $redis = Cache::store('redis')->handler(); $redis->setex('77dj_wx:user:'.$sence_id,120,0);//已sence_id爲鍵 return wx_successReturn(['img'=>$img,'sence_id' => $sence_id]);
$redis = Cache::store('redis')->handler(); $key = '77dj_wx:user:'.$data['sence_id'];//todo:key前綴加到配置裏面 $exists = $redis->exists($key); if(!$exists) return wx_errorReturn(null,-1,'二維碼已過時'); $user_id = $redis->get($key); if($user_id) { $user_info = Db::name('user')->find($user_id); $redis->del('77dj_wx:user:'.$data['sence_id']); return wx_successReturn(['user_info'=>$user_info]); } else { return wx_successReturn(['user_info'=>null]); }
/** * 推送的事件處理 */ private function doEvent($postObj) { switch ($postObj->Event) { case 'subscribe' : $this->doSubscribe($postObj); break;//關注事件 case 'unsubscribe' : $this->unSubscribe($postObj); break; //取消關注 case 'CLICK' : //TODO... 菜單按鈕須要重作 // $this->menuClick($postObj); break;//菜單點擊事件 case 'SCAN' : $this->dealScan($postObj); break;//掃碼事件 } } /** * 訂閱關注 */ private function doSubscribe($postObj) { $eventKey = $postObj->EventKey; $sence_id = explode('_', $eventKey)[1]; if ($sence_id > 1000000) {//用戶登錄 $postObj->EventKey = $sence_id; $this->createUser($postObj); } } /** * 掃碼事件 */ private function dealScan($postObj) { if ($postObj->EventKey > 1000000) {//用戶登錄 $this->createUser($postObj); } } /** * */ private function createUser($postObj) { $user = new User(); $access_token = $this->getToken(); $userArr = $user->createUser('','','dj_pc','PC',$postObj->FromUserName,$access_token); if(isset($userArr['app_session'])) { $session = $userArr['app_session']; //用戶信息 $userInfo = getAppUserInfo($session, true); } $redis = Cache::store('redis')->handler(); $prefix = config('const.redis_prefix'); $key = $prefix['user_token']; $redis->hset($key,$userArr['c_session'],$userArr['id']); $redis->setex('77dj_wx:user:'.$postObj->EventKey,3600,$userArr['id']); }