在开启长沙微信公众号开发者模式以后,在微信公众号平台设置的自动回复和自定义菜单会失效,所以我们要进行自定义
当然, 产品会让你将这个功能开发成后台功能,想什么时候更改就什么时候更改,多酸爽
自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单,自定义菜单的接口还包括了可实现10种类型按钮
我们项目基本用于跳转页面,不做推送啥的,所以只用view
:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL
微信的文档也很酸爽,到底用json
还是数组,奇葩啊
{ "button":[ { "type":"view", "name":"官方网站", "url":"https://qq52o.me" }, { "name":"技术笔记", "sub_button":[ { "type":"view", "name":"PHP", "url":"https://qq52o.me/category/php" }, { "type":"view", "name":"Python", "url":"https://qq52o.me/category/python" }, { "type":"view", "name":"Linux", "url":"https://qq52o.me/category/linux" }] }] }
将就看吧,二级菜单的一级菜单只需要显示名称,多了一个sub_button
数组
跳转页面的参数也是唯一的:type
,name
,url
后台给设置一个CRUD
操作就行,添加需要显示的名称,URL,如果是二级的话,还要选择关联一级菜单
// 0 表示为一级菜单$data = WechatMenu::find()->where(['first_id' => 0])->asArray()->all();$secMenuData = [];foreach ($data as $key => $val){ $secMenuData[$key]['name'] = $val['name']; // 有二级菜单的时候 一级不需要链接 留空 if(empty($val['url'])) { // 找二级菜单的信息 $son = WechatMenu::find()->where(['first_id' => $val['id']])->asArray()->all(); if(!empty($son)){ foreach ($son as $k => $value) { $secMenuData[$key]['sub_button'][] = [ 'type' => 'view', 'url' => $value['url'], 'name' => $value['name'], ]; } } }else{ $secMenuData[$key]['type'] = 'view'; $secMenuData[$key]['url'] = $val['url']; }}
得到数据以后,转一下json
格式,这里要注意一下的是
需要加上json_encode
的第二个参数JSON_UNESCAPED_UNICODE
不然会提示errcode":40033,"errmsg":"invalid charset. please check your request, if include uxxxx will create
错误
原因是把中文自动进行了unicode
编码
还要注意外面还有一个button
,我们再进行拼接
rsort($secMenuData);$secMenuData = ['button'=>$secMenuData];$menuJson = json_encode($secMenuData,JSON_UNESCAPED_UNICODE);//$menuJson = "{"button":".$secMenuData."}";$wechat = new WeChat(['appId'=>$appid,'appSecret' => $appKey]);$data = $wechat->setWeChatMenu($menuJson);if($data['errcode'] == 0){ Yii::$app->session->setFlash('success','应用微信成功!'); return $this->redirect(['index']);}else{ Yii::$app->session->setFlash('error',$data['errmsg'].'请截图联系技术人员!'); return $this->redirect(['index']);}
转义是因为我之前用的单引号,他提示我{"errcode":40016,"errmsg":"invalid button size"}
,转义之后就正常了
不想拼接的话就在之前拼接为数组,一起进行json_encode
就ok了
然后就调用定义的设置微信自定义菜单的方法就ok了
最新推荐