【PHP微信公众平台开发系列】

01.配置微信接口

02.公众平台示例代码分析

03.订阅事件(subscribe)处理

04.简单回复功能开发

05.天气预报功能开发

06.翻译功能开发

07.聊天机器人功能开发

08.自定义菜单功能

09.数据库操作

10.消息回复的封装

本文地址:http://www.phpchina.com/archives/view-43418-1.html

本系列由PHPChina特邀作者@David_Tang供稿,转载请注明作者信息与本文地址。

一、简介

微信公众平台提供了三种消息回复的格式,即文本回复、音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用。

二、思路分析

对于每一个POST请求,开发者在响应包中返回特定xml结构,对该消息进行响应(现支持回复文本、图文、语音、视频、音乐)。

三、文本回复

3.1 文本回复xml 结构

12345678

3.2 结构说明

3.3 具体实施

针对上面给出的xml 结构,我们只需要在对应的位置填上内容,然后格式化输出就可以了。

说明:

ToUserName 位置上填写的是$fromUsername = $postObj->FromUserName,就是把消息返回给发送信息过来的用户,即接收方账号。

FromUserName 位置上填写的是$toUsername = $postObj->ToUserName,既是开发者微信号。

这是官方的文本回复,只需实例化它的responseMsg() 方法就可以回复 “Welcome to wechat world!” 消息了。

这里我们稍做修改,返回fromUsername 和toUsername 消息,便于读者理解以上的说明。

3.4 测试结果

3.5 封装成可调用的函数

我们可以将上面的内容封装成函数,在需要回复文本的地方直接调用,方便简洁,responseText.func.inc.php 代码如下。

function _response_text($object,$content){

$textTpl = "%s

%d";

$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);

return $resultStr;

}

这样,只要传入$object 和$content,然后在需要回复文本的文件中引入该文件,然后调用 _response_text() 方法,就可以直接回复文本了。

3.6 测试代码

3.6.1 在主文件中引入回复文本的函数文件

require_once 'responseText.func.inc.php';

3.6.2 普通消息回复

public function handleText($postObj)

{

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

if(!empty( $keyword ))

{

$contentStr = "微信公众平台-文本回复功能源代码";

//$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

$resultStr = _response_text($postObj,$contentStr);

echo $resultStr;

}else{

echo "Input something...";

}

}

3.6.3 关注时回复

public function handleEvent($object)

{

$contentStr = "";

switch ($object->Event)

{

case "subscribe":

$contentStr = "感谢您关注【卓锦苏州】"."\n"."微信号:zhuojinsz";

break;

default :

$contentStr = "Unknow Event: ".$object->Event;

break;

}

$resultStr = _response_text($object, $contentStr);

return $resultStr;

}

3.7 测试结果

回复文本成功。

四、图文回复

4.1 图文回复xml 结构

12345678

2

4.2 结构说明

类似文本回复的格式,只需要在相应的位置填上对应的内容就可以回复图文信息了。

4.3 具体实施

图文回复可以是单图文,也可以是多图文,这里我们先以单图文的案例来引导读者,然后再引出多图文。

我们将回复图文的xml 结构分解成为以下三个结构,图文头,图文体,图文尾,图文体就是图文回复时看到的标题,描述,图片URL和原文URL。

$newsTplHead = "%s

1

";

$newsTplBody = "";

$newsTplFoot = "

0";

接下来,我们对三段结构分别插入对应内容:

A. $newsTplHead

$header = sprintf($newsTplHead, $object->FromUserName, $object->ToUserName, time());

B. $newsTplBody

$title = $newsContent['title'];

$desc = $newsContent['description'];

$picUrl = $newsContent['picUrl'];

$url = $newsContent['url'];

$body = sprintf($newsTplBody, $title, $desc, $picUrl, $url);

说明:$newsContent 是从主文件传入函数的图文数组。

C. $newsTplFoot

$FuncFlag = 0;

$footer = sprintf($newsTplFoot, $FuncFlag);

然后将三段进行拼接返回就可以回复单条图文了。

return $header.$body.$footer;

将以上内容写到一个函数里,命名为 _response_news() 函数,以供下面调用测试。

4.4 测试代码

4.4.1 在主文件中引入回复图文的函数文件

require_once 'responseNews.func.inc.php';

4.4.2 创建数组并传入

在主文件中,只需要向 _response_news() 函数中传入一个数组和$postObj 即可。

