前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信公众号三方平台开发【全网发布及全网发布接入检测】

微信公众号三方平台开发【全网发布及全网发布接入检测】

作者头像
用户2619822
发布于 2022-06-10 08:45:13
发布于 2022-06-10 08:45:13
1.3K0
举报
文章被收录于专栏:袁威袁威

今天开始之前,纠正下上期粗心犯的一个错,在完整代码部分把if(strtolower($postObj -> MsgType) == 'event')写了两次,由于推送的内容修改无法生效, 大伙自行删除多余的判断句即可,也可以看今天最后面的完整代码。

好了,进入今天的内容,经过之前系列内容过后,接下来的代微信公众号实现业务部分跟微信公众号开发业务逻辑一样,所以公众号其他业务功能部分后面我会单独整理一套相关内容,今天,咱们就来说说微信第三方平台开发的最后一步——全网发布,因为只有进行全网发布后,我们的第三方平台才可以接收所有的微信公众号的授权,否则就只能接收测试公众号的授权。

在正式进行全网发布之前,必须先通过全网发布接入检测,意思就是此时微信服务器会通过自动化测试的方式,来检测我们开发的第三方平台的基础逻辑是否正常可用,只有在确定基础可用的情况下,才会允许第三方平台提交全网发布。

当然,在前往开放平台进行全网发布之前,我们首先要根据测试步骤,用代码实现相关逻辑,才能顺利通过全网发布,在这一步一般会出现以下三个问题:返回Api文本信息,返回普通文本信息,发送事件信息。

首先,在开发文档里,我们可以看到,官方提供了专用测试公众号信息,其中appid为 wx570bc396a51b8ff8,Username为gh_3c884a361561。

1) 发送事件信息

模拟粉丝触发专用测试公众号的事件,并推送事件消息到专用测试公众号,第三方平台需要提取推送过来的XML信息中event的值,并且第三方平台需要在5秒内立即返回按照官方要求组装成文本消息回复给粉丝,格式为:event + “from_callback”(假定event为LOCATION,则文本消息内容为: LOCATIONfrom_callback)。

这里,我们需要先判断事件信息是否属于专用测试公众号,然后组装进行回复: if($toUsername== 'gh_3c884a361561'){

         $event = $postObj-> Event;

         $content =$event.'from_callback';

         responseText($postObj,$content);

}

2)返回普通文本信息

模拟粉丝发送文本消息给专用测试公众号,第三方平台需要根据文本消息的内容进行相应的响应,这里推过来的会是一个固定内容,为TESTCOMPONENT_MSG_TYPE_TEXT,而我们也是返回一个固定文本内容即可,为TESTCOMPONENT_MSG_TYPE_TEXT_callback:

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';

                   responseText($postObj,$content);

         }

            }

3)返回Api文本信息

模拟粉丝发送文本消息给专用测试公众号,第三方平台需要在5秒内返回空串表明暂时不回复,然后再立即使用客服消息接口发送消息回复粉丝。

第三方平台接收到的文本信息为QUERY_AUTH_CODE:$query_auth_code$,这里我们只要进行“QUERY_AUTH_CODE”字段判定就可以了,在拿到$query_auth_code$的值后,需要利用$query_auth_code$的值来换取公众号的授权信息(换取授权信息实现方法见微信公众号三方平台开发【获取授权方的授权信息以及基本信息】),然后再调用发送客服消息api来给粉进行文本消息回复,其中文本消息内容为:$query_auth_code$_from_api:

if(strpos ( $postObj->Content, 'QUERY_AUTH_CODE' ) !== false){

         $query_auth_code =str_replace ( 'QUERY_AUTH_CODE:', '', $postObj->Content);

         $wechat =A('Wechat/Wechat');

         $info = $wechat->getAuthInfo($query_auth_code);

         $access_info=$info['authorization_info'] ['authorizer_access_token'];

         $param ['touser'] =$postObj ->FromUserName;

         $param ['msgtype'] ='text';

         $param ['text']['content'] = $query_auth_code . '_from_api';

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

         $res = post_data ($url, $param );

}

完整消息事件完整代码:

