最近在弄微信公众号开发,有一些功能是需要服务器端返回数据到微信客户端的,但是用微信开发工具调试是可以的,但是在客户端就是显示不来了数据,起初我以为是内网穿透导致数据不符合微信服务器的要求导致的,最后使用了网上的方法,重新弄了一遍,结果是可以使用的。说明自己的方法是有问题的,一开始不知道有什么问题,也找不出来,然后一点点的调试代码,结果找到了。
错误信息对微信发送过来的数据进行了去空格和转换为小写操作,仔细看了一下用户的openid是有大写字母的,这样转小写后导致找不到对应的用户,相应的微信客户端也就找不到数据。所以不应该对微信发送的数据转换为小写操作,像去空格也尽量不要使用。所以这段代码我们就去掉了,不需要。
这样修改后就可以发送信息到微信客户端了,其实这是个自己埋了一个坑,想法是很好的,处理一下微信的数据,可能有空格,但对openid有大写是不知道的,也没有仔细考虑这么操作有什么问题,在代码审核的也没有考虑这段代码,觉得这段应该无比正确。这段代码在创建的时候是脱离微信开发出来的,也就是凭感觉码出来的,结果问题很多,这里一边总结一下。
首先是PHP获取发送过来的XML数据,不能在使用$_POST获取数据了,只有如图方式,并且以前的方法已经弃用了,建议如下使用。具体原理我会用一小节来讲解学习
获取XML数据然后是把XML数据转换为对象方式,在转换的时候也是有问题出现的,比如微信发送过来的XML数据是有CDATA的,需要添加option参数才可以正确解析。分析了一下,还是对XML不了解,转换后的SimpleXMLElement对象也不熟悉,特别是在转换的时候需要添加额外的参数,这是没有注意到的地方。
解析XML接下来是json_encode,json_decode方法的时候,注意也是他们的额外参数,可能对数据解析也存在像xml解析一样的问题。
接下来给自己准备了一个学习的目标
1.file_get_content("php://input")
2.XML的转换
3.JSON相关的转换
4.PHP读写文件
网友评论