一、测试自定义菜单接口时中文菜单名显示为null
设置的中文菜单名,中文未经过编码和解码过程,设置的中文菜单名在最后的微信服务器返回的json格式数据中显示为null。
解决办法:将中文先用unecode方法编码,最后再将菜单数组用undecode解码,再传给微信服务器。方法最上面加上header("content-type=text/html;charset=utf-8"),编码方式必须是utf-8,才能在微信公众平台在线测试接口。
二、自定义菜单中的菜单类型type="click"(或"view")必须小写
大写CLICK和VIEW会出错,错误提示:must use utf-8 charse。
三、自定义菜单类型type为view时,设置的url必须有值,设置为"",会出错
url设置为"",或url不正确,修改后的菜单名都不会得到更新。
四、测试号接口调用频次有限
解决办法:将access_token存起来
下面的是采用了wechat-php-sdk框架
session_start(); if($_SESSION[‘access_token‘] && $_SESSION[ ‘expire_time‘] > time()) { return $_SESSION[‘access_token‘]; } else { $appid = ‘wx6615a1d7a0d6489d‘; $appsecret= ‘2d8bfa2c72f6ae8f58f090c56bf2cd7e‘; //获取access_token 接口调用凭证 $access_token = $weObj->checkAuth($appid,$appsecret); $access_token = $res[‘access_token‘]; $_SESSION[‘access_token‘] = $access_token; $_SESSION[‘expire_time‘] = time()+7000; return $access_token; }
五、自定义菜单时,更改菜单名之后微信公众号上得不到及时更新
菜单未得到更新的情况:一是,写的菜单数组代码语法错误,代码有问题;可先测试一下接口,测试代码见我写的微信公众号开发之自定义菜单
二是,有的时候我们在多个环境中去调用access_token,会出现改变了文件却显示的是前一个文件中的菜单的情况;下面引入一位博友写的总结:
如果有第二地方也请求同一个token的话,那么第一个token会在5分钟之内过期。这也就说明了,为什么在我搭建好第二个环境的时候,老环境就出现了invalid credential, access_token is invalid or not latest hint 这种问题。因为这两个环境用的是同 一个AppID和AppSecret来取得的access_token,而这个access_token的取得并不是在服务器启动的时候,而且是在需要调用接口的画面初期化的时候去取得的。
我的理解是在多个环境中去调用access_token,当在另一个环境中调用access_token时,在一定时间内前一个环境中获取的access_token还未过期,所以在这段时间中显示的是前一个环境中设置的菜单。
access_token的获 取和服务器什么时候启动没有直接的关系,有直接关系的是初次调用接口是什么时候。
注:修改回复消息之后可以在公众号立即看到更新,但是修改菜单之后,公众号不会马上更新菜单,修改菜单代码之后,最好是取消公众号关注,然后再刷新测试号管理(以测试号为例)界面,再扫描二维码重新关注。