PHP--------微商城實現微信授權登錄
阿新 • • 發佈:2018-01-12
resp gin ray 地址 pre 公眾 body wid func
前段時間做完微商城了,來把微信商城學到的一些東西分享一下,希望對各位有所幫助。
PHP做後臺,先來說微信商城的授權登錄吧!這個幾乎都有,這個功能代碼其實不多,主要是看懂文檔需求。
前提:要有公眾號,和通過微信認證,得到相應信息,appid,appsecret等。
看看效果圖:
獲取信息有:用戶昵稱,性別,頭像,國家等
微信開發文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
第一步:獲取code
/**** * 點擊進入登錄調用*/ function index() { /*** * 跳轉得到code * 回調地址 列http://xxxxxx/?m=weixin&c=wxtest&a=wxcode * */ $this->getCode("http://xxxxxx/?m=home&c=wxlogin&a=wxcode"); } /** * 第一步 * 獲取CODE * @param string $weixin_uri * appid 是 公眾號的唯一標識 * redirect_uri 是 授權後重定向的回調鏈接地址, 請使用 urlEncode 對鏈接進行處理 * response_type 是 返回類型,請填寫code * scope 是 應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,只能獲取用戶openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到昵稱、性別、所在地。並且, 即使在未關註的情況下,只要用戶授權,也能獲取其信息 ) * state 否 重定向後會帶上state參數,開發者可以填寫a-zA-Z0-9的參數值,最多128字節 * #wechat_redirect 是 無論直接打開還是做頁面302重定向時候,必須帶此參數 **/ private function getCode($redirect_uri){ $weixin_uri = ‘https://open.weixin.qq.com/connect/oauth2/authorize?appid=‘.$this->appid; $weixin_uri.= ‘&redirect_uri=‘.urlencode($redirect_uri).‘&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect‘;$this->redirect($weixin_uri); }
第二步:獲取回調方法接收code,通過code換取網頁授權access_token
/**** * 回調地址 * 獲取code */ function wxcode(){ //驗證是否得到參數code,做相應處理 if ($_GET[‘code‘]) { } //得到回調接口的參數code $code=$_GET[‘code‘]; /*** * 第二步:通過code換取網頁授權access_token * 首先請註意,這裏通過code換取的是一個特殊的網頁授權access_token, * 與基礎支持中的access_token(該access_token用於調用其他接口)不同。 * 公眾號可通過下述接口來獲取網頁授權access_token。如果網頁授權的作用域為snsapi_base, * 則本步驟中獲取到網頁授權access_token的同時,也獲取到了openid,snsapi_base式的網頁授權流程即到此為止。 * 尤其註意:由於公眾號的secret和獲取到的access_token安全級別都非常高,必須只保存在服務器,不允許傳給客戶端。 * 後續刷新access_token、通過access_token獲取用戶信息等步驟,也必須從服務器發起。 * */ $url = ‘https://api.weixin.qq.com/sns/oauth2/access_token?appid=‘.$this->appid; $url.= ‘&secret=‘.$this->appsecret.‘&code=‘.$code.‘&grant_type=authorization_code‘;
//get請求,得到access_token,openid等信息 $data = json_decode(httpGet($url), true);
//打印數據 echo $code; print_array($data); //第三步 可省略 刷新access_token(如果需要) //由於access_token擁有較短的有效期,當access_token超時後,可以使用refresh_token進行刷新, //refresh_token有效期為30天,當refresh_token失效之後,需要用戶重新授權。 //第四步 獲取用戶信息 //如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取用戶信息了。 //http:GET(請使用https協議) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN if ($data[‘openid‘] && $data[‘access_token‘]) { $json = httpGet("https://api.weixin.qq.com/sns/userinfo?access_token=$data[access_token]&openid=$data[openid]&lang=zh_CN"); $user=json_decode($json, true); // print_array($user); //打印信息 } // exit();
$this->assign(‘user‘,$user);
//跳轉界面顯示所獲取的信息 $this->display("wxcode"); }
正確時返回的JSON數據包如下:
{
"openid":" OPENID", " nickname": NICKNAME, "sex":"1", "province":"PROVINCE" "city":"CITY", "country":"COUNTRY", "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }
註:我用到的參數 appid,appsecret在父類中
PHP不管用什麽框架,只要步驟對,都能實現。
PHP--------微商城實現微信授權登錄