本节书摘来自华章出版社《微信公众平台开发最佳实践》一 书中的第3章,第3.1节,作者:方倍工作室,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第3章 基 础 接 口

基础接口是微信公众账号在申请后就默认拥有而不需要通过微信认证获得的接口。微信公众平台开发者中心启用之后,需要使用基础接口实现基本消息的接收与发送。基础接口包括三个主要的部分:接收用户消息,发送被动响应消息,接收事件推送消息。本章将介绍这三个部分是如何实现的。

3.1 接收用户消息 

微信公众账号能够接收用户发送的六种格式的消息:文本(包括表情)、图片、语音、视频、地理位置、链接。下面将分别介绍这六种消息。

3.1.1 文本消息

用户向微信公众账号发送文本消息的示例如图3-1所示。
用户发送文本消息时,微信公众账号接收到的XML数据格式如下所示:

<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName><FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_
ruZGsfk]]></FromUserName><CreateTime>1359028446</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[微信公众平台开发教程]]></Content><MsgId>5836982729904121631</MsgId>
</xml>```
用户发送的文本消息的参数及描述如表3-1所示。<div style="text-align: center"><img src="https://yqfile.alicdn.com/30b5023f90f46c2ca2aa5bcb23b987dfbb81d72f.png" width="" height="">
</div>####3.1.2 图片消息
用户向微信公众账号发送图片消息的示例如图3-2所示。
<div style="text-align: center"><img src="https://yqfile.alicdn.com/4ca8680b910d0e600117d0f85744f5b498eab289.png" width="" height="">
</div>用户发送图片消息时,微信公众账号接收到的XML数据格式如下所示:
<ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
<FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
<CreateTime>1359028479</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[http://mmbiz.qpic.cn/mmbiz/L4qjYtOibummHn90t1mnaibYiaR8ljyicF3MW7XX3BLp1qZgUb7CtZ0DxqYFI4uAQH1FWs3hUicpibjF0pOqLEQyDMlg/0]]></PicUrl>
<MsgId>5836982871638042400</MsgId>
<MediaId><![CDATA[PGKsO3LAgbVTsFYO7FGu51KUYa07D

0C_Nozz2fn1z6VYtHOsF59PTFl0vagGxkVH]]>
`

用户发送图片消息的参数及描述如表3-2所示。

3.1.3 语音消息

用户向微信公众账号发送语音消息的示例如图3-3所示。

用户发送语音消息时,微信公众账号接收到的XML数据格式如下所示:

<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName><FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_
ruZGsfk]]></FromUserName><CreateTime>1359028025</CreateTime><MsgType><![CDATA[voice]]></MsgType><MediaId><![CDATA[hGm9wmKth8RO_tuv5k9fJkSbovXWzZ
VYwG2jSsL7ukCqq6q1SiLzYnFEngFNUijs]]></MediaId><Format><![CDATA[amr]]></Format><MsgId>5836980921722890003</MsgId><Recognition><![CDATA[]]></Recognition>
</xml>```
用户发送语音消息的参数及描述如表3-3所示。<div style="text-align: center"><img src="https://yqfile.alicdn.com/bc9b8b4915eb20983b5184732d830ba369a269e7.png" width="" height="">
</div>####3.1.4 视频消息
用户向微信公众账号发送视频消息的示例如图3-4所示。
<div style="text-align: center"><img src="https://yqfile.alicdn.com/e59d3fb62c47745e4e4104628c3e64f1767775a5.png" width="" height="">
</div>用户发送视频消息时,微信公众账号接收到的XML数据格式如下所示:
<ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
<FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_

ruZGsfk]]>

<CreateTime>1359028186</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<MediaId><![CDATA[DBVFRIj29LB2hxuYpc0R6VLyxwgyCH

ZPbRj_IIs6YaGhutyXUKtFSDcSCPeoqUYr]]>

<ThumbMediaId><![CDATA[mxUJ5gcCeesJwx2T9qsk62YzI

clCP_HnRdfTQcojlPeT2G9Q3d22UkSLyBFLZ01J]]>

<MsgId>5836981613212624665</MsgId>
用户发送视频消息的参数及描述如表3-4所示。
<div style="text-align: center"><img src="https://yqfile.alicdn.com/49a817be659a338d6a671b1c1608f5d4b27596be.png" width="" height="">
</div>####3.1.5 地理位置消息
用户向微信公众账号发送地理位置消息的示例如图3-5所示。
<div style="text-align: center"><img src="https://yqfile.alicdn.com/beaa7aae2fb63c1d09f95861fc0aa580d9afb711.png" width="" height="">
</div>用户发送地理位置消息时,微信公众账号接收到的XML数据格式如下所示:
<ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
<FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_

ruZGsfk]]>

<CreateTime>1359036619</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>22.539968</Location_X>
<Location_Y>113.954980</Location_Y>
<Scale>16</Scale>
<Label><![CDATA[中国广东省深圳市南山区深南大道9001号 

邮政编码: 518053]]>

<MsgId>5837017832671832047</MsgId>

`
用户发送地理位置消息的参数及描述如表3-5所示。

