在公司弄了一个星期的微信公众平台的接口开发,由于之前没弄过,开发的过程遇到了很多的小问题。下面我就总结一下我在开发过程中遇到了的问题和解决方法:
0x01首先是接口的配置问题
其实接口的配置一开始是没有问题的,但是后来我把它改成其他的之后再想改回来的时候发现改不回来了,总是报下面的错
后来才知道,修该接口配置的时候不能用之前用过的URL和TOKEN的组合。
0x02自定义菜单问题
在自定义菜单的设置过程中开始的时候发现怎么都设置不好,服务器总是返回
{"errcode":40016,"errmsg":"invalid button name size"}
开始的时候我的菜单的json数组在程序中是这样写的:
$menu = "{ 'button':[ { 'type':'click', 'name':'今日歌曲', 'key':'V1001_TODAY_MUSIC' }, { 'type':'click', 'name':'歌手简介', 'key':'V1001_TODAY_SINGER' }] }
然后我就直接把上面的$menu发送到了微信服务器。结果苦逼了发现服务器返回了上面截图中的错误但是当我把上面的字符串考到接口调试工具上试的时候又总是成功的,当时我简直郁闷透了,后来我才意识到如果按我上面的方式弄的话我像微信服务器发送的是一个字符串,而不是一个json数组对象。于是我把程序做了修改,改成如下:
$menu = array( 'button'=>array( array('type'=>'click','name'=>'今日歌曲','key'=>'V1001_TODAY_MUSIC'), array('type'=>'click','name'=>'歌手简介','key'=>'V1001_TODAY_SINGER'))); $menu = json_encode($menuPostString);
我觉得这次总该没问题了,这次发送的确是是json数组对象了。结果发现还是不行,服务器返回了同样的错误!这就让我纳闷了,简直不知道如何是好了,后来经过查资料才知道,微信服务器在接受json数数组时不允许数组中包含Unicode码(类似于\u4eca这样的东西)而当我使用了json_encode函数后数组中的中文部分就变成了Unicode码所以自然会出错,同时也不能包含url编码。所以我后来的解决办法是把代码改成如下:
$menu = array( 'button'=>array( array('type'=>'click','name'=>urlencode('今日歌曲'),'key'=>'V1001_TODAY_MUSIC'), array('type'=>'click','name'=>urlencode('歌手简介'),'key'=>'V1001_TODAY_SINGER'))); $menu = urldecode(json_encode($menuPostString));
最后微信服务器终于给我仁慈的返回了:
{"errcode":0,"errmsg":"ok"}
菜单接口终于测试成功了,真不容易啊!
0x03菜单的修该问题
首先菜单是不允许直接修改的,只能是所有的删除之后再重新设置,然后删除菜单应该向服务器发送的是GET请求,这一点接口文档中也明确说明了。关键是服务器也返回了正确的结果,可是当我打开微信查看的时候发现菜单还在,取消关注又重新关注还是在,简直了!后来重启了下手机发现菜单终于消失了。。。。