public function reponseMsg(){

         require_once(dirname(__FILE__).'/wxBizMsgCrypt.php');

         //encodingAesKey和token均为申请三方平台是所填写的内容

         $encodingAesKey = '公众号消息加解密Key';

         $token = '公众号消息校验Token';

         $appId = '三方平台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=$GLOBALS['HTTP_RAW_POST_DATA'];

         $msg = '';

         $errCode=$pc->decryptMsg($msg_sign, $timeStamp, $nonce, $postArr,$msg);

         if($errCode == 0){

                   //处理消息类型,并设置回复类型和内容

                   $postObj=simplexml_load_string($msg,'SimpleXMLElement',LIBXML_NOCDATA);

                   //判断该数据包是否是订阅(用户关注)的事件推送

                   if(strtolower($postObj-> MsgType) == 'event'){

                            //第三方平台全网发布检测发送事件消息测试

                            $toUsername= $postObj -> ToUserName;

                            if($toUsername== 'gh_3c884a361561'){

                                     $event= $postObj -> Event;

                                     $content= $event.'from_callback';

                                     responseText($postObj,$content);

                            }

                            //如果是关注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';

                                     responseText($postObj,$content);

                            }

                   }

                   //第三方平台全网发布检测返回api文本消息测试

                   if(strpos ($postObj->Content, 'QUERY_AUTH_CODE' ) !== false){

                            $query_auth_code= str_replace ( 'QUERY_AUTH_CODE:', '', $postObj->Content);

                            $wechat= A('Wechat/Wechat');

                            $info= $wechat ->getAuthInfo($query_auth_code);

                            $access_info=$info['authorization_info'] ['authorizer_access_token'];

                            $param['touser'] = $postObj ->FromUserName;

                            $param['msgtype'] = 'text';

                            $param['text'] ['content'] = $query_auth_code . '_from_api';

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

                            $res = post_data ( $url,$param );

                   }

                   //用户发送某一图文关键字的时候,回复图文消息

                   if(strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='图文'){

                            //这一步可从数据库中查询得到

                            $arr=array(

                                     array(

                                               'title'=>'test1',

                                               'description'=>'test1',

                                      'picUrl'=>'http://mmbiz.qpic.cn/mmbiz/mLiaE7fSUysSbbqzicX2LVsLL1HsXMRV0m6uicfiaSX9Aic43BA5vnpFOBMWAoEuaVDicoOX4HzGT8OT5QK6DRs14VkQ/0',

                                               'url'=>'https://mp.weixin.qq.com/s?__biz=MjM5NzY4MDc0MA==&tempkey=mKI6U0rlJZofvceyQdxTPAYtneMxKyhWy52ytbUZfOJzFEHMDqmYTQLQWrkrSRky&appmsgid=10000002&itemidx=1&sign=99baf31f45e2357af575c63b5b303b6a#wechat_redirect',

                                     ),

                                     array(

                                               'title'=>'test2',

                                               'description'=>'test2',

                                               'picUrl'=>'http://mmbiz.qpic.cn/mmbiz_jpg/mLiaE7fSUysTFDEZQTOvXleYwYqFN1JeLwM66Zg7dHjK3aHQxdVtwGTJgzuKJRuZCBHljIvVLkvZ2CADJ6paJYQ/0?wx_fmt=jpeg',

                                               'url'=>'https://mp.weixin.qq.com/s?__biz=MjM5NzY4MDc0MA==&tempkey=mKI6U0rlJZofvceyQdxTPDXw5wcPw4rpHzkwOv4U7kDY1V%2BUUirAB0C9oEEsX5HQB8Uv1Ut2zj3buNkRPh6KNYWVyTaxebMkb8IcD9FjNbpcqY0mdRbCxRnbIjtmNBd37cKXm3Egbo1KWdkSEy5NZg%3D%3D&chksm=315123030626aa15c3e454afbd931ec3458149b13370999b16bc72b876326977e7d68b406a8c#rd',

                                     )

                            );

                            responseNews($postObj,$arr);

                   }else{

                            //当微信用户发送关键字,公众号回复对应内容

                            $public_name=strval($postObj->ToUserName);

                            $keyword=strval(trim($postObj -> Content));

                            $log['public_name']=$public_name;

                            $log['keyword']=array('like','%'.$keyword.'%');

                            $con=M('Keyword')->where($log)->select();

                            foreach($conas $vo => $k){

                                     $conn=$con[$vo]['content'];

                            }

                            if($conn){

                                     $content=$conn;

                            }else{

                                     $lg['public_name']=$public_name;

                                     $lg['keyword']='';

                                     $con=M('Keyword')->where($lg)->select();

                                     foreach($conas $vo => $k){

                                     $conn=$con[$vo]['content'];

                            }

                            $content=$conn;

                            }

                            responseText($postObj,$content);

                   }

         }

                }

