关于微信第三方平台检测流程以及踩到的坑

直接进入主题(全网发布检测)

能点到全网发布这一步,说明你已经弄好了获取component_verify_ticketcomponent_access_token等这些参数,通常这个时候点击全网发布只会有这两个失败。在这里插入图片描述
如果其他失败的那就要好好检查一下你的代码了,或者查看其他博主的文章,这里有个推荐https://www.jianshu.com/p/0bd94af8ad7a

两个文本消息都是发送到消息与事件接收URL这里,也就是带/$APPID$的地址上,这个是我发布检查通过的代码块

 public function index(){require_once('../extend/php/WXBizMsgCrypt.php');//encodingAesKey和token均为申请三方平台是所填写的内容$encodingAesKey = '****************';$token = '****************';$appId = '****************';$timeStamp = empty($_GET ['timestamp'] ) ? "" : trim ( $_GET ['timestamp'] );$nonce = empty ($_GET['nonce'] ) ? "" : trim ( $_GET ['nonce'] );$msg_sign = empty($_GET ['msg_signature'] ) ? "" : trim ( $_GET ['msg_signature'] );$pc = new \WXBizMsgCrypt( $token, $encodingAesKey, $appId );//获取到微信推送过来post数据(xml格式)$postArr=file_get_contents('php://input');$sMsg = '';$errCode=$pc->decryptMsg($msg_sign, $timeStamp, $nonce, $postArr,$sMsg);if($errCode == 0){//处理消息类型,并设置回复类型和内容$postObj=simplexml_load_string($sMsg,'SimpleXMLElement',LIBXML_NOCDATA);//判断该数据包是否是订阅(用户关注)的事件推送if(strtolower($postObj-> MsgType) == 'event'){//如果是关注subscribe事件if(strtolower($postObj->Event== 'subscribe')){$public_name=strval($postObj->ToUserName);$map['public_name']=$public_name;$cont=M('Subscribe')->where($map)->find();//回复用户消息$content=$cont['content'];responseText($postObj,$content);}}//第三方平台全网发布检测普通文本消息测试if(strtolower($postObj-> MsgType) == 'text' &&trim($postObj->Content)=='TESTCOMPONENT_MSG_TYPE_TEXT'){$toUsername= $postObj -> ToUserName;if($toUsername== 'gh_3c884a361561'){$content= 'TESTCOMPONENT_MSG_TYPE_TEXT_callback';$res = $this->respontext($postObj,$content);//对xml信息加密后发送$jmsg = '';$sEncryptMsg = $pc->encryptMsg($res, $timeStamp, $nonce,$jmsg);return $jmsg;}}//第三方平台全网发布检测返回api文本消息测试if(strpos ($postObj->Content, 'QUERY_AUTH_CODE' ) !== false){$query_auth_code= trim(str_replace ( 'QUERY_AUTH_CODE:', '', $postObj->Content));$access_info = $this->api_readly($query_auth_code);$fromusername = json_decode(json_encode($postObj));$param['touser'] = $fromusername->FromUserName;$param['msgtype'] = 'text';$param['text']['content'] = $query_auth_code . '_from_api';$jsonStr = json_encode($param);$url='https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_info;//调用客服消息api回复文本消息$access_token = new Accesstoken();$res = $access_token->post_data($url,$jsonStr);}}}

检测时候微信会发送好几次到这个接口上的,每次信息都不同。

普通文本消息检测
如果进入到上面代码的普通文本消息检测的时候,就需要我们直接生成一段xml文本信息发送会微信,当然我们是要使用微信提供的加密方法来加密后发送。

记住要发送加密后的xml信息过去

加密后的xml信息过去

加密后的xml信息过去
重要的事情说三遍,免得你们也踩了这个坑,上面代码已经注释说明了,接下来附上回复xml信息的代码

    private function respontext($object, $content){$textTpl = "%s";$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);return $result;}

回复api文本信息

到了这里就比较麻烦了,这里需要我们获取到发送过来的信息中有
"QUERY_AUTH_CODE:queryauthcode@@@vfDdKCKMkG4XAuVWadL4EzQvPipkwLr5YHv48HFGEF6nUR5TUdWBuRLIf3vzINKCb6oOSV46jzXgvA6W_ZIqEw"
这样信息的字段,然后截取到这样一段内容queryauthcode@@@vfDdKCKMkG4XAuVWadL4EzQvPipkwLr5YHv48HFGEF6nUR5TUdWBuRLIf3vzINKCb6oOSV46jzXgvA6W_ZIqEw
在这里插入图片描述
通过调用这个接口拿到我们需要的authorizer_access_token授权码,这个后面调用回复文本信息api接口需要用到,下面是调用接口获取authorizer_access_token授权码

//根据授权码获取api回复信息中需要的数据
public function api_readly($query_auth_code){$access_token = new Accesstoken();$token = $access_token->get_component_access_token();$post['component_appid'] = "wx335de0babdad9ff8";$post['authorization_code'] = $query_auth_code;$jsonStr = json_encode($post);$url = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=".$token;$result = $access_token->post_data($url,$jsonStr);$data = json_decode($result,true);return $data['authorization_info']['authorizer_access_token'];
}

好了,获取到授权码,返回回去,编写好主动回复信息(tip:最上面的代码有些),转换成json格式,然后把拿到的authorizer_access_token放到

$url='https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$access_info;

回复信息接口的参数上,调用接口返回,这样就ok了。
说实话,官方写的文档真的太难看明白了,感觉不是同一个地球上的,我的的建议手册就适当看一下,作为辅助,主要还是看一些比较厉害的博主写的文档来进行开发吧,这样比较容易懂

新手博主,第一次写文章,请多多指教


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部