信端自動授權登陸實現 - EasyWeChat版本

我們將以EasyWeChat爲例,這是一個開源的 微信 非官方 SDK,已經放到了composer,這意味着你可以直接命令行集成到你的yii2中。

環境需求

  • PHP >= 5.5.9 (其實你不必驚訝,PHP 7 的時代了)
  • PHP cURL 擴展
  • PHP OpenSSL 擴展
  • PHP fileinfo 拓展 素材管理模塊需要用到

阿北建議你對照着上一篇一起閱讀,更深刻的瞭解,當然這之前請先大體看下 EasyWeChat 官方文檔。

準備好了

叮噹,你已經做好了準備工作,我們的思路和之前依然一樣,還是那個流程圖,還是那個數據表。

安裝和配置 overtrue/wechat

從composer下載

composer require "overtrue/wechat"

具體 overtrue/wechat 都幹了啥,請看其下的 composer.json 內容。什麼?看不懂composer.json? 來這裏看教學視頻 http://nai8.me/brother-book/7

輕鬆安裝完 overtrue/wechat 後我們來配置它,按照官方文檔即可。

配置 conf/params.php

我們爲params.php增加一個叫做 WECHAT 的配置項,要注意的是,配置項的內容需要符合 EasyWeChat 的要求,不能隨便寫哈。

具體 WECHAT 的配置項見文檔 https://easywechat.org/zh-cn/docs/configuration.html

我配置如下

// params.php
return [
    /**
     * 微信配置
     */
    'WECHAT'=>[
        /**
         * Debug 模式,bool 值:true/false
         *
         * 當值爲 false 時,所有的日誌都不會記錄
         */
        'debug'  => true,

        /**
         * 賬號基本信息,請從微信公衆平臺/開放平臺獲取
         */
        'app_id'  => '',        // AppID
        'secret'  => '',        // AppSecret
        'token'   => '',        // Token
        'aes_key' => '',        // EncodingAESKey,安全模式下請一定要填寫!!!

        /**
         * OAuth 配置
         *
         * scopes:公衆平臺(snsapi_userinfo / snsapi_base),開放平臺:snsapi_login
         * callback:OAuth授權完成後的回調頁地址
         */
        'oauth' => [
            'scopes'   => ['snsapi_userinfo'],
            'callback' => 'http://abc.com/index.php?r=wechat/default/oauth2',
        ],

        /**
         * 微信支付
         */
        'payment' => [
            'merchant_id'        => '',
            'key'                => '',
            'cert_path'          => '', // XXX: 絕對路徑!!!!
            'key_path'           => '',      // XXX: 絕對路徑!!!!
        ],
    ],
];

這裏面有針對web授權接口、微信支付等配置項,請按照需求填寫,沒有的留空即可。

開始使用

首先我們開始改造 WxBase 類,主要改造之前的 initWxAuth 函數,如代碼

namespace app\modules\wechat\controllers;

use Yii;
use yii\web\Controller;
use EasyWeChat\Foundation\Application;

class WxBase extends Controller {
    protected function initWxAuth(){
        $config = Yii::$app->params['WECHAT'];
        $config['oauth']['callback'] .= "&url=".Yii::$app->request->getUrl();

        $wxApp = new Application($config);
        $oauth = $wxApp->oauth;

        $session = Yii::$app->session;
        $wxOpenId = $session["wx_open_id"];
        if(empty($wxOpenId)){
            // 去做授權機制
           $oauth->redirect()->send();
        }

        $user = User::find()->where(['open_id'=>$wxOpenId])->one();
        $this->wxLogin = $user;
    }   
}

這裏的 $oauth->redirect()->send(); 相當於上一篇中的 wxRedirectOauth2() 方法,因此可以將原來的 wxRedirectOauth2() 刪除。

改造回調函數 wechat/default/oauth2

因 EasyWeChat 庫已經集成了 curl 發起GET/POST等功能,我們將上一篇自己定義的 HttpRequest 刪除掉。

namespace app\modules\wechat\controllers;

use EasyWeChat\Foundation\Application;

class DefaultController extends WxBase {
    ....

    public function actionOauth2($url){

        $session = Yii::$app->session;
        $config = Yii::$app->params['WECHAT'];

        $wxApp = new Application($config);
        $oauth = $wxApp->oauth;

        $userInfo = $oauth->user();
        $model = User::find()->where(['open_id' => $userInfo->getId()])->one();
        if($model === false){
            //  新建一個會員
        }

        $session['wx_open_id'] = $userInfo->getId();
        return $this->redirect($url);

    }
}

在此過程中,通過 $oauth->user 來獲取當前微信會員的信息,不用另用代碼實現此功能了。

授權完成 好處多多

大家看到了,無論在安裝和代碼使用上,EasyWechat 都表現的非常好,更少的代碼實現同樣的內容。

爲何要使用開源的庫?

  • 省時間、拿來就用。
  • 更多人的智慧和努力、我們自己開發一個未必比這個靠譜。

本篇就到這裏,下一篇我們將使用 EasyWeChat 來實現在電腦瀏覽器上的微信掃碼登陸功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章