$record=array(

'title' =>'山塘街',

'description' =>'山塘街东起阊门渡僧桥,西至苏州名胜虎丘山的望山桥,长约七里,所以苏州俗语说“七里山塘到虎丘”...',

'picUrl' => 'http://thinkshare.duapp.com/images/suzhou.jpg',

'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000046&itemidx=1&sign=9e7707d5615907d483df33ee449b378d#wechat_redirect'

);

$resultStr = _response_news($postObj,$record);

echo $resultStr;

4.5 测试结果

点击进入查看

单图文回复测试成功。

4.6 多图文回复

有了上面的引导,读者应该能够想到回复多图文的思路了,就是将多维数组中的值循环放到相应的位置,然后拼接起来就可以了,下面进行讲解。

4.6.1 获取图文条数

$bodyCount = count($newsContent);

4.6.2 判断图文条数

因为微信限制了回复的图文消息数为10条以内,所以需要判断图文条数,如果小于10条,则图文数等于原来的图文数,如果大于等于10条,则强制限制为10条。

$bodyCount = $bodyCount < 10 ? $bodyCount : 10;

4.6.3 组织图文体

图文头和图文尾和上面单图文一样,不再赘述,主要是图文体的组织。

用foreach 循环出数组的内容并赋予图文体,并进行拼接:

foreach($newsContent as $key => $value){

$body .= sprintf($newsTplBody, $value['title'], $value['description'], $value['picUrl'], $value['url']);

}

说明:$newsContent 是从主文件传入函数的图文数组。

4.6.4 拼接并返回

return $header.$body.$footer;

将以上内容写到一个函数里,命名为 _response_multiNews() 函数,以供下面调用测试。

4.7 测试多图文

4.7.1 在主文件中引入回复多图文的函数文件

require_once 'responseMultiNews.func.inc.php';

4.7.2 创建多维数组并传入

$record[0]=array(

'title' =>'观前街',

'description' =>'观前街位于江苏苏州市区,是成街于清朝时期的百年商业老街,街上老店名店云集,名声远播海内外...',

'picUrl' => 'http://joythink.duapp.com/images/suzhou.jpg',

'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000052&itemidx=1&sign=90518631fd3e85dd1fde7f77c04e44d5#wechat_redirect'

);

......

$record[11]=array(

'title' =>'平江路',

'description' =>'平江路位于苏州古城东北,是一条傍河的小路,北接拙政园,南眺双塔,全长1606米,是苏州一条历史攸久的经典水巷。宋元时候苏州又名平江,以此名路...',

'picUrl' => 'http://joythink.duapp.com/images/suzhouScenic/pingjianglu.jpg',

'url' =>'http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NDM0NTEyMg==&appmsgid=10000056&itemidx=1&sign=ef18a26ce78c247f3071fb553484d97a#wechat_redirect'

);

$resultStr = _response_multiNews($postObj,$record);

echo $resultStr;

4.8 测试多图文结果

点击进入查看

测试多图文成功。

五、音乐回复

微信还提供了一种消息回复的格式,即音乐回复,下面我们编写程序测试一下。

注意:由于音乐版权的问题,现在很少有回复音乐的API,开放的API 查询出来的音乐信息也有很多是不正确的。所以在这里,我们上传几首音乐到自己的服务器空间测试。

本地文件:

测试是否能够正常播放:

5.1 音乐回复xml 结构

12345678

5.2 结构说明

5.3 具体实施

我们先做一个固定的歌曲回复来引导读者,然后再引出更高级别的歌曲查询回复。

5.3.1 在xml 结构的相应位置插入相应数据

5.3.2 测试代码

$resultStr = _response_music($postObj,$keyword);

echo $resultStr;

5.3.3 测试结果

5.4 模拟点歌

有了上面的简单案例引导,读者应该可以想到模拟点歌的具体实现了吧,下面就来简单介绍一下。

思路:将歌曲代码和对应的歌曲名存入数据库,用户输入歌曲名,在数据库中找到歌曲名对应的歌曲编号,然后就可以生成MusicUrl 回复用户了。

5.4.1 创建数据库

http://www.bkjia.com/PHPjc/743433.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/743433.htmlTechArticle【PHP微信公众平台开发系列】 01.配置微信接口 02.公众平台示例代码分析 03.订阅事件(subscribe)处理 04.简单回复功能开发 05.天气预报功能...

