信端自动授权登陆实现 - 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 来实现在电脑浏览器上的微信扫码登陆功能

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