最近做微信小程序,需要用戶授權登錄和獲取微信綁定的手機號。
首先我是個渣渣,看微信文檔理解不了人家的邏輯,所以。。。我覺得微信小程序的文檔寫的簡直是一坨粑粑,好了吐槽完畢,進入正文
首先這個流程是怎么樣的呢?他這個流程圖還是很ok的
簡單來說就是通過wx.log方法獲取當前的code,用這個code來向微信服務器驗證,然后拿到openid和sessionkey,然后在用openid來獲得授權,嘛,我是后端,沒寫過前端,所以,不曉得怎么獲取code,我們接着說 后台怎么獲得授權吧,就這樣子
'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
我們通過訪問人家的接口,獲取數據嘛,最簡單了,來看地址的參數 appid和secret都是成為開發者就能獲取到的,還要個code就是前段傳過來的。上代碼
public function openid(){ $code= input('code'); $appid = '*************'; $secret = '************'; //secret if (!$code) { return json(array('code'=>"0",'msg'=>'缺少code參數!')); } if (!$appid || !$secret) { return json(array('code'=>"0",'msg'=>'參數錯誤!')); } $url='https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code'; function getcurl($url){ $ch = curl_init(); curl_setopt ($ch,CURLOPT_URL,$url); curl_setopt ($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt ($ch,CURLOPT_TIMEOUT,30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 設置是否檢查服務器端的證書 $content=curl_exec($ch); //獲取結果 $status=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE ); if($status==404) { return ""; } curl_close($ch); return $content; } //code換取openid $res= getcurl($url); return json(array('code'=>"0",'msg'=>'獲取成功!','data'=>json_decode($res))); }
然后前段就可以獲取到代表用戶的openid和sessionkey了,然后就是我們需要授權下,
//授權登錄接口 public function authlogin(){ $openid = input('openid'); if (!$openid) { return json(array('code'=>"1",'msg'=>'授權失敗!')); } $con = array(); $con['wxid']=trim($openid); $uid = db('user')->where($con)->value('id'); //查詢是否有openid if ($uid) { //如果有openid $userinfo = db('user')->where('id='.$uid)->find(); //查詢wxid是否為0 $err = array(); //用來存放查詢出來的用戶id,昵稱和頭像 $err['id'] = $uid; $err['nickname'] = $userinfo['nname']; $err['phono'] = $userinfo['phono']; $err['touxiang'] = $userinfo['touxiang']; return json(array('code'=>"0",'msg'=>'成功','data'=>$err)); }else{ //如果用戶首次登錄,就是注冊 $data = array(); $data['nname'] = input('nname'); //獲取用戶名 $data['touxiang'] = input('touxiang'); //頭像地址 $data['phono'] = input('phono'); //手機號 $data['sex'] = input('sex'); //性別 $data['wxid'] = $openid; //openid $data['retime'] = time(); //當前時間 if (!$data['wxid']) { return json(array('code'=>"1",'msg'=>'授權失敗!')); } $res = db('user')->insertGetId($data); if ($res) { $err = array(); $err['id'] = $res; $err['nickname'] = urldecode($data['nname']); $err['phono'] = urldecode($data['phono']); $err['icon'] = $data['touxiang']; return json(array('code'=>"0",'msg'=>'成功','data'=>$err)); }else{ return json(array('code'=>"1",'msg'=>'授權失敗!')); } } }
嗯,大概就這樣子