我們將以EasyWeChat爲例,這是一個開源的 微信 非官方 SDK,已經放到了composer,這意味着你可以直接命令行集成到你的yii2中。
環境需求
- PHP >= 5.5.9 (其實你不必驚訝,PHP 7 的時代了)
- PHP cURL 擴展
- PHP OpenSSL 擴展
- PHP fileinfo 拓展 素材管理模塊需要用到
阿北建議你對照着上一篇一起閱讀,更深刻的瞭解,當然這之前請先大體看下 EasyWeChat 官方文檔。
- EasyWeChat文檔 https://easywechat.org/zh-cn/docs/
- 上一篇文章 http://nai8.me/sapper-view.html?id=81
準備好了
叮噹,你已經做好了準備工作,我們的思路和之前依然一樣,還是那個流程圖,還是那個數據表。
安裝和配置 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 來實現在電腦瀏覽器上的微信掃碼登陸功能。