微信开发日记——自定义菜单

寒假里时普通公众账号还是不能自定义菜单的,这是后来微信才开放给普通公众账号的。自定义菜单需要http请求url,地址为 https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN,为此,封装成私有postRequest()函数,第一个参数为请求的地址,第二个为请求post过去的数据,自定义菜单里post数据就是菜单的信息了。目前自定义菜单接口可以实现两种类型的按钮,click类型服务器会推送消息类型为event,并且需要传入key值,用于后面判断执行哪个按钮的指令。view类型带有的是url,点击后会直接打开url地址,相当于点击的一个网页链接。目前最多可以创建3个一级菜单,每个一级菜单最多可以创建5个二级菜单。试了一下,这样的限制在用户体验上是很合理的。

需要注意的是自定义菜单函数需要在类之外就要实例化,也就是$wechatObj->bottomMenu();,而且创建自定义菜单后,由于微信客户端的缓存,需要24小时之后才能显示出来,想要立即显示的办法就是取消关注后再次关注,这样就能获得最新的状态了。

1
2
3
4
5
6
7
8
9
10
11
12
13
private function postRequest($url, $data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, "Content-type: text/json");//设置HTTP头
curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$responseArray = json_decode($output,true);
return $responseArray;
}

菜单部分注意数public函数,外部需要调用

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
public function bottomMenu()//底部菜单
{
$ACCESS_TOKEN = $this->getACCESS_TOKEN();
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$ACCESS_TOKEN;
$postStr = ’{"button":
[
{"name":"菜单", "sub_button":
[
{"name": "小黄鸡聊天", "type": "click", "key": "chat_with_simsimi"},
{"name":"每日天气", "type":"click", "key": "everyday_weather"},
{"name":"每日笑话", "type":"click", "key": "everyday_joke"}
]
},
{"name":"网站", "sub_button":
[
{"name":"如果明天过后", "type":"view", "url":"http://iat.net.cn"},
{"name":"苏州大学", "type":"view", "url":"http://www.suda.edu.cn"},
{"name":"计算机科学与技术学院", "type":"view", "url":"http://scst.suda.edu.cn"}
]
}
]
}’;
$responseArray = $this->postRequest($url, $postStr);
$contentStr = $responseArray[’errmsg’];
return true;
}

获取用户的信息需要GET方式请求url:https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

GET方式的请求区别于POST方式,我将它写在了如下的函数里

1
2
3
4
5
6
7
8
9
10
11
12
13
private function getRequest($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);//链接地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否返回信息
$output = curl_exec($ch);
curl_close($ch);
$responseArray = json_decode($output,true);
return $responseArray;
}

参数只要求一个地址就行了,正常情况下服务器返回的是JSON数据,包含用户的昵称、性别、地区等等,方便于用户来源的统计分析等。

Just a beginner.<br /><a href='https://github.com/yaoshanliang/about' target='_blank'>profile</a>