在登陸界面,讓用戶選擇是手動登陸,還是微信授權登陸。
如果是微信授權登陸(思路):微信授權登陸,判斷數據庫有沒用這個openid
①如果這個openid不存在
①如果這個openid不存在
保存這個openid到數據庫;
然后直接跳轉到完善信息頁面,包括:用戶昵稱(登陸名)、密碼、手機號。
@如果手機號不存在,則保存完善的用戶信息,並且保存用戶信息到session完成登錄。
@如果手機號已經存在,直接把微信授權用戶的信息保存到之前的用戶信息里面,並且刪除之前保存的授權用戶信息。並且保存用戶信息到session完成登錄。
用戶完善信息成功,可以在PC端登陸。
②如果這個openid已經存在,但沒有完善個人信息
然后直接跳轉到完善信息頁面,包括:用戶昵稱(登陸名)、密碼、手機號。
@如果手機號不存在,則保存完善的用戶信息,並且保存用戶信息到session完成登錄。
@如果手機號已經存在,直接把微信授權用戶的信息保存到之前的用戶信息里面,並且刪除之前保存的授權用戶信息。並且保存用戶信息到session完成登錄。
用戶完善信息成功,可以在PC端登陸。
②如果這個openid已經存在,但沒有完善個人信息
則跳轉到完善信息頁
③如果這個openid已經存在,且完善了個人信息,
③如果這個openid已經存在,且完善了個人信息,
保存用戶信息到session完成登錄;
則跳轉到主頁。
如果是手動登陸(思路): 用戶在微信客戶端,選擇手動后,提醒是否綁定微信號
如果選擇綁定微信號,則把當前微信的openid與用戶信息綁定,保存到數據庫。 (則下次就不用再手動輸入,就可以通過微信授權登陸到這個賬號)。
思路二:
①如果這個openid不存在
即首次進入,跳轉到登陸頁,需要用戶手動登陸(通過手機號、密碼,完成登陸)
登陸成功,提示是否微信授權,如果同意微信授權(把這個openid與手動登陸的賬號綁定),下次可以自動登陸。
③如果這個openid已經存在
openid對應用戶存在的情況下,檢查用戶是否能夠合法登錄
保存用戶信息到session完成登錄;
則跳轉到主頁。
公眾號和服務號的網頁授權登陸:
獲取openid的案例:
public function index(){ //來自微信授權登陸 if(isset($_GET['code'])) { $code = $_GET['code']; //通過code和AppID(應用ID) 、AppSecret(應用密鑰) 換取網頁授權access_token和openid $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx9ec2de2b4763aaff&secret=40eecba815d28cf349b886d02638d621&code=$code&grant_type=authorization_code"; $htt = $this->https_post($url,""); $htt = json_decode($htt,true); $openid = $htt['openid']; ………………………… }
企業號的網頁授權登陸:
獲取openid的案例:
public function index(){ //來自微信授權登陸 if(isset($_GET['code'])) { $code = $_GET['code']; //通過CorpID和Secret來換取AccessToken $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=XXX&corpsecret=xxxx"; $htt = $this->https_post($url,""); $htt = json_decode($htt,true); $access_token = $htt["access_token"]; //通過code和access_token換取網頁授權openid $url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=$access_token&code=$code"; $htt = $this->https_post($url,""); $htt = json_decode($htt,true); // print_r($htt);exit; if(isset($htt['UserId'])) { $openid = $htt['UserId']; //企業成員授權時返回 }else { $openid = $htt['OpenId']; //非企業成員授權時返回 } ………………………… }
判斷頁面是否是在微信客戶端打開的方法:
/** * 判斷頁面是否是在微信客戶端打開 */ function is_weixin() { if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) { return 1; } return 0; } //判斷頁面是否是在微信客戶端打開。 0:表示不是,1表示是在微信客戶端中打開 $is_weixin = is_weixin();
模擬post請求:
//模擬post請求 public function https_post($url,$data){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if(curl_errno($curl)) { return 'Errno'.curl_errno($curl); } curl_close($curl); return $result; }