网上有很多关于YII2.0微信开发教程,但是太过复杂凌乱,所以今天在这里给大家整理总结利用Yii2微信后台开发的系列了,给需要的小伙伴们参考。
一:接入微信
Yii2后台配置
1.在app/config/params.php中配置token参数
return [ //微信接入 'wechat' =>[ 'token' => 'your token', ],];
2.在app/config/main.php中配置路由
因为接口模块使用的RESTful API,所以需要定义路由规则。
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii/rest/UrlRule', 'controller' => 'wechat', 'extraPatterns' => [ 'GET valid' => 'valid', ], ], ],],
3.在app/controllers中新建WechatController
<?phpnamespace api/controllers;use Yii;use yii/rest/ActiveController;class WechatController extends ActiveController{ public $modelClass = ''; public function actionValid() { $echoStr = $_GET["echostr"]; $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; //valid signature , option if($this->checkSignature($signature,$timestamp,$nonce)){ echo $echoStr; } } private function checkSignature($signature,$timestamp,$nonce) { // you must define TOKEN by yourself $token = Yii::$app->params['wechat']['token']; if (!$token) { echo 'TOKEN is not defined!'; } else { $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } }}
微信公众号后台配置
在微信公众号后台配置URL和Token,然后提交验证即可。
URL:http://app.demo.com/wechats/validToken:your token
二:获取用户信息
用户表设计
代码如下:
CREATE TABLE `wechat_user` (
`id` int(11) NOT NULL,
`openid` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`nickname` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '微信昵称',
`sex` tinyint(4) NOT NULL COMMENT '性别',
`headimgurl` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '头像',
`country` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '国家',
`province` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '省份',
`city` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '城市',
`access_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`refresh_token` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
新闻热点
疑难解答