3.1.6 链接消息

用户向微信公众账号发送链接消息的示例如图3-6所示。

用户发送链接消息时,微信公众账号接收到的XML数据格式如下所示:

<xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjl2LYdfTAM-oxDgB4XZ
cnc8]]></FromUserName> <CreateTime>1359709372</CreateTime> <MsgType><![CDATA[link]]></MsgType> <Title><![CDATA[微信公众平台开发者的江湖]]></Title> <Description><![CDATA[陈坤的微信公众号这段时间大火,大家...]]></Description> <Url><![CDATA[http://www.cnblogs.com/txw1958/]]></Url> <MsgId>5839907284805129867</MsgId>
</xml> ```用户发送的链接消息的参数及描述如表3-6所示。
<div style="text-align: center"><img src="https://yqfile.alicdn.com/2dfbbe59908e3344d57a154ea05955c30eafb0a2.png" width="" height="">
</div>####3.1.7 案例
前面的章节已经介绍了各种基础消息,本节将用代码实现上面的各种消息类型并且做出相应的回复处理。代码如下所示:.

<?php

//
// 接收用户消息
// 微信公众账号接收到用户的消息类型判断
//

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {

$wechatObj->responseMsg();

}else{

$wechatObj->valid();

}

class wechatCallbackapiTest
{

public function valid()
{$echoStr = $_GET["echostr"];if($this->checkSignature()){echo $echoStr;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;}
}public function responseMsg()
{$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$RX_TYPE = trim($postObj->MsgType);//用户发送的消息类型判断switch ($RX_TYPE){case "text":    //文本消息$result = $this->receiveText($postObj);break;case "image":   //图片消息$result = $this->receiveImage($postObj);break;case "voice":   //语音消息$result = $this->receiveVoice($postObj);break;case "video":   //视频消息$result = $this->receiveVideo($postObj);break;case "location"://位置消息$result = $this->receiveLocation($postObj);break;case "link":    //链接消息$result = $this->receiveLink($postObj);break;default:$result = "unknow msg type: ".$RX_TYPE;break;}echo $result;}else {echo "";exit;}
}/** 接收文本消息*/
private function receiveText($object)
{$content = "你发送的是文本,内容为:".$object->Content;$result = $this->transmitText($object, $content);return $result;
}/** 接收图片消息*/
private function receiveImage($object)
{$content = "你发送的是图片,地址为:".$object->PicUrl;$result = $this->transmitText($object, $content);return $result;
}/** 接收语音消息*/
private function receiveVoice($object)
{$content = "你发送的是语音,媒体ID为:".$object->MediaId;$result = $this->transmitText($object, $content);return $result;
}/** 接收视频消息*/
private function receiveVideo($object)
{$content = "你发送的是视频,媒体ID为:".$object->MediaId;$result = $this->transmitText($object, $content);return $result;
}/** 接收位置消息*/
private function receiveLocation($object)
{$content = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label;$result = $this->transmitText($object, $content);return $result;
}/** 接收链接消息*/
private function receiveLink($object)
{$content = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->

Description.";链接地址为:".$object->Url;

    $result = $this->transmitText($object, $content);return $result;
}/** 回复文本消息*/
private function transmitText($object, $content)
{$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$result = sprintf($textTpl, $object->FromUserName, $object-> ToUserName, time(), $content);return $result;
}

}
?>`
在responseMsg()方法中,先提取消息类型$postObj->MsgType,从而实现各种消息类型的分离。在类wechatCallbackapiTest中,为每种消息类型定义了接收方法函数。在每个方法里面,返回消息的主要特征值,组成文本消息作为内容回复。

《微信公众平台开发最佳实践》——第3章 基 础 接 口 3.1 接收用户消息相关推荐

  1. 《微信公众平台开发最佳实践》——2.4 本章小结

    本节书摘来自华章出版社<微信公众平台开发最佳实践>一 书中的第2章,第2.4节,作者:方倍工作室,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.4 本章小 ...

  2. 《微信公众平台开发最佳实践》——2.1 新浪SAE应用

    本节书摘来自华章出版社<微信公众平台开发最佳实践>一 书中的第2章,第2.1节,作者李骏 边思,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.1 新浪SA ...

  3. 微信公众平台开发最佳实践(第2版)

    <微信公众平台开发最佳实践 第2版> 微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 前言 出版说明 自从方倍工作室在博客园推出微信 ...

  4. 微信公众平台开发最佳实践

    <微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口 ...

  5. 《微信公众平台开发最佳实践》—— 1.3 微信公众平台的使用

    本节书摘来异步社区<微信公众平台开发最佳实践>一书中的第1章,第1.3节,作者:方倍工作室,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.3 微信公众平台的使 ...

  6. 《微信公众平台开发最佳实践》——导读

    前 言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发入门教程>的阅读量超过5 ...

  7. 《微信公众平台开发最佳实践》读书笔记

    国庆期间看了大部分,现在补完.一些东西看了也不是很懂,权且先记录下来,备忘.感觉是:相关的开发还是比较容易的,主要要搞清对应的接口和URL,就是查手册吧.难怪猪八戒上一堆的几千块钱就可以开发的服务.估 ...

  8. 微信公众平台开发(82) 天气预报

    在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能.我们将使用中国天气网的气象数据接口来获取天气信息. 这篇教程将介绍以下内容: 获取中国天气网的气象数据 在微信公众平台中回复天气 一.中国 ...

  9. 微信公众平台开发(104) 自定义菜单扫一扫、发图片、发地理位置

    关键字:微信公众平台 自定义菜单 扫一扫 发图片 发地理位置 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-menu-new-type.htm ...

最新文章

  1. 【老孙随笔】关羽和吕蒙——天才的失败
  2. Python ndarray.strides用法
  3. Boost:使用accumulator_set <>和std :: for_each()计算一些有用的统计信息
  4. Python3 - 时间处理与定时任务
  5. 设计模式:状态模式(State)
  6. Dapr微服务应用开发系列2:Hello World与SDK初接触
  7. 九度OJ 1048:判断三角形类型
  8. 数学归纳法的相关证明
  9. git log --stat的使用说明
  10. JUC中Executor基本知识
  11. mysql 存储过程 后面慢_MySQL存储过程执行慢
  12. JVM内存模型和结构
  13. 弱电箱只埋了一根网线时,如何上网和IPTV兼顾?
  14. 串口转以太网使用方法
  15. 深度学习图像-半自动和自动标注工具
  16. 长时间看电脑的朋友,怎么保护您的眼睛
  17. 什么是职业测评?做职业测评有什么作用?
  18. 树莓派3安装win10arm 系统
  19. A brief introduction to complex analysis
  20. 无压低温烧结银:SiC芯片封装的关键材料

热门文章

  1. mysql 多个游标_mysql 存储过程中使用多游标
  2. linux ssh服务的优化,SSH服务端配置、优化加速、安全防护
  3. nmcli命令详解_【高新课堂】第一百二十五期Liunx必备命令
  4. android wear 2.0 moto360 二代,最好看的 Android Wear, 二代 Moto 360 可能就是这样了
  5. 计算机网络日,《计算机网络原理》教学日历[汇编].pdf
  6. 蒸汽机器人布里茨天赋_LoL蒸汽机器人符文天赋_S10机器人辅助出装
  7. javascript二维数组转置_VBA数组拆分及维数的转换
  8. Java基础:JavaNIO 之 内存映射文件原理
  9. 如何将某个groupbox中的数据赋值到另一个groupbox_React中的数据和数据流
  10. linux 触摸屏驱动编写