参考微信公众平台开发者文档

https://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html

  1. 下载示例代码
  2. 将示例代码通过FTP传至自己的服务器
  3. 配置域名和Token(我这里是dandan)
  4. 随机生成EncodingAESKey
  5. 验证

新定义一个方法

public function index(){
if (isset($_GET['echostr'])){
$this->valid();
} else {
$this->responseMsg();
}

注释掉

//$wechatObj->valid();

新加一行

$wechatObj->index();

开发者文档->消息管理->被动回复消息

微信的示例代码里面自带了一个回复文本消息的XML数据包

if(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}

示例代码改到这一步的话,你发送任意一个字符给公众号,他都会回复你

Welcome to wechat world!

对比一下文本消息、图片消息,语音消息的数据包结构

文本消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

文本消息

图片消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>

图片消息

语音消息

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<Voice>
<MediaId><![CDATA[media_id]]></MediaId>
</Voice>
</xml>

语音消息

可以发现MsgType代表的就是消息类型,语音消息和图片消息都有一个MediaID。
图片、语音、音乐、还有视频。这些都属于媒体,上传到微信服务器后都会生成一个MediaID,相当于每个文件的"身份证"。

微信的示例代码中没有回复图片消息和语音消息的数据包,所以需要导入。

            $imgTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>";$voiceTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Voice><MediaId><![CDATA[%s]]></MediaId></Voice></xml>";

还有一个就是默认的示例代码中没有消息类型,所以需要添加一个变量。

$type = $postObj->MsgType;

然后用If 语句判断消息类型做出相应的回复。

  1. 用户发送文本消息回复给用户 文本消息+'用户发送的文本'。
  2. 用户发送图片消息回复给用户同一张图片。
  3. 用户发送语音消息回复给用户同样的语音消息。
            if($type == 'text') {$str = '文本消息' . $keyword; $MsgType = 'text';$echo = sprintf($textTpl,$fromUsername,$toUsername,$time,$MsgType,$str);}else if ($type == 'image'){$MsgType = 'image';$echo = sprintf($imgTpl,$fromUsername,$toUsername,$time,$MsgType,$postObj->MediaId);}else if ($type =='voice'){$MsgType = 'voice';$echo = sprintf($voiceTpl,$fromUsername,$toUsername,$time,$MsgType,$postObj->MediaId);}

这里要注意的是sprintf()里面需要交换fromUsername和toUsername的顺序,其他的变量顺序不能颠倒,如果颠倒则公众号无法正常回复。因为fromUsername既代表用户发给你,也代表你发送给用户,toUsername同理,微信里面还有很多东西可以去尝试比如语音识别接口等等。

完整代码如下

<?php
/*** wechat php test*///define your token
define("TOKEN", "dandan");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
$wechatObj->index();class wechatCallbackapiTest
{public function index(){if (isset($_GET['echostr'])){$this->valid();} else {$this->responseMsg();}}public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){echo $echoStr;exit;}}public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$type = $postObj->MsgType;$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";$imgTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>";$voiceTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Voice><MediaId><![CDATA[%s]]></MediaId></Voice></xml>";if($type == 'text') {$str = '文本消息' . $keyword; $MsgType = 'text';$echo = sprintf($textTpl,$fromUsername,$toUsername,$time,$MsgType,$str);}else if ($type == 'image'){$MsgType = 'image';$echo = sprintf($imgTpl,$fromUsername,$toUsername,$time,$MsgType,$postObj->MediaId);}else if ($type =='voice'){$MsgType = 'voice';$echo = sprintf($voiceTpl,$fromUsername,$toUsername,$time,$MsgType,$postObj->MediaId);}echo $echo;}else {echo "";exit;}}private function checkSignature(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];    $token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}
}?>

转载于:https://www.cnblogs.com/aizc/p/7576296.html

