微信的公众平台是腾迅公司在微信的基础上新增的功能,通过这一平台,个人和企业都可以打造一个微信的公众号,并实现和特定群体的文字、图片、语音的全方位沟通、互动。微信公共平台服务分为两种号,一个是“订阅号” 一个是“服务号”, 然后是两种模式,一个是“编辑模式”,另一个是“开发模式”。编辑模式比较适合不懂得程序的用户,可实现的功能比较少

微信的通信机制如图片所示:

下面我们来详细学习下编辑模式和开发者模式

首先我们需要注册一个微信公众账号

网址:https://mp.weixin.qq.com

一、编辑模式

编辑模式主要有以下三个特点:

1.设置公众账号被关注时的回复消息。编辑模式主要有以下三个特点:

2.消息自动回复设置。

3.关键词自动回复。

这三点大家应该都知道什么意思,简单介绍一下吧。

1.就是当有普通用户关注微信公众账号时,微信公众账号回复的一条消息,内容可以设置为欢迎信息等等。

2.就是当有用户向公众账号发送消息时,公众账号的自动回复消息内容。不知道什么意思? QQ离开状态的自动回复大家应该明白吧?

3.关键词自动回复,就是当微信公众账号接收到用户发送来的一些消息,比如 
你好。微信公众账号对用户的回复内容,当然也可以设置全匹配也可以取消全匹配。

二、开发者模式

开发者模式基本可以完成以上3点的任何功能,而且可以更完美、更人性化的实现。开启开发模式之后,需要设置一个Token值,来验证接口的URL

通过上面描述微信通信机制的图片我们可以看出,我们需要一个微信后台服务器

我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据库作为程序运行环境。
申请地址:http://sae.sina.com.cn/ ,使用新浪微博账号可以直接登录SAE,登录后SAE将赠送500个免费云豆。

在此处点击创建新应用:

点击下侧的创建新应用,这时会弹出提示, 禁止放置违法违规内容,点击继续创建,弹出如下窗口

填写二级域名AppID、应用名称、验证码,开发语言选择PHP,全部模版下面选择第一个【PHP 空应用】。然后点击左下方的创建应用

进入代码管理

点击右侧的

创建完成后弹出界面

选择一个版本点击操作-上传代码

将写好的代码打包成ZIP压缩包上传,这里我们命名为index.zip

下面我们登录我们的微信公众账号

微信公众平台地址:https://mp.weixin.qq.com

在页面的左下角找到开发者中心

进入服务器配置填写框。

点击“修改配置”按钮

此处的URL为上篇中介绍的云应用的域名,而Token在index.php中定义为weixin。EncodingAESKey则不用填,点击“随机生成”让自动生成一个,消息加解密方式选择“明文模式”,然后点击“提交”按钮。

恭喜,你成功启用开发模式。

至此该开发模式就已完成

对详细代码感兴趣的可以参考下面的地址详细学习

http://blog.csdn.net/column/details/weixin-start530.html

下面附部分代码:

