【tp5.1】微信公衆號受權登陸及獲取信息錄入數據庫

微信公衆號開發文檔連接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432php

微信公衆號受權登陸分爲兩種:git

一、以snsapi_base爲scope發起的網頁受權,是用來獲取進入頁面的用戶的openid的,而且是靜默受權並自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁(每每是業務頁面)github

二、以snsapi_userinfo爲scope發起的網頁受權,是用來獲取用戶的基本信息的。但這種受權須要用戶手動贊成,而且因爲用戶贊成過,因此無須關注,就可在受權後獲取該用戶的基本信息。數據庫

 

如下說作受權的思路api

 

明確思路後,開始動手吧緩存

有一個很好用的微信開發SDK,裏面集合了微信公衆號、微信支付、阿里支付的功能微信

SDK項目相關地址
GITHUB源碼地址:https://github.com/zoujingli/wechat-php-sdk
OSChina源碼地址:http://git.oschina.net/zoujingli/wechat-php-sdk
Composer包名稱:zoujingli/wechat-php-sdk
在線文檔地址:http://www.kancloud.cn/zoujingli/wechat-php-sdksession

這裏推薦使用composer來管理SDK,composer安裝微信開發

composer require zoujingli/wechat-developer

 

 

 

安裝完SDK後即可以開始寫本身的代碼了app

在config裏app.php寫下微信公衆號相關信息

// 公衆號配置
    'wechat'    => [ 'token'          => 'test',
        'appid'          => '你的微信公衆號appid',
        'appsecret'      => '你的微信公衆號appsecret',
        'encodingaeskey' => '',
        // 配置商戶支付參數(可選,在使用支付功能時須要)
        'mch_id'         => "你的商戶平臺mch_id",
        'mch_key'        => '你的商戶平臺mch_key',
        // 配置商戶支付雙向證書目錄(可選,在使用退款|打款|紅包時須要)
        'ssl_key'        => '',
        'ssl_cer'        => '',
        // 緩存目錄配置(可選,需擁有讀寫權限)
        'cache_path'     => '', ]

 

 

而後是控制器代碼

$config = config('wechat');//微信配置
        $oauth = new Oauth($config); $thisUrl = $this -> get_url();//當前地址
        $code = $this -> request -> param('code'); if( !Session::has('user_id') ){//沒有session保存的user_id
            if( !Session::has('isEmpty') ){//靜默獲取openid
                $oauth -> getOauthRedirect($thisUrl,'','snsapi_base');//靜默受權換取code
                $data = $oauth -> getOauthAccessToken($code);//經過 code 獲取 AccessToken 和 openid
                Session::set('openid',$data['openid']); //經過Open搜索數據庫是否有該用戶
                $user = new \app\api\model\User(); $userId = $user -> getUserId($data['openid']); if(!$userId){//未註冊
                    Session::set('isEmpty',1); $thisUrl = str_replace(strchr($thisUrl, "code"), '', $thisUrl);//清除code
                    header('location:'.$thisUrl);//從新訪問當前網址
                }else{ Session::set('isEmpty',2); Session::set('userId',$userId); } }else if(Session::get('isEmpty') == 1){//註冊會員
                $oauth -> getOauthRedirect($thisUrl);//用戶受權換取code
                Session::delete('isEmpty');//刪除判斷用的session
                $data = $oauth -> getOauthAccessToken($code);//經過 code 獲取 AccessToken 和 openid
                $userInfo = $oauth -> getUserInfo($data['access_token'],$data['openid']); $wxUser = new User($config); $wxUserInfo = $wxUser -> getUserInfo(Session::get('openid')); // dump($wxUserInfo);
                $userInfo['subscribe_time'] = $wxUserInfo['subscribe'] ? $wxUserInfo['subscribe_time'] : ''; $userInfo['subscribe'] = $wxUserInfo['subscribe'] ? 1 : 0; // dump($userInfo);exit;
                $user = new \app\api\model\User(); $userId = $user -> addUserInfo($userInfo); Session('userId',$userId); } }else{//實時更新用戶數據,實時監測用戶是否關注
            $wxUser = new User($config); $wxUserInfo = $wxUser -> getUserInfo(Session::get('openid')); if(!empty($wxUserInfo)){ $user = new \app\api\model\User(); $user -> updateUserInfo($wxUserInfo); } }

 

以上

相關文章
相關標籤/搜索