1. 程式人生 > >PHP--------微商城實現微信授權登錄

PHP--------微商城實現微信授權登錄

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--------微商城實現微信授權登錄