最近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的~
 

 
今天来分享一下开发经验~
微信公众平台提供的接口很简单,先看看消息交互流程:
 

 
说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单。
 
下面写个实例,开发微信智能聊天机器人:
 
1. 注册微信公众平台账号

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

注: 目前一张身份证只能注册两个账号,账号名称关乎加V认证,请慎重注册。

2. 申请服务器/虚拟主机
没有服务器/虚拟主机的童鞋可以使用BAE和SAE,不多介绍。
 
3. 开启开发者模式
微信公众平台有两个模式,一个是编辑模式(傻瓜模式),简单但功能单一。另一个是开发者模式,可以通过开发实现复杂功能。两个模式互斥,显而易见,登录微信公众平台并通过“高级功能”菜单开启开发者模式。
 
4. 填写接口配置信息
同样是在“高级功能”菜单中配置,需要配置两项参数:
URL: 开发者应用访问地址,目前仅支持80端口,以“http://www.1990c.com/weixin/index.php”为例。
TOKEN: 随意填写,用于生成签名,以“1990c”为例。
填写完把下面代码保存为index.php并上传至http://www.1990c.com/weixin/目录,最后点击“提交”完成验证。

<?php
define("TOKEN", "1990c"); //TOKEN值
$wechatObj = new wechat();
$wechatObj->valid();
class wechat {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;}}
}
?>

这玩意儿就是微信公众平台校验URL是否正确接入,研究代码没有实质性意义,验证完即可删除文件,就不详细说明了,有兴趣的童鞋可以查看官方文档。

微信公众平台API文档:
http://mp.weixin.qq.com/wiki/index.php

5. 开发微信公众平台功能
OK,上面提到了,微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:
 
当用户向微信公众账号发送消息时,微信服务器会POST给开发者一些数据:

<xml>
<!--开发者微信号-->
<ToUserName><![CDATA[toUser]]></ToUserName>
<!--发送方帐号(OpenID)-->
<FromUserName><![CDATA[fromUser]]></FromUserName>
<!--消息创建时间 (整型)-->
<CreateTime>12345678</CreateTime>
<!--消息类别 (text文本消息)-->
<MsgType><![CDATA1]></MsgType>
<!--消息内容-->
<Content><![CDATA[content]]></Content>
<!--消息ID (64位整型)-->
<MsgId>1234567890123456</MsgId>
</xml>

开发者在处理完消息后需要返回数据给微信服务器:

<xml>
<!--接收方帐号(OpenID)-->
<ToUserName><![CDATA[toUser]]></ToUserName>
<!--开发者微信号-->
<FromUserName><![CDATA[fromUser]]></FromUserName>
<!--消息创建时间 (整型)-->
<CreateTime>12345678</CreateTime>
<!--消息类别 (text文本消息)-->
<MsgType><![CDATA1]></MsgType>
<!--回复消息内容-->
<Content><![CDATA[content]]></Content>
<!--星标操作(位0x0001被标志时 星标刚收到的消息)-->
<FuncFlag>0</FuncFlag>
</xml>

除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。
 
来看看官方提供的一个PHP示例,我做了一些精简:

<?php
$wechatObj = new wechat();
$wechatObj->responseMsg();
class wechat {public function responseMsg() {//---------- 接 收 数 据 ---------- //$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据//用SimpleXML解析POST过来的XML数据$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)$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>";$msgType = "text"; //消息类型$contentStr = 'http://www.1990c.com'; //返回消息内容//格式化消息模板$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);echo $resultStr; //输出结果}
}
?>

把代码保存为index.php并上传至http://www.1990c.com/weixin/目录,如果刚才没删除该文件,则直接覆盖。
 
现在用户通过微信公众平台发送任何消息公众账号均会返回一条内容为“http://www.1990c.com”的消息。
接下来需要做的就是根据用户消息动态返回结果~
 
SimSimi(小黄鸡)是目前比较火的聊天机器人,我用CURL开发了一个免费的SimSimi(小黄鸡)接口,传入关键词会返回文本回复,这部分不是本文重点,就不多说明,直接上代码:

<?php
function SimSimi($keyword) {//----------- 获取COOKIE ----------//$url = "http://www.simsimi.com/";$ch = curl_init($url);curl_setopt($ch, CURLOPT_HEADER,1);curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);$content = curl_exec($ch);list($header, $body) = explode("\r\n\r\n", $content);preg_match("/set\-cookie:([^\r\n]*);/iU", $header, $matches);$cookie = $matches[1];curl_close($ch);//----------- 抓 取 回 复 ----------//$url = "http://www.simsimi.com/func/req?lc=ch&msg=$keyword";$ch = curl_init($url);curl_setopt($ch, CURLOPT_REFERER, "http://www.simsimi.com/talk.htm?lc=ch");curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);curl_setopt($ch, CURLOPT_COOKIE, $cookie);$content = json_decode(curl_exec($ch),1);curl_close($ch);if($content['result']=='100') {$content['response'];return $content['response'];} else {return '我还不会回答这个问题...';}
}
?>

把上面两段代码整合在一起就大功告成了,需要说明一点,微信服务器在5秒内收不到响应会断掉连接,通过此接口有可能会超时,且SimSimi已经屏蔽了BAE和SAE上的抓取请求,推荐使用SimSimi官方收费API,速度比较快~
 
最后附上微信公众平台智能聊天机器人源码:

微信公众平台智能聊天机器人源码下载:
http://www.1990c.com/wp-content/uploads/2013/05/40.rar

来源:http://www.1990c.com/?p=932

官方wiki: http://mp.weixin.qq.com/wiki/

微信公众平台PHP开发相关推荐