微信公众平台回复多条消息php,PHP微信公众平台开发 - 消息回复的封装_PHP教程...相关推荐

  1. 安卓微信 返回显示未读条数_Android仿微信底部菜单栏功能显示未读消息数量

    底部菜单栏很重要,我看了一下很多应用软件都是用了底部菜单栏,这里使用了tabhost做了一种通用的(就是可以像微信那样显示未读消息数量的,虽然之前也做过但是layout下的xml写的太臃肿,这里去掉了 ...

  2. 微信公众 mysql回复图片_微信公众平台开发消息回复总结介绍

    一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个PO ...

  3. 微信公众平台开发消息回复总结

     http://www.cnblogs.com/mchina/p/3364377.html   转载地址 微信公众平台开发(十) 消息回复总结 一.简介 微信公众平台提供了三种消息回复的格式,即文 ...

  4. [微信开发] 微信公众号被关注后如何回复多条消息?

    当开发微信公众号接口的时候,第一次关注以后,可以给用户回复多条自动回复消息 需要用到客服接口的功能,公众号是认证的订阅号或者是服务号 当收到关注事件以后,调用客户接口的回复消息功能,可以回复多条 可以 ...

  5. 微信公众号自动回复-底部菜单栏-关键字回复-回复2条消息(1文字,1图片)

    微信公众号自动回复-底部菜单栏-关键字回复-回复2条消息(1文字,1图片)JAVA 主要实现: 1.关注后自动回复文字内容 2.关键字回复图文消息 3.实现公众号自定义底部菜单栏 - 点击菜单栏进入链 ...

  6. 微信公众平台消息接口开发(2)-封装weixin.class.php

    微信公众平台消息接口开发(2)-封装weixin.class.php 一.封装weixin.class.php 由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处 ...

  7. 微信公众平台开发-消息管理-发送客服消息

    一.简介 当用户主动发消息给公众号的时候(包括发送信息.点击自定义菜单.订阅事件.扫描二维码事件.支付成功事件.用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以 ...

  8. 微信公众号关注回复多条信息(文字、图片、视频、跳转小程序)

    微信公众号关注回复多条信息(文字.图片.视频.跳转小程序) 对于没做过关注回复多条信息的开发来说,没有实现的思路,花费了一天的时间研究写代码.测试,现做个记录 思路 公众号后台配置关注自动回复只能配置 ...

  9. 企业微信加密消息体_微信公众平台开发者中心安全模式消息体加解密实现

    关键字:微信公众平台 消息体签名 消息体加解密 EncodingAESKey 安全模式 一.消息体加解密 微信公众平台在配置服务器时,提供了3种加解密的模式供开发者选择,即明文模式.兼容模式.安全模式 ...

最新文章

  1. python写入中文、用utf-16编码得出二进制字节串_在python中将unicode UTF16数据写入文件时出现问题...
  2. CSS类命名的语义化VS结构化方式
  3. Java SE 知识点
  4. vue 数组转集合_思想实验:如何在Vue中使localStorage具有响应式?
  5. 查看oracle会话空闲时间,使用Oracle PROFILE控制会话空闲时间
  6. C#读取数据库返回泛型集合(DataSetToList)
  7. Python笔试题汇总
  8. 孙鑫VC学习笔记:第二十讲 (一) Hook编程
  9. [No0000DD]C# StringEx 扩展字符串类 类封装
  10. 精通Hyperledger之Hyperledger composer建模语言(15)
  11. 仪表盘故障图像识别_一张图教你识别汽车故障灯!
  12. 按键精灵调用百度文字识别OCR服务
  13. 怎么用c语言测试音频文件,如果用c语言程序读取一段音频文件要如何做,具体要调用哪些函数,在网上搜索了半天,乱七八糟的,找不到什么有用的信息...
  14. 性能测试总结(performance testing)(二)
  15. 安防人眼里的“区块链玩法遛狗也能赚钱”
  16. 武侠乂 兵器招式和高级心法介绍
  17. ASP模式的机械产品分布式协同设计的研究
  18. javascript时间日期操作
  19. JAVA面试题|JAVA锁相关面试题总结(一)
  20. MicroPython-On-ESP8266——数码管的使用,从一个8段管开始

热门文章

  1. 【Redis版】spring boot高性能实现二维码扫码登录(中)
  2. RGB颜色对照表,有用mark
  3. 又到一年表白季,520它又来了!Python花式表白的几种姿势
  4. 称球问题:12个球,有一个和其它的质量不一样,有一个天平可用,怎样找出它并说明它是轻是重
  5. 如何利用智能视频行为分析预警解决方案保障校园师生安全?
  6. 六、JConsole性能分析
  7. 【Python】WPS、Excel表格处理(二) xlwt模块(xlsxwriter模块)
  8. Android——利用BaseAdapter实现GridView
  9. c++游戏源代码(自编)
  10. Javascript中Blob介绍