1 、忽略ToUserName 开发者账号:也许我真的是小白,也许我真的台粗心大意了,在接口调试工具,测试N++次都是,成功的,然而在测试号调试开始的时候,把这个开发者账号,理解为是自己的微信账号,而接收消息的账号,还是自己的微信账号,所以导致测试了N多遍都没有成功。甚至是还怀疑自己的水平,懊恼的情绪一大堆……真正的ToUserName账号在测试账号的测试号管理右上角 。
2、 忽略FromUserName发送方账号:在接口调试工具当中填写的FromUserName账号,在发送接收过程中会被加密,如下图我测试时候填写的FromUserName账号是w18739343721,而在像微信号返回信息的时候,FromUserName变为了o9-hj6wDvSv2fNMIU8ploLt4QVO0
通过以上两张图的对比,fromUsername的变化,在微信文档以及网上的资料中都没有提到,也许是人家都是大佬不会犯这种低级错误[捂脸哭]
3、ToUserName 和FromUserName的位置的对调。当你在微信公众平台接口调试工具处填写时,一定要注意上面说到的两点,要写对,不仅位置要对,而且在微信给服务器发送和你的服务器返回消息给微信服务器时候的位置都要写对。如下图:这是我接口测试的截图,这中间的角色关系,需要花功夫正确的理解
4、网上说到的,空格的坑。返回给微信服务器的xml格式尽量都保持不换行(自动换行除外)。如下图是我写的返回给微信服务器的xml格式
$returnobj="<xml><ToUserName><![CDATA[o9-hj6wDvSv2fNMIU8ploLt4QVO0]]></ToUserName><FromUserName><![CDATA[gh_b19a8c08e48a]]></FromUserName><CreateTime>1607929980</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[我是开发这网站返回微信服务器消息,让后在返回给客户的消息]]></Content></xml>";
5、还有一种可能,接触微信公众号的新手,不知道怎么获取到微信服务器发送给自己服务器的消息。
第一种方法使用:$GLOBALS[‘HTTP_RAW_POST_DATA’];
第二种这方法使用:file_get_contents(‘php://input’);
对这两种方法函数不明白的可以直接百度搜索,学习。
6、变量命名注意大小写,在写微信api的方法里,所有的变量命名要统一用小写字母。小编在开发中,复制粘贴的xml文档大写字母的变量,因为刚接触不够熟悉,可是排查了很久才排查出来问题。以下是小编的!!!错误示例!!!:
$toUsername=$postobj->ToUserName;
$fromusername=$postobj->FromUserName;
$CreateTime=$postobj->CreateTime;
$MsgType = $postobj->MsgType;
$Content = $postobj->Content;
$MsgId = $postobj->MsgId;
7、微信公众号配置信息的url填写的路径和你方法的路径必须一致:如图我用的tp5框架开发,配置url只写到。http://www.guojixxxxx.com,而我想要服务器返回到微信服务器的代码却写在了控制器 getaccesstoken()方法中,这样肯定是收不到信息的。要完全的一一对应。
以下给出我在自己服务器给出的代码实例:(如需完整代码,请联系小编)
给出我的实例
//tp5实现接收什么消息,返回同样的消息。
$postobj=file_get_contents(‘php://input’);
// $postobj = $GLOBALS[‘HTTP_RAW_POST_DATA’];
$postobj=simplexml_load_string($postobj);//解析接收到的xml文件为对象
$tousername=$postobj->ToUserName;
$fromusername=$postobj->FromUserName;
$createtime=$postobj->CreateTime;
$msgtype=$postobj->MsgType;
$content=$postobj->Content;
//把接受的消息写入到记事本中
file_put_contents(‘./10txt’,$postobj);
$returnobj=”<xml><ToUserName><![CDATA[{$fromusername}]]></ToUserName><FromUserName><![CDATA[{$tousername}]]></FromUserName><CreateTime>{$createtime}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{$content}]]></Content></xml>”;
//把返回的消息写入到记事本中
file_put_contents(‘./y10.txt’,$returnobj);
// 用echo输出,返回给微信服务器,微信服务器发送给用户
echo $returnobj ;