PHP利用公众号菜单API实现新增、删除菜单

前段时间在部署java项目的时候发现有个公众号参数可以填,于是我填了进去,后面登陆公众号想要改菜单时发现修改不了了,搜了一圈才知道是我配置了java项目导致的,也是微信官方的限制,于是我就利用公众号菜单的API接口来实现修改菜单。
PHP Demo下载

由于安审机制,没办法下载PHP文件,于是我把.php后缀去除了

对Demo进行重命名
1
mv menu menu.php
步骤如下:
一、获取token

浏览器打开
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

这里的APPID修改成微信公众号的APPID,一般是wx开头的,APPSECRET修改成公众号的APPSECRET,然后进行访问后会得到一串token

戴戴的Linux

二、修改menu.php文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
header("Content-type: text/html; charset=utf-8");
define("ACCESS_TOKEN", "这里填写刚才获取到的token"); //修改这里,只需要复制引号内的token值即可
//创建菜单
function createMenu($data){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".ACCESS_TOKEN);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}
//获取菜单
function getMenu(){
return file_get_contents("https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".ACCESS_TOKEN);
}
//删除菜单
function deleteMenu(){
return file_get_contents("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".ACCESS_TOKEN);
}
$data = '{
"button":[
{
"type":"click",
"name":"首页",
"key":"home"
},
{
"type":"click",
"name":"简介",
"key":"introduct"
},
{
"name":"菜单",
"sub_button":[
{
"type":"click",
"name":"hello word",
"key":"V1001_HELLO_WORLD"
},
{
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
}]
}]
}';
echo createMenu($data);

1、讲解

1
2
3
4
5
6
7
8
9
10
11
12
"button":[
{
"type":"click",
"name":"首页",
"key":"home"
},
{
"type":"click",
"name":"简介",
"key":"introduct"
},
这个是一级菜单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
"name":"菜单",
"sub_button":[
{
"type":"click",
"name":"hello word",
"key":"V1001_HELLO_WORLD"
},
{
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
}]
}]
这个是一级菜单底下的二级菜单

效果如下图
戴戴的Linux

三、示例

戴戴的Linux
上图一共有2个一级菜单,第二个一级菜单中有2个二级菜单,第一个一级菜单点击后是打开小程序,第二个一级菜单点击后是显示二级菜单,点击第一个二级菜单跳转的是小程序,点击第二个二级菜单跳转的是网页,实现方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$data = '{
"button":[
{
"type": "miniprogram",
"name": "两类人员",
  "url": "https://dh.daishenghui.club",
"appid": "wxdxxxxxxxxxxxxxxxx",
"pagepath": "pages/index/index"
},
{
"name": "缴费开票",
"sub_button":[
{
"type": "miniprogram",
"name": "缴费",
"url": "https://daishenghui.club",
"appid": "wxcxxxxxxxxxxxxxxxx",
"pagepath": "pages/index/index"
},
{
"type": "view",
"name": "电子发票申请",
"url": "https://baidu.com"
}]
}]
}';

第一个一级菜单跳转的是小程序,所以type是miniprogram,name是菜单名字,url是备用网址
第二个一级菜单是显示二级菜单,所以只需要name和sub_button
第一个二级菜单跳转的也是小程序,所以配置的内容跟第一个一级菜单一样。
第二个二级菜单跳转的网页,所以type是view,url就是你要打开的网址
更多类型可以参考微信官方文档

传送门

浏览器访问menu.php

正确时的返回JSON数据包如下:

{“errcode”:0,”errmsg”:”ok”}

错误时的返回JSON数据包如下(示例为无效菜单名长度):

{“errcode”:40018,”errmsg”:”invalid button name size”}

关注我的公众号吧~戴戴的Linux

文章目录
  1. 1. 前段时间在部署java项目的时候发现有个公众号参数可以填,于是我填了进去,后面登陆公众号想要改菜单时发现修改不了了,搜了一圈才知道是我配置了java项目导致的,也是微信官方的限制,于是我就利用公众号菜单的API接口来实现修改菜单。
    1. 1.1. PHP Demo下载
    2. 1.2. 对Demo进行重命名
    3. 1.3. 步骤如下:
    4. 1.4. 一、获取token
    5. 1.5. 二、修改menu.php文件
    6. 1.6. 三、示例
    7. 1.7. 传送门


本站总访问量 本文总阅读量