TP5架構下微信授權登入的代碼實現

來源:互聯網
上載者:User
本篇文章給大家帶來的內容是關於TP5架構下授權登入的代碼實現,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

建立設定檔wechat.php

<?phpreturn ['oauth' => ['appid'     => '***',        'appsecret'     => '***',],];

建立extend\wechat\WechatOauth.php

<?phpnamespace wechat;/** * @package 授權控制器 */class WechatOauth{    //授權配置資訊    private $wechat_config = [        'appid'     => '',        'appsecret'     => '',    ];    public function __construct() {        $this->wechat_config = $this->wechatConfig();    }    /**     * 擷取秘鑰配置     * @return [type] 數組     */    public function wechatConfig() {        $wechat_config = array_merge($this->wechat_config,config('wechat.oauth'));        return $wechat_config;    }     /**     * 擷取openid     * @return string|mixed     */    public function getUserAccessUserInfo($code = "")    {                if(empty($code)){            $baseUrl = request()->url(true);            $url = $this->getSingleAuthorizeUrl($baseUrl, "123");                            Header("Location: $url");            exit();        }else{            $access_token = $this->getSingleAccessToken($code);            return $this->getUserInfo($access_token);        }    }    /**     * 授權連結     * @param  string $redirect_uri 要跳轉的地址     * @return [type]               授權連結     */    public function getSingleAuthorizeUrl($redirect_url = "",$state = '1') {        $redirect_url = urlencode($redirect_url);        return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->wechat_config['appid'] . "&redirect_uri=".$redirect_url."&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";     }    /**     * 擷取token     * @return [type] 返回token      */    public function getSingleAccessToken($code) {        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->wechat_config['appid'].'&secret='.$this->wechat_config['appsecret'].'&code='.$code.'&grant_type=authorization_code';            $access_token = $this->https_request($url);        return $access_token;         }       /**     * 發送curl請求     * @param $url string     * @param return array|mixed     */    public function https_request($url)    {        $curl = curl_init();        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($curl, CURLOPT_URL, $url);        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);        $AjaxReturn = curl_exec($curl);        //擷取access_token和openid,轉換為數組        $data = json_decode($AjaxReturn,true);        curl_close($curl);        return $data;    }     /**     * @explain     * 通過code擷取使用者openid以及使用者的號資訊     * @return array|mixed     * @remark     * 擷取到使用者的openid之後可以判斷使用者是否有資料,可以直接跳過擷取access_token,也可以繼續擷取access_token     * access_token每日擷取次數是有限制的,access_token有時間限制,可以儲存到資料庫7200s. 7200s後access_token失效     **/    public function getUserInfo($access_token = [])    {        if(!$access_token){            return [                'code' => 0,                'msg' => '授權失敗',             ];        }        $userinfo_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token['access_token'].'&openid='.$access_token['openid'].'&lang=zh_CN';        $userinfo_json = $this->https_request($userinfo_url);            //擷取使用者的基本資料,並將使用者的唯一標識儲存在session中        if(!$userinfo_json){            return [                'code' => 0,                'msg' => '擷取使用者資訊失敗!',             ];        }        return $userinfo_json;    }}

控制器調用

public function index()    {       $wchat = new \wechat\WechatOauth();           $code = request()->param('code',"");       $user = $wchat->getUserAccessUserInfo($code);    }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.