<?phpdefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {$wechatObj->responseMsg();//消息响应
}else{$wechatObj->valid();//签名验证
}class wechatCallbackapiTest
{//验证签名public function valid(){$echoStr = $_GET["echostr"];//从微信后台获取随机字符变量$signature = $_GET["signature"];//获取signature,对timestamp、nonce和Toker进行SHA1加密后的字符串$timestamp = $_GET["timestamp"];//获取timestamp,时间戳$nonce = $_GET["nonce"];//获取nonce,随机数$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);//把token、timestamp、nonce组装到数组中,并排序sort($tmpArr,SORT_STRING);$tmpStr = implode($tmpArr);//将数组中的字符组合成字符串$tmpStr = sha1($tmpStr);//将组合成的字符串进行sha1加密if($tmpStr == $signature){//加密后的字符串与获取的一致打印结果,关闭echo $echoStr;exit;}}//响应消息public function responseMsg(){//这里获取用户发来的数据,并保存到¥postStr变量中,由于微信后台发送的数据都是XML格式的数据,所以需要//$GLOBALS["HTTP_RAW_POST_DATA"]方法来获取$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//如果用户端发送来的数据不为空,则执行下面这段代码if (!empty($postStr)){$this->logger("R ".$postStr);//用simplexml_load_string解析XML数据,并放入$postObj变量中$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$RX_TYPE = trim($postObj->MsgType);//获取用户发来的消息类型,trim是去掉文本中得空格//消息类型分离switch ($RX_TYPE){case "event"://事件类型消息$result = $this->receiveEvent($postObj);  //在下面定义break;case "text"://文本消息$result = $this->receiveText($postObj);break;case "image"://图片消息$result = $this->receiveImage($postObj);break;case "location"://位置消息$result = $this->receiveLocation($postObj);break;case "voice"://语音消息$result = $this->receiveVoice($postObj);break;case "video"://视频消息$result = $this->receiveVideo($postObj);break;case "link"://连接消息$result = $this->receiveLink($postObj);break;default:   //未知消息类型$result = "unknown msg type: ".$RX_TYPE;break;}$this->logger("T ".$result);echo $result;//打印上面函数返回的结果,上面函数在下面定义}else {  //如果消息为空,则打印空echo "";exit;}}//接收事件消息private function receiveEvent($object){$content = "";switch ($object->Event)//事件类型{case "subscribe":$content = "感谢您关注黑科精灵 BY 谭云龙 ";$content .= (!empty($object->EventKey))?("\n来自二维码场景 ".str_replace("qrscene_","",$object->EventKey)):"";break;case "unsubscribe":$content = "取消关注";break;case "SCAN":$content = "扫描场景 ".$object->EventKey;break;case "CLICK":switch ($object->EventKey){case "COMPANY":$content = array();$content[] = array("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");break;default:$content = "点击菜单:".$object->EventKey;break;}break;case "LOCATION":$content = "上传位置:纬度 ".$object->Latitude.";经度 ".$object->Longitude;break;case "VIEW":$content = "跳转链接 ".$object->EventKey;break;case "MASSSENDJOBFINISH":$content = "消息ID:".$object->MsgID.",结果:".$object->Status.",粉丝数:".$object->TotalCount.",过滤:".$object->FilterCount.",发送成功:".$object->SentCount.",发送失败:".$object->ErrorCount;break;default:$content = "receive a new event: ".$object->Event;break;}if(is_array($content)){if (isset($content[0])){$result = $this->transmitNews($object, $content);//解析事件消息}else if (isset($content['MusicUrl'])){$result = $this->transmitMusic($object, $content);}}else{$result = $this->transmitText($object, $content);}return $result;//返回result}//接收文本消息private function receiveText($object){$keyword = trim($object->Content);//获取用户发送内容//多客服人工回复模式if (strstr($keyword, "您好") || strstr($keyword, "你好") || strstr($keyword, "在吗")){$result = $this->transmitService($object);//解析文本消息}//自动回复模式else{if (strstr($keyword, "2")){$content = "这是个文本消息";}else if (strstr($keyword, "3")){$content = array();$content[] = array("Title"=>"单图文标题",  "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://blog.csdn.net/yuxikuo_1");}else if (strstr($keyword, "图文") || strstr($keyword, "多图文")){$content = array();$content[] = array("Title"=>"", "Description"=>"阅读全文", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://blog.csdn.net/yuxikuo_1");$content[] = array("Title"=>"微信公共平台", "Description"=>"阅读全文", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://blog.csdn.net/yuxikuo_1");$content[] = array("Title"=>"个人开发", "Description"=>"阅读全文", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://blog.csdn.net/yuxikuo_1");}else if (strstr($keyword, "4")){$content = array();$content = array("Title"=>"最炫民族风", "Description"=>"歌手:凤凰传奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");}else if(strstr($keyword, "时间")){$content = date("Y-m-d H:i:s",time())."\;}else if(strstr($keyword, "1")){$content = "作者:谭云龙";}else{$content = "请执行下面操作\n1.作者信息;\n2.文本;\n3.单图文\图文;\n4.音乐;\n5.其他";}if(is_array($content)){if (isset($content[0]['PicUrl'])){$result = $this->transmitNews($object, $content);//翻译文本消息}else if (isset($content['MusicUrl'])){$result = $this->transmitMusic($object, $content);}}else{$result = $this->transmitText($object, $content);}}return $result;}//接收图片消息private function receiveImage($object){$content = array("MediaId"=>$object->MediaId);$result = $this->transmitImage($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 receiveVoice($object){if (isset($object->Recognition) && !empty($object->Recognition)){$content = "你刚才说的是:".$object->Recognition;$result = $this->transmitText($object, $content);}else{$content = array("MediaId"=>$object->MediaId);$result = $this->transmitVoice($object, $content);}return $result;}//接收视频消息private function receiveVideo($object){$content = array("MediaId"=>$object->MediaId, "ThumbMediaId"=>$object->ThumbMediaId, "Title"=>"", "Description"=>"");$result = $this->transmitVideo($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){$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);return $result;}//回复图片消息private function transmitImage($object, $imageArray){$itemTpl = "<Image><MediaId><![CDATA[%s]]></MediaId>
</Image>";$item_str = sprintf($itemTpl, $imageArray['MediaId']);$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
$item_str
</xml>";$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());return $result;}//回复语音消息private function transmitVoice($object, $voiceArray){$itemTpl = "<Voice><MediaId><![CDATA[%s]]></MediaId>
</Voice>";$item_str = sprintf($itemTpl, $voiceArray['MediaId']);$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
$item_str
</xml>";$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());return $result;}//回复视频消息private function transmitVideo($object, $videoArray){$itemTpl = "<Video><MediaId><![CDATA[%s]]></MediaId><ThumbMediaId><![CDATA[%s]]></ThumbMediaId><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description>
</Video>";$item_str = sprintf($itemTpl, $videoArray['MediaId'], $videoArray['ThumbMediaId'], $videoArray['Title'], $videoArray['Description']);$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
$item_str
</xml>";$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());return $result;}//回复图文消息private function transmitNews($object, $newsArray){if(!is_array($newsArray)){return;}$itemTpl = "    <item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>
";

开发微信公众平台的基本功能相关推荐

  1. .net开发微信公众平台

    (转自:fhx900808.blog.163.com/blog/static/2099660212013423113226312/) 一.说明:公众平台信息接口为开发者提供了一种新的消息处理方式,只有 ...

  2. 用python开发微信公众平台聊天机器人

    最近用python写了一个聊天机器人的微信公众号,网上找的开发文档参差不齐,官方文档也比较老旧,还有部分小问题.于是,分享一下我的思路. 开发环境 windows sever 2008+python3 ...

  3. 使用Bmob云端代码开发微信公众平台(教程)

    使用Bmob云端代码开发微信公众平台(教程)           目录 一.简介...1 二.创建bmob应用...2 1.注册bmob账号...2 2. 创建应用...3 3. 数据的基本操作... ...

  4. python微信爬取教程_PYTHON爬虫之旅系列教程之【利用Python开发微信公众平台一】...

    感谢大家的等待,好啦,都准备好瓜子.板凳,老司机要发车啦-- 本系列课程讲述"PYTHON爬虫之旅",具体大纲可参考:[PYTHON爬虫之旅]概要目录. 本节课讲述如何利用Pyth ...

  5. Java开发微信公众平台之浅谈微信(一)

    说起微信都不会陌生,每一部智能手机都有该APP也就是说 只要是使用智能手机的人都属于微信的用户,可想而知微信目前的使用人数.据16年数据统计微信的月活跃用户达到了8.06亿,什么概念,还没有算其余不是 ...

  6. 微信快速开发框架(二) -- 快速开发微信公众平台框架---简介

    年底了,比较忙,大家都在展望未来,对于30+的我来说,发展和稳定是个难以取舍的问题.最近发了些求职信,鸟无音讯,没事做,做点帮助大家的东西吧. 之前做了个微信公众平台的查询系统,在开发中,发觉了一些微 ...

  7. 公众平台 java_java开发微信公众平台

    <java开发微信公众平台>由会员分享,可在线阅读,更多相关<java开发微信公众平台(31页珍藏版)>请在人人文库网上搜索. 1.java开发微信公众平台响应消息的基类同样, ...

  8. 1 微信公众平台数据统计功能的作用是什么?

    1 微信公众平台数据统计功能的作用是什么? 1.用户消息分析 通过微信公众平台的后台提供的用户消息的数据分析来查看针对用户发送的消息的统计,包括消息发送人数.次数等分析.进而更好的管理用户,把用户进行 ...

  9. java微信接收消息_使用Java开发微信公众平台(二)——消息的接收与响应

    上一篇文章中,我们学习了使用Java语言开发微信公众平台的第一部分--环境搭建与开发接入.那么,本篇文章,我们将在此基础上,学习[消息的接收与响应].喜欢本文,请点击下方喜欢按钮呗!❤️ 当然,我们在 ...

最新文章

  1. OSChina 周一乱弹 —— 还一星期就要和女神约会了
  2. 不管工作压力太大了,还是工作压力太小了;都容易引起开发人员的辞职风波...
  3. linux profile of env
  4. 面试常考题---交换变量
  5. 建立远程ftp服务器,利用无线路由器建立FTP服务器
  6. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
  7. 【Python】line.strip().split(‘,‘)含义
  8. C++ 可变索引模板 和 template template
  9. 怎么用python统计字数_Python 统计字数的思路详解
  10. 使用ECMAScript 5严格模式提升开发效率
  11. python的notebook怎么用_如何通过命令行将IPython Notebook转换为Python文件?
  12. 免费JSON格式的服务接口
  13. 程序员必备的10个B站优质UP主!
  14. 闲置安卓手机改造linux服务器
  15. 数据敏捷,HTAP数据库既决效率又决生死
  16. mac版MySQL初始密码修改
  17. 解决vue项目路由出现message: “Navigating to current location (XXX) is not allowed“的问题(点击多次跳转)
  18. 邮件 发送excel表格做正文
  19. Oracle数据库实现分页
  20. 用jQuery--实现todolist待办事项清单

热门文章

  1. 2018阿里巴巴基础平台研发工程师实习生笔试题:一.十进制数转换成的二进制数中有几个1. 二.输出IP所在的网段
  2. Eclipse中格式化JS、HTML代码
  3. Power bi 超市经典案例之销售分析(二)
  4. 南京邮电大学java实验报告_南京邮电大学java第二次实验报告
  5. export default (imported as router) was not found_开关插座IEC/EN/AS/NZS澳洲SAA认证
  6. python弹球游戏移动球拍_pygame库实现移动底座弹球小游戏
  7. 步进电机驱动之相数、步距角、细分、拍数
  8. MySQL5.7系列的安装教程
  9. 计算机打字失灵,电脑键盘在打字的时候出现按键失灵的原因是什么
  10. 微信浏览器浏览,后台编辑器添加视频