微信无法控制硬件设备的排查方法
1、首先找到控制设备的接口,如本文中的灯控接口LightControl()。
2、通过打印信息的方法来排查问题,这是最常用的调试方法。因此我们在接口中添加日志输出到数据库中,如下图所示。
3、控制一下设备后,进入数据库中找到日志文件。
4、找到输出的日志,可以发现问题所在。如本文中发现设备ID没有获取到,因此不能控制设备。
5、在到控制接口函数中查看代码,找到获取设备ID的地方,发现它与两个参数有关,一个是微信用户账号,一个是access_token。
6、从数据库中的日志可以看到微信用户账号没有问题,那就是access_token有问题了,因为这个值在2小时内会失效,需要定时更新。
7、再回到接口函数处,寻到获取access_token的地方,如下图所示。
8、通过搜索整个工程,可以找到获取access_token的函数,weiphp中接口函数是在Application\Common\Common\function.php文件内。
9、打开相应的文件,找到接口函数,weiphp中的函数为get_access_token()。
10、然后我们再打开微信公众平台的接口调试工具,重新获取一个access_token值,相应的设置如下图所示。
11、获取成功后会返回如下结果,我们把access_token这个值复制,后面会使用到。
12、回到获取access_token的地方,在接口函数前加下如下两行代码。这样做的目的是为了返回一个正确的token值,这个值就是刚才我们获取的值。
13、再次控制一下设备,发现可以正常控制了。说明原来接口中获取的token值是有问题的,我们再把代码移到下图所示的地方。
14、再次控制一下设备,发现无法控制设备。说明问题就出在下图中的if判断中。经过分析,原来这是判断token值是否有效,如果有效则不需要再去向微信服务器获取。
15、我们把这个判断去掉,把刚才加的代码也删除,重启服务后,再重新控制一下设备, 发现可以正常控制了。
16、再把那个判断条件加上,重启服务后,再重新控制一下设备, 发现可以正常控制设备。
17、以上说明前一次获取access_token值是不正确的,但是WEIPHP服务器没有更新而出现的问题,这个问题可以在使用access_token出错后把这个值的有效性清除,再重新获取就可以了。