微信公众平台开发入门教程(图文详解)

9158APP 0

在本入门教程中,我们假设您已经具备PHP 语言程序、MySQL 数据库、计算机网络通信和XML 语言的基本知识。如果还没有,请先学习相关知识。我们以微信公众号方贝工作室(账号:pondbaystudio,底部二维码)为例。本入门教程将引导您完成以下任务: 创建百度云平台应用启用微信公众平台开发模式,获取订阅、文字、图片、语音、视频消息回复文字、图形和音乐消息程序开发创建百度云应用申请帐号登录http://developer.baidu.com/bae,使用邮箱或手机注册帐号。注册需要绑定手机并验证邮箱。

创建应用注册并登录成功后,点击右上角

,弹出如下窗口。

自行填写应用程序名称,访问方式选择“移动Web应用程序”,然后单击“确定”。注:下面的教程中,你可以把我填写的pondbay全部改成你对应的名字。如果你还没想好名字,最简单的方法就是用两个字符qq + qq 号,比如square 时代工作室的QQ 是1354386063,那么把pondbay 改成qq1354386063'

选择“云环境(BAE)”,

在新窗口中填写应用域名的名称,环境类型选择PHP,其他根据自己的需要选择或者使用默认值如上图,然后点击确定。注:此处填写的域名将在填写下面的网址时使用。你可以先保存一下。创建版本

在版本管理中,点击创建新版本

版本号填0并保存。

上传代码。将以下代码中的标记更改为您的名字并将其保存为index.php。注:此处填写的Token将在填写下面的URL时使用。你可以先保存一下。复制代码如下:php/* 方贝工作室http://www.cnblogs.com/txw1958/CopyRight 2013 www.doucube.com All Rights Reserved*/define('TOKEN', 'pondbay');$wechatObj=new wechatCallbackapiTest( ) ;$wechatObj-valid();类wechatCallbackapiTest{ 公共函数valid() { $echoStr=$_GET['echostr']; if($this-checkSignature()){ 回显$echoStr;出口; } } 私有函数checkSignature () { $signature=$_GET['signature']; $timestamp=$_GET['timestamp']; $nonce=$_GET['nonce']; $令牌=令牌; $tmpArr=数组($token, $timestamp, $nonce);排序($tmpArr); $tmpStr=内爆( $tmpArr ); $tmpStr=sha1( $tmpStr ); if( $tmpStr==$signature ){ 返回true; }否则{ 返回false; } }}?然后压缩成zip格式

这将生成一个index.zip 文件。返回版本管理

选择包上传更新

选择刚刚压缩的zip包,点击上传。

确认生效点击

,点击后如下图。

百度云应用创建成功。微信公众平台开发模式高级功能微信公众平台地址:https://mp.weixin.qq.com 登录微信公众平台后台,选择高级功能

进入后会看到两种模式

我们需要关闭编辑模式。点击编辑模式输入

滑动关闭

开发模式进入开发模式

点击成为开发者

弹出URL和Token填写框

这里的URL是用于创建百度云应用的域名,包括duapp.com,Token是index.php中定义的值。 URL:http://pondbay.duapp.com Token:pondbay 填写下图,

提交成功

然后滑动右上角的启用按钮。

