前段時間作完微商城了,來把微信商城學到的一些東西分享一下,但願對各位有所幫助。json
PHP作後臺,先來講微信商城的受權登陸吧!這個幾乎都有,這個功能代碼其實很少,主要是看懂文檔需求。api
前提:要有公衆號,和經過微信認證,獲得相應信息,appid,appsecret等。xcode
看看效果圖:安全
獲取信息有:用戶暱稱,性別,頭像,國家等服務器
微信開發文檔: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_tokenapp
/**** * 回調地址 * 獲取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在父類中this
PHP無論用什麼框架,只要步驟對,都能實現。