  1. 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发

    本文主要讲解如何使用 weinxinFundation 进行二次开发. 步骤如下: 1.创建新的web项目. 在eclipse里新建一个dynamicly web project,比如本文叫weixi ...

  2. ASP.NET MVC5微信公众平台整合开发实战教程

    <ASP.NET MVC5&微信公众平台整合开发实战(响应式布局.JQuery Mobile,Windows Azure.微信核心开发)> 课程讲师:57Code 课程分类:ASP ...

  3. 微信公众平台前端开发技巧分享

    这个是第三方跳转的网站 微信公众平台前端开发技巧分享 微信公众平台 新版微信做了更改,此文提到的部分方法可能已经不再适用,请关注微信官方开放平台:http://open.weixin.qq.com/d ...

  4. 如何学习微信公众平台的开发?

    如何学习微信公众平台的开发? 在整个移动互联网的开发技术中,微信公众号的开发几乎是成本最低,传播最快,影响最广的,你几乎不需要再添加任何配置,就可以开始. 个人可以申请公众号,需要高级权限可以用测试号 ...

  5. 微信公众平台应用开发实战

    微信公众平台应用开发实战 微信营销 ISBN 9787111438618 作者 钟志勇 含税价 59.0元 税后 51.3元 增值税 7.7元 卓越价 40.7元(满49元免运费) 有货 出版社 机械 ...

  6. 微信公众号api关注接口php,微信公众平台接口开发入门示例

    本文实例讲述了微信公众平台接口开发入门示例.分享给大家供大家参考.具体如下: 微信公众平台的接口开发是一个现在比较常用的功能了,很多的人都会去了解一下微信公众平台一些简单开发应用,这里就来给大家介绍一 ...

  7. 微信公众号html在线编辑器,【微信公众平台工具开发】雷人微信网页编辑器

    原标题:[微信公众平台工具开发]雷人微信网页编辑器 [微信公众平台工具开发]雷人微信网页编辑器 雷人微信编辑器--真正的微信神器,可以将热门.头条和自己感兴趣的文章,包括微信朋友圈分享的公众号里面的精 ...

  8. 《微信公众平台应用开发实战(第2版)》一1.1 微信公众账号的注册

    本节书摘来华章计算机<微信公众平台应用开发实战(第2版)>一书中的第1章 ,第1.1节,钟志勇 何威俊 冯煜博 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  9. 视频教程-微信公众平台深度开发v2.0第3季——二维码、模板消息-微信开发

    微信公众平台深度开发v2.0第3季--二维码.模板消息 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考) ...

  10. 微信公众平台完整开发教程

    微信已然成了一种生活方式:群聊.语音.视频,照片/视频/位置共享,支付和商店有了,还能通过公众账号来获取各种资源--如今的微信就是在日中天的状态(最新估值已达 600 亿),公众平台带来的影响有目共睹 ...

最新文章

  1. 超详细的Python中的字符串常识【赶紧收藏】
  2. 什么是二维数组?二维遍历?Java二维数组制作图片迷宫 使用如鹏游戏引擎制作窗口界面 附带压缩包下载,解压后双击start.bat启动...
  3. 「Android」 详细全面的基于vue2.0Weex接入过程(Android视角)
  4. [必看]首先要求做到的事情![sumtec]
  5. python_Pandas机器学习数据预处理
  6. ISA Server、虚拟机、托管服务器的使用
  7. 苹果鼠标滚轮驱动_如何挑选一款适合自己的游戏鼠标
  8. Mybatis源码导入
  9. Unity 通过修改图片透明度实现淡出效果
  10. 如何使用JGIT在远程仓库获取提交详情记录
  11. win10误删IE浏览器文件如何恢复?
  12. c语言三阶素数魔方阵,C语言 三阶魔方阵
  13. 虚幻4皮肤材质_UE4实时虚拟角色材质篇之Skin Material(一)
  14. Linux从入门到精通5
  15. EMV规范(三)——应用初始化
  16. git点击pull后没有同步_关于git pull时出现的问题及解决反思
  17. 从傅里叶级数到小波变换——step1.复数域的重要结论(柯西—黎曼条件)
  18. Java私塾:研磨设计模式 之 装饰模式(Decorator)3
  19. kalilinux配合python可以做什么_KaliLinux的主要功能_Kali Linux可以做什么-SEO技术蜘蛛屯...
  20. unity3d 流光效果 shader控制 不用代码

热门文章

  1. 山区建小学(信息学奥赛一本通-T1197)
  2. 最长单词(信息学奥赛一本通-T1149)
  3. 信息学奥赛C++语言: 单词的长度
  4. 16 CO配置-控制-产品成本控制-产品成本计划编制-定义成本构成结构
  5. 5.1.3 SELECT+INNER JOIN读取数据
  6. 怎么汉语_3分钟,让您明白孩子的汉语应该怎么学!(13年级家长必看)
  7. MSP, CMP傻傻分不清楚?一文读懂云管理的春天
  8. 2021.08.28-MMsegmentation0.16.0+Cuda10.1+Ubuntu16.04+Pytorch1.8环境安装
  9. group by配合“聚合函数”才有意义
  10. Bootstrap-CSS-按钮-图片-辅助类-响应式