完成后,再前往开放平台,点击全网发布,等待一分钟左右,看到所有状态都为成功,则代表全网发布接入检测通过了,点击【确定】,就愉快的发布咯。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 袁威 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
微信公众平台开发(十) 消息回复总结
微信公众平台提供了三种消息回复的格式,即文本回复、音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用。
全栈程序员站长
2022/09/20
2.1K0
微信公众平台开发(十) 消息回复总结
微信开放平台第三方代小程序开发,授权事件、消息与事件通知总结
关于微信开放平台第三方代小程序开发的两个事件接收推送通知,是开放平台代小程序实现业务的重要功能。
悟空码字
2023/11/20
6601
微信开放平台第三方代小程序开发,授权事件、消息与事件通知总结
微信公众号精选采坑记
微信精选是一个常见的接口api。在此例中,将实现一个回复公众号关键字,实现“全网”文章查询功能。有兴趣的读者可关注本号自己试试。如图。
一粒小麦
2019/07/18
5520
微信公众号精选采坑记
公众号服务器搭建与交互原理
自此已经成功创建 http://1.maizi.applinzi.com 这个应用。
一粒小麦
2019/07/18
2.2K0
公众号服务器搭建与交互原理
微信公众号三方平台开发【代微信公众号接收消息事件并响应】
今天要讲的是代微信公众号接收消息并进行回复,这里要用到的就是咱们之前在微信公众号三方平台开发【帐号注册、平台创建】里写到的“公众号消息与事件接收URL”,在接收的目标方法里,我们首先要获取到微信推送过来post数据(xml格式),然后对其进行解密操作,从而得到消息内容。
用户2619822
2022/06/10
1K0
微信公众号三方平台开发【获取授权方的授权信息以及基本信息】
今天开始之前,先对上期的内容做一个小的补充,第三方平台在开发(即待全网发布)模式下,用来测试的微信公众号必须为第二期里说到的“授权测试公众号列表”(即测试白名单)里填写的微信公众号,否则会出现授权失败提示。
用户2619822
2022/06/10
1.7K0
微信公众号三方平台开发【获取授权方的授权信息以及基本信息】
PHP memcache在微信公众平台的应用方法示例
本文实例讲述了PHP memcache在微信公众平台的应用方法。分享给大家供大家参考,具体如下: 现在微信公众平台大多数互动都是用户发送信息->微信分析并返回结果,这种模式功能比较单一。这里介绍另一种互动模式:用户发送信息->微信分析信息并提示下一步操作->用户发送信息->.......->微信返回结果。本文介绍运用sae里的memcache实现以上模式。 思路: 1、用户发送消息,微信会记录用户唯一的openid,将它的值赋予$fromUsername。 2、用memcache保存两个数据,一个为上一次用户发送的消息,另一个随便定义一个值(示例中为1),做判断用户动作之用。 3、用$fromUsername 作为key定位。 示例代码如下:
用户2323866
2021/07/07
3930
微信公众号三方平台开发【生成授权页】
之前我们讲过,在获取到预授权码之后,我们需要在自己的网站中设置授权页入口(如下图),从而引导微信公众号管理员进入到授权页,对第三方平台进行微信公众号的托管授权。
用户2619822
2022/06/10
1K0
微信公众号三方平台开发【生成授权页】
微信公众号开发(一)服务器及接口的配置
关于微信公众号中的订阅号和服务的区别这里不多加讨论,网上有很多资源可以搜到,这里直接进入正题,如果是个人开发者,这里建议使用测试号进行开发学习,测试号的权限要比个人订阅号要多的多,而本篇博客也是基于测试号进行开发的。
全栈程序员站长
2022/09/06
8.8K1
微信公众号开发(一)服务器及接口的配置
PHP微信开发入门(二)
微信服务器消息推送 微信的消息推送方式是客户操作微信发生一系列事件,然后腾讯微信服务器发送一个XML数据POST请求把事件描述发送到你填写的服务器URL上,你的服务器处理完结果后,将数据输出给微信服务
Pulsar-V
2018/04/18
1.7K0
微信公众号平台开发测试怎么做_软件测试怎么测小程序
公众账号需要根据不同微信用户的不同消息做出不同的响应,所以每一个公众账号需要开发自己独有的系统,这套系统需要运行在公网环境下,但是我们通常普通开发人员没有这个条件,所以我选择了新浪云(天真的我以为是免费的,结果花了10个小洋)。
全栈程序员站长
2022/11/17
1.6K0
微信公众号平台开发测试怎么做_软件测试怎么测小程序
Java微信公众号开发(附源码!!!)
笔者最近在为一个艺考服务团队开发手机端的服务,由于开发app需要的时间较长,所以选择开发微信公众号。本人比较擅长Java开发,所以本文是基于Java语言的公众号开发。话不多说,直接进入正题。
全栈程序员站长
2022/08/29
7440
Java微信公众号开发(附源码!!!)
公众号关注/订阅事件-微信公众号开发
微信公众号开发之关注事件(订阅事件),当我们启用开发者设置后,微信本身的消息回复将无法使用,那么在用户关注我们公众号的时候就没有任何反馈了, 对用户体验是非常不友好的。下面教大家如果做关注事件,既用户关注公众号,系统给用户一个反馈。
申霖
2019/12/27
7.8K0
公众号关注/订阅事件-微信公众号开发
【黄啊码】php结合微信公众号实现裂变海报(基本技术点)
微信公众号裂变式营销代码实现,先讲下基础原理,先生成带有用户参数的二维码,然后用php自带的gd库处理,生成带有用户头像,昵称,参数二维码,营销信息的自定义图片,再将图片传入微信公众号临时素材,当其他用户扫描这个专属推荐码的时候,获取用户的昵称返回给推荐者,并存入数据库,以记录当前有多少人扫描了二维码。
黄啊码
2022/06/15
9620
相关推荐
微信公众平台开发(十) 消息回复总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档