至此,您已经成功启用开发模式。接收消息类型目前,普通用户向公众号推送的消息有五种格式:文字(含表情)、语音、图片、视频、位置、链接。名片发送失败。下面对这五种类型进行详细说明: 1、发送文字(包括表情)的后台格式:复制代码如下:ATA [text]]/MsgTypeContent![CDATA[Hello]]/ContentMsgId5836982729904121631/MsgId/xml发送表情背景格式复制代码代码如下:xmlToUserName![CDATA[gh_680bdefc8c5d]]/ToUserNameFromUserName![CDATA[oIDrpjqASyTPnxRmpS9O_ru ZGsfk]]/FromUserNameCreateTime1359044526/CreateTimeMsgType ![CDATA[text]]/MsgTypeContent![CDATA[/)/:)/:)/:)/:)]]/ContentMsgId5837051792978241864/MsgId/xmlXML 格式说明复制代码代码如下: ToUserName 消息接收者微信ID,一般为公众平台账号微信ID FromUserName 消息发送者微信ID CreateTime 消息创建时间MsgType 消息类型;短信内容为textContent 消息内容MsgId 消息ID号可以看出,文字和表情的消息类型均为文本[html] 2、图片发送后台格式:[code]xmlToUserName![CDATA[gh_680bdefc8c5d]]/ToUserNameFromUserName![ CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]/FromUserNameCreateTime1359028479/CreateTimeMsgType![CDATA[image]]/MsgTypeP icUrl![CDATA[http://mmsns.qpic .cn/mmsns/L4qjYtOibuml238YYBcfS2FQ8JtNN69Bc4 bbbscvQRrljbedVjlMEAA/0]]/PicUrlMsgId5836982871638042400/MsgId/xmlXML 格式说明复制代码代码如下如下: ToUserName 消息接收者微信,一般为公众平台账号微信FromUserName 消息发送者微信CreateTime 消息创建时间MsgType 消息类型;图片消息为imagePicUrl 图片链接地址,可以使用HTTP GET 获取MsgId 消息ID 3、语音发送语音背景格式:复制代码代码如下:028025 /CreateTimeMsgType![CDATA[voice]]/MsgTypeMediaId![CDATA[hGm9wmKth8RO_tuv5k9fJkSbovXWzZVYwG2jSsL7ukCqq6q1SiLzYnFEngFNUijs]]/MediaIdFormat![CDATA[amr]]/Format消息ID58369809217 22890003/消息ID/xmlXML格式解释复制代码代码如下: ToUserName 消息接收者微信ID,一般为公众平台账号微信ID FromUserName 消息发送者微信ID CreateTime 消息创建时间MsgType 消息类型;语音消息是voiceMediaId Media IDFormat 语音格式,这里是amrMsgId消息ID号附件:AMR接口介绍全称是Adaptive Multi-Rate,主要用于移动设备的音频,压缩比比较大,但质量较差与其他压缩格式相比相对较差。由于多用于人声和通话,所以效果还是很好的。

4、视频发送视频背景格式:复制代码如下:xmlToUserName![CDATA[gh_680bdefc8c5d]]/ToUserNameFromUserName![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]/FromUserNameCreateTime1359028186/CreateTimeMsgType![CDATA[video]]/MsgTypeMedia Id![CDATA[DBVF] RIJ29LB2hxuYpc0R6VLyxwgyCHZPbRj_IIs6YaGhutyXUKtFSDcSCPeoqUYr ]] /MediaIdThumbMediaId![CDATA[mxUJ5gcCeesJwx2T9qsk62YzIclCP_HnRdfTQcojlPeT2G9Q3d22UkSLyBFLZ01J]]/ThumbMediaIdMsgId5836981613212624665/MsgId/xmlXML格式说明副本代码如下:ToUser名称消息接收方微信ID,一般为公众平台微信ID FromUserName 消息发送方微信ID CreateTime Message创建时间MsgType 消息类型;视频消息是videoMediaId媒体IDThumbMediaId媒体缩略图ID? MsgId 原消息ID号:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 5.位置发送位置后台格式:复制code代码如下:xmlToUserName![CDATA[gh_680bdefc8c5d]]/ToUserNameFromUserName![CDATA[ oIDrpjqASyTPnxRmpS9O_ruZGsfk] ]/FLACFromUserNameCreateTime1359036619/CreateTimeMsgType![CDATA[位置]]/MsgTypeLocation_X22.539968/Location_XLocation_Y113.954980/Location_YScale16/ScaleLabel![CDATA[编号]中国广东省深圳市南山区深南大道9789号邮编:518057]]/LabelMsgId5837017832671832047/MsgId /xmlXML格式解释及复制代码代码如下: ToUserName 消息接收者微信ID,一般为公众平台账号微信ID FromUserName 消息发送者微信ID CreateTime 消息创建时间MsgType 消息类型,地理位置为locationLocation_X 位置纬度Location_Y 位置经度比例尺地图标签地理位置信息MSGID 消息ID 号6. 链接发送链接到链接格式: 复制代码代码为如下: xmlto用户名! [CDATA [GH_680bDEFC8C5D]]/用户名FROMUSERNAME! [OIDRPJL2LYDF Tam-OXDGB4XZCNC8]]]/Fromusername CreateTime1359709372/CreateTime Msgtype! [CDATA[链接]]/MsgType 标题![CDATA[与您分享一个应用-方被申图]]/标题说明![CDATA[方被申图为您提供夫妻相测试、亲子鉴定等新奇好玩的东西。 图片测试函数]]/Description Url![CDATA[http://israel.duapp.com/web/photo.php]]/Url MsgId5839907284805129867/MsgId /xmlXML格式解释复制代码代码如下: ToUserName 消息接收者微信ID,一般为公众平台账号微信账号FromUserName 消息发送者微信ID CreateTime 消息创建时间MsgType 消息类型,链接为linkTitle 图文消息标题说明图文消息描述Url 点击图文消息跳转链接MsgId 消息ID 号发送消息类型目前公众号可以发送向普通用户推送消息以三种格式推送消息:文本、图形和音乐。图文信息包括单个图文信息和多个图文信息,显示方式略有不同。另外,回复消息支持星号操作:通过将FuncFlag字段填写为1,对回复消息进行星号操作后,可以在实时消息的星号消息类别中找到对应的推送消息。

下面是这几种类型的详细解释: 1、短信格式回复文本后端格式:复制代码如下:text]]/MsgTypeContent![CDATA[豆币坊微信公众平台最好玩的图片视频应用]]/ContentFuncFlag0 /FuncFlag/xmlXML 格式说明复制代码代码如下: FromUserName 消息发送方ToUserName 消息接收方CreateTime 消息创建时间MsgType 消息类型,文本消息必须填写textContent消息内容,大小限制为2048字节,空字段非法请求FuncFlag 星域2、图文消息格式2.1 单条图文消息回复单条图文消息后端格式:复制代码代码如下:xml ToUserName![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]/ToUserName FromUserName![CDATA[gh_680bdefc8c5d]]/FromUserName CreateTime1359011899 /CreateTime MsgType![CDATA[news]]/MsgType Content![CDATA[]]/Content ArticleCount1/文章数文章标题![CDATA[[天津]天气预报]]/标题描述![CDATA[温度: 3湿度:43 风速:西南风2级]]/Description PicUrl![CDATA[http://www.doucube.com/weixin/weather /icon/banner.jpg]]/PicUrl Url![CDATA[]]/Url /item /文章FuncFlag0/FuncFlag/xml2.2 复制多条图形消息的代码如下: xml ToUserName![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]/ToUserName FromUserName![CDATA[gh_680bdefc8c5d]]/FromUserName CreateTime135

9011829</CreateTime> <MsgType><![CDATA[news]]></MsgType> <Content><![CDATA[]]></Content> <ArticleCount>8</ArticleCount> <Articles> <item> <Title><![CDATA[【天津】天气实况 温度:3℃ 湿度:43 风速:西南风2级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/banner.jpg]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月24日 周四 2℃~-7℃ 晴 北风3-4级转东南风小于3级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d00.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月25日 周五 -1℃~-8℃ 晴 东南风小于3级转东北风3-4级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d00.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月26日 周六 -1℃~-7℃ 多云 东北风3-4级转东南风小于3级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月27日 周日 0℃~-6℃ 多云 东南风小于3级转东北风3-4级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月28日 周一 -1℃~-8℃ 多云 东北风3-4级转南风小于3级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[06月29日 周二 1℃~-5℃ 多云 南风小于3级转3-4级]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl> <Url><![CDATA[]]></Url> </item> <item> <Title><![CDATA[方倍工作室 版权所有]]></Title> <Description><![CDATA[]]></Description> <PicUrl><![CDATA[]]></PicUrl> <Url><![CDATA[]]></Url> </item> </Articles> <FuncFlag>0</FuncFlag></xml>XML格式讲解复制代码 代码如下:FromUserName 消息发送方ToUserName 消息接收方CreateTime 消息创建时间MsgType 消息类型,图文消息必须填写newsContent 消息内容,图文消息可填空ArticleCount 图文消息个数,限制为10条以内Articles 多条图文消息信息,默认第一个item为大图 Title 图文消息标题 Description 图文消息描述 PicUrl 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80 Url 点击图文消息跳转链接FuncFlag 星标字段3. 音乐消息后台格式:复制代码 代码如下:<xml> <ToUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></ToUserName> <FromUserName><![CDATA[gh_b629c48b653e]]></FromUserName> <CreateTime>1372310544</CreateTime> <MsgType><![CDATA[music]]></MsgType> <Music> <Title><![CDATA[最炫民族风]]></Title> <Description><![CDATA[凤凰传奇]]></Description> <MusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></MusicUrl> <HQMusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></HQMusicUrl> </Music> <FuncFlag>0</FuncFlag></xml>XML格式讲解复制代码 代码如下:ToUserName 接收方帐号(收到的OpenID)FromUserName 开发者微信号CreateTime 消息创建时间MsgType 消息类型,此处为music Title 音乐标题 Description 音乐描述 MusicUrl 音乐链接 HQMusicUrl 高质量音乐链接,WIFI环境优先使用该链接播放音乐FuncFlag 位0x0001被标志时,星标刚收到的消息。事件消息类型目前用户在关注和取消关注的时候会自动向公众平台发送事件推送消息:1. 关注事件复制代码 代码如下:<xml> <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName> <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName> <CreateTime>1372307736</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> <EventKey><![CDATA[]]></EventKey></xml>2. 取消关注事件复制代码 代码如下:<xml> <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName> <FromUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></FromUserName> <CreateTime>1372309890</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[unsubscribe]]></Event> <EventKey><![CDATA[]]></EventKey></xml>3. 菜单点击事件复制代码 代码如下:<xml> <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName> <CreateTime>1377886191</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[CLICK]]></Event> <EventKey><![CDATA[天气深圳]]></EventKey></xml>XML格式讲解复制代码 代码如下:ToUserName 接收方微信号FromUserName 发送方微信号,若为普通用户,则是一个OpenIDCreateTime 消息创建时间MsgType 消息类型,eventEvent 事件类型,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件)EventKey 事件KEY值,与自定义菜单接口中KEY值对应简单的自动回复我们在官方的例子上做一些修改,实现了一个发送“?”就能回复当前时间的功能。该例子是接收文本消息($postObj->Content),并且回复文本消息($msgType = "text";)的。你可以把以下代码保存为index.php,按照上面提供的方法重新上传。代码如下:复制代码 代码如下:<?php/* 方倍工作室 http://www.cnblogs.com/txw1958/ CopyRight 2013 www.doucube.com All Rights Reserved*/define("TOKEN", "pondbay");$wechatObj = new wechatCallbackapiTest();$wechatObj->responseMsg();class wechatCallbackapiTest{ public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $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>"; if($keyword == "?") { $msgType = "text"; $contentStr = date("Y-m-d H:i:s",time()); $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } }else{ echo ""; exit; } }}?>效果如下: