2019独角兽企业重金招聘Python工程师标准>>>
我们将以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 来实现在电脑浏览器上的微信扫码登陆功能。