PHP--------微商城實現微信受權登陸

前段時間作完微商城了,來把微信商城學到的一些東西分享一下,但願對各位有所幫助。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無論用什麼框架,只要步驟對,都能實現。

相關文章
相關標籤/搜索