首页 > 开发 > Php > 正文

完美利用Yii2微信后台开发的系列总结

2020-02-21 21:10:43
字体:
来源:转载
供稿:网友

网上有很多关于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;

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表