博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信订阅号消息回复测试
阅读量:6704 次
发布时间:2019-06-25

本文共 8553 字,大约阅读时间需要 28 分钟。

最近在研究微信公众号开发,消息回复是订阅号基础的可获取的接口,因此先从这里开始练起。

我的服务端采用的是新浪的SAE平台,现在要想提交代码,是要每月上交10元的,有500M空间可用。

以腾讯云服务器为示例:,购买指导请参考。

学生党注意:腾讯公司为在读高校生提供了,1元/月即可使用腾讯云。

 

开始操作,进入微信公众开发平台后台,个人一般只能申请订阅号(限制主要功能),我这里使用的是微信的【公众平台测试帐号】。

  • 流程:
  1. 下载微信php示例代码:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html   
  2. 配置服务器:注册新浪云服务器SAE》创建应用》选择云空间(不要选择标准环境)》输入二级域名名称/应用名称》最低配置,付10元》创建成功》控制台》云应用 SAE》管理应用》代码管理》上传微信php示例代码
  3. 配置测试帐号:登录微信开发平台》开发》开发者工具》公众平台测试帐号》进入。

只要你登录微信开发平台,就可以在【公众平台测试帐号】中看到:appID / appsecret  ,这两个参数在整个开发过程中缺一不可。

  • 测试号配置:
  1. 接口配置信息 URL (这个URL地址就是你的服务器中刚建立的应用地址,比如我的是:http://1223.applinzi.com/wx_jiaj.php,域名后面的php是刚下载的示例代码名称)
  2. 接口配置信息  Token (这个Token不是appID / appsecret生成的,而是下载的php示例代码中写死的:define("TOKEN", "weixin20161208");)
  3. 接口配置信息  EncodingAESKey  是随机生成的,随便点一下就成
  4. 接口配置信息  消息加密方式,默认明文就可以

点提交,配置成功就OK了,如果提示Token验证失败,则是下载的示例代码中有点小问题,需要在接入方法valid()中增加一个type:

public function valid()    {        //判断微信现在是否做接入操作,根据$_GET["echostr"]这个参数进行判断        $echoStr = $_GET["echostr"];        //valid signature , option        if($this->checkSignature()){            //必须在这里增加header('content-type:text'); 否则,会报错“token验证失败”            header('content-type:text');            echo $echoStr;            exit;        }    }

 

下图为配置成功之后显示效果:

  示例代码:wx_jiaj.php,所有的消息推送方法,都在这个文件中配置:

valid();}else{ //如果没有获取到,就说明接入成功 $wechatObj->responseMsg();}class wechatCallbackapiTest{ //valid 接入时进行的一个操作 public function valid() { //判断微信现在是否做接入操作,根据$_GET["echostr"]这个参数进行判断 $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ //必须在这里增加header('content-type:text'); 否则,会报错“token验证失败” header('content-type:text'); echo $echoStr; exit; } } //接入之后进行的一个操作 public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //下面为获取参数信息,前面是获取的参数,后面是它的描述 $fromUsername = $postObj->FromUserName; //开发者微信号 $toUsername = $postObj->ToUserName; //接收方帐号 $keyword = trim($postObj->Content); //关键字 $Event = $postObj->Event; //关注与取消关注事件 $time = time(); //时间 $MsgType = $postObj->MsgType; //image 参数 $EventKey = $postObj->EventKey; //事件key //$textTpl 是开发文档中的回复文字的格式,参照开发者文档》消息管理》被动回复用户消息》回复文本消息 $textTpl = "
%s
0
"; //当发送一条图片信息时,推送一条消息 if($MsgType == "image"){ $MsgType = "text"; $contentStr = "你发送了一条图片信息"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $MsgType, $contentStr);//将上面的信息发送到服务器的过程中需要传的参数 echo $resultStr; } //点击菜单时,推送一条工菜单的消息 if($Event == "CLICK" and $EventKey == "V1001_TODAY_MUSIC"){ $MsgType = "text"; $contentStr = "你点击了今日歌曲"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $MsgType, $contentStr);//将上面的信息发送到服务器的过程中需要传的参数 echo $resultStr; } //订阅事件,回复图文 //ArticleCount 2 说明有两个图文,限制炎10条 //Articles 多图文标志,里面有几个item就有几个图文 //Description 图文描述消息 //PicUrl 图片地址 //如何替换 修改CDATA数组内的内容即可,只修改item的东西就可以,ToUserName~CreateTime是不需要修改的,MsgType要改为news //$textTpl 是开发文档中的回复文字的格式,参照开发者文档》消息管理》被动回复用户消息》回复图文消息 if($Event == "subscribe"){ $textTpl = "
%s
1
<![CDATA[欢迎关注医首信息]]>
"; //发送到服务器的过程需要传的参数 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time);//将上面的信息发送到服务器的过程 echo $resultStr; } //回复关键字,回复图文消息。定义关键字为“医首信息” if(!empty( $keyword )){ if($keyword == "医首信息"){ //下面为图文回复 $textTpl = "
%s
1
<![CDATA[欢迎关注医首信息]]>
"; //发送到服务器的过程需要传的参数 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time);//将上面的信息发送到服务器的过程 echo $resultStr; }else{ echo "Input something..."; } } //订阅事件,要先回复文字, //当Event为subscribe时,它就是订阅事件,参照开发者文档》消息管理》接收事件推送》关注/取消事件的参数说明 if($Event == "subscribe") { //把下面的回复关键字复制上来,修改下消息 $msgType = "text"; $contentStr = "欢迎关注医首信息"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);//将上面的信息发送到服务器的过程中需要传的参数 echo $resultStr; } //关键字回复文字 if(!empty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to jiajian"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);//将上面的信息发送到服务器的过程 echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } }}?>

所有的参数在使用前要参考文档,提前获取:

//下面为获取参数信息,前面是获取的参数,后面是它的描述                $fromUsername = $postObj->FromUserName; //开发者微信号                $toUsername = $postObj->ToUserName; //接收方帐号                $keyword = trim($postObj->Content); //关键字                $Event = $postObj->Event; //关注与取消关注事件                $time = time(); //时间                $MsgType = $postObj->MsgType; //image 参数                $EventKey = $postObj->EventKey; //事件key

每个动作在回复前,需要判断,如果符合规则,则返回一条消息或者返回一条图文消息。

推荐极客学院的教程:

 

转载地址:http://fhflo.baihongyu.com/

你可能感兴趣的文章
CMD下启动与关闭程序
查看>>
Linux存储管理(3)
查看>>
linux的txt转为windows的txt
查看>>
解决低权限用户的screen Cannot open your terminal '/dev/pts/1'问题
查看>>
美团点评开源 SQL 优化工具 SQLAdvisor 测试报告
查看>>
只用200行Go代码写一个自己的区块链!
查看>>
CentOS6.5环境 安装Keepalived和高可用服务相关参数说明
查看>>
Ansible 二(新手上路)
查看>>
国家级大数据工程研究中心落户京东
查看>>
gitlab 代码控制
查看>>
利用shell脚本“综合、集中”查看linux server常用软硬件信息
查看>>
三种方法部署YUM软件仓库
查看>>
NFS:Linux中最简单且实用的服务
查看>>
Openstack 实战讲解之-----------04-控制节点glance服务安装配置
查看>>
客户端Git的常用命令
查看>>
MongoDB分片副本集搭建
查看>>
ospf中创建末节区域
查看>>
mysql基本参数查询
查看>>
CUDA学习(六十六)
查看>>
是否将信息存储在云?
查看>>