微信公众平台配置服务器之后实现自动回复相关推荐

  1. php微信接口怎么开发,php微信公众平台配置接口开发程序的方法实例详解

    这篇文章主要为大家详细介绍了php微信公众平台配置接口开发程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在阅读这篇文章之前你要做以下的准备: 1.注册一个订阅号(通过微信公众平台https: ...

  2. 微信公众平台修改服务器,微信公众平台开发配置及自定义分享

    刚刚做了微信的自定义分享,折腾了好一会,完了记个笔记. 微信JS-SKD说明文档 本次测试需要:通过ICP备案的域名.已认证的微信公众号 配置篇 1.设置>公众号设置>功能设置>JS ...

  3. Web API实现微信公众平台开发-服务器验证

    背景 最近开发微信公众号相关接口,在这里记录下微信公众号相关各项功能的实现. 先决条件 1.一台可部署web服务的服务器或者云平台(本地可以搞个花生壳域名). 2.一个可以正常使用的微信公众账号,开始 ...

  4. 申请阿里云服务器并配置SSL证书(附带微信公众号配置服务器)

    首先大家要了解到自己的笔记本连接wifi是没有公网的,当然建议大家在公司测试,毕竟在工作空余时间学习学习提升一下技术还是比较好的 首先服务器配置,最重要的一点 要有自己的服务器, 如果有公网的话 可以 ...

  5. 微信小程序开发入门(连载)—— 微信公众平台配置

    上一篇:微信小程序开发入门(连载)-- 开发前的准备工作 登录微信公众平台(https://mp.weixin.qq.com),点击左侧导航栏中的"开发",点击"开发设置 ...

  6. 微信公纵平台基本配置php_PHP实现微信扫码登陆(三)--微信公众平台配置

    1. 公众平台配置 登录微信公众平台 开发--> 基本配置, 将服务器ip12.23.34.45加入到ip白名单中 image.png 验证token image.png 此时点击提交, 肯定会 ...

  7. 微信公众号接入web服务器,asp.net Web API 接入微信公众平台验证服务器,接收微信发送的POST请求...

    验证签名,接入微信公众平台:不能直接返回String,直接返回String微信服务器不接受. // GET: api/checkSignature/5 public HttpResponseMessa ...

  8. 为什么有时候微信服务器不响应,django后台微信公众平台提示服务器没有响应如何解决...

    后台:nginx+uwsgi+django 微信公众平台是ajax请求的吗?django该如何处理? 微信GET请求时uwsgi打印的信息: [pid: 1797|app: 0|req: 4/4] 1 ...

  9. 微信公众平台配置——URL、Token和JS安全域名

    无论是正式的微信公众号还是测试账号,都需要配置URL和Token,用于验证服务器是否配置正确,如下图. 图中的URL除了包括协议.域名,还需要具体的接口路径,比如这里就是"/wx/enter ...

  10. 微信公众号配置服务器地址并配置url

    1:首先在微信配置服务器地址上填写你的域名,必须是80端口和http或者https的域名,一级二级域名都行 2:打开wxauth文件,开始写 <?phpnamespace app\wxauth\ ...

最新文章

  1. 【ACM】杭电OJ 1009 (FatMouse' Trade)。
  2. if __name__ == __main__
  3. Keras【Deep Learning With Python】CNN卷积神经网络(看不懂你打我系列)
  4. echarts toolbox 自定义工具
  5. Adebe CC 2020中文版
  6. MySQL安装失败问题
  7. Veeam Backup Replication试用(三):配置备份(Backup Job)与恢复(Restore)
  8. linux交换分区目录,Linux添加swap交换分区
  9. 因特网上的计算机通常使用的网络协议为,计算机网络原理自考2015年10月真题
  10. 百万年薪的腾讯员工买得起深圳房子吗?
  11. JavaScript 遗漏知识再整理;错误处理,类型转换以及获取当前时间、年份、月份、日期;...
  12. 事件冒泡、事件捕获、事件委托
  13. cd40系列芯片_CD40,CD45系列芯片功能大全
  14. 搭建自己的wiki知识管理系统
  15. 互联网 年龄歧视_太老了,无法玩:年龄歧视和游戏
  16. dbavear 连接hive
  17. 电影网站 php asp,moviewebsite 这是一个电影网站的源码,基于asp技术实现.仅供交流学习 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
  18. 关于Mysql的驱动(org.gjt.mm.mysql.Driver)问题
  19. gitpc段提交失败schannel: next InitializeSecurityContext failed: Unknown error (0x80092013
  20. 技术博客那些事儿-如何写好博客

热门文章

  1. 马斯克喊话库克:昨天你对我爱答不理,今天我让你高攀不起
  2. oracle 设置 锁模式,oracle表锁的几种模式v$locked_object-locked_mode
  3. 高等数学:一元函数积分学
  4. 深入PCI与PCIe
  5. Java单词查询小程序
  6. 服务器防护不住,可选用高防IP,有效防止各类攻击,保障服务器正常运行
  7. 信息检索的基本方法(1)
  8. 关于爬虫学习的一些小小记录(二)——正则表达式匹配
  9. java高效快速读取CSV文件
  10. coreldraw梯形校正_CDR绘图教程,教你CorelDRAW如何绘制等腰梯形