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

今天来分享一下开发经验~

微信公众平台提供的接口很简单,先看看消息交互流程:

说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单。

下面写个实例,开发微信智能聊天机器人:

1. 注册微信公众平台账号

2. 申请服务器/虚拟主机

没有服务器/虚拟主机的童鞋可以使用BAE和SAE,不多介绍。

3. 开启开发者模式

微信公众平台有两个模式,一个是编辑模式(傻瓜模式),简单但功能单一。另一个是开发者模式,可以通过开发实现复杂功能。两个模式互斥,显而易见,登录微信公众平台并通过“高级功能”菜单开启开发者模式。

4. 填写接口配置信息

同样是在“高级功能”菜单中配置,需要配置两项参数:

URL: 开发者应用访问地址,目前仅支持80端口,以“http://www.1990c.com/weixin/index.php”为例。

TOKEN: 随意填写,用于生成签名,以“1990c”为例。

填写完把下面代码保存为index.php并上传至http://www.1990c.com/weixin/目录,最后点击“提交”完成验证。

01

02

define("TOKEN","1990c");//TOKEN值

03

$wechatObj =new wechat();

04

$wechatObj->valid();

05

class wechat {

06

publicfunction valid() {

07

$echoStr=$_GET["echostr"];

08

if($this->checkSignature()){

09

echo$echoStr;

10

exit;

11

}

12

}

13

14

privatefunction checkSignature() {

15

$signature=$_GET["signature"];

16

$timestamp=$_GET["timestamp"];

17

$nonce=$_GET["nonce"];

18

$token= TOKEN;

19

$tmpArr=array($token,$timestamp,$nonce);

20

sort($tmpArr);

21

$tmpStr= implode($tmpArr );

22

$tmpStr= sha1($tmpStr );

23

if($tmpStr ==$signature) {

24

returntrue;

25

}else {

26

returnfalse;

27

}

28

}

29

}

30

?>

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

5. 开发微信公众平台功能

OK,上面提到了,微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:

当用户向微信公众账号发送消息时,微信服务器会POST给开发者一些数据:

01

02

03

04

05

06

07

12345678

08

09

10

11

12

13

1234567890123456

14

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

01

02

03

04

05

06

07

12345678

08

09

10

11

12

13

0

14

除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。

来看看官方提供的一个PHP示例,我做了一些精简:

01

02

$wechatObj =new wechat();

03

$wechatObj->responseMsg();

04

class wechat {

05

publicfunction responseMsg() {

06

07

//---------- 接 收 数 据 ---------- //

08

09

$postStr=$GLOBALS["HTTP_RAW_POST_DATA"];//获取POST数据

10

11

//用SimpleXML解析POST过来的XML数据

12

$postObj= simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);

13

14

$fromUsername=$postObj->FromUserName;//获取发送方帐号(OpenID)

15

$toUsername=$postObj->ToUserName;//获取接收方账号

16

$keyword= trim($postObj->Content);//获取消息内容

17

$time= time();//获取当前时间戳

18

19

20

//---------- 返 回 数 据 ---------- //

21

22

//返回消息模板

23

$textTpl= "

24

25

26

%s

27

28

29

0

30

";

31

32

$msgType="text";//消息类型

33

$contentStr='http://www.1990c.com'; //返回消息内容

34

35

//格式化消息模板

36

$resultStr= sprintf($textTpl,$fromUsername,$toUsername,

37

$time,$msgType,$contentStr);

38

echo$resultStr;//输出结果

39

}

40

}

41

?>

把代码保存为index.php并上传至http://www.1990c.com/weixin/目录,如果刚才没删除该文件,则直接覆盖。

现在用户通过微信公众平台发送任何消息公众账号均会返回一条内容为“http://www.1990c.com”的消息。

现在用户通过微信公众平台发送任何消息公众账号均会返回一条内容为“http://www.1990c.com”的消息。

接下来需要做的就是根据用户消息动态返回结果~

SimSimi(小黄鸡)是目前比较火的聊天机器人,我用CURL开发了一个免费的SimSimi(小黄鸡)接口,传入关键词会返回文本回复,这部分不是本文重点,就不多说明,直接上代码:

01

02

function SimSimi($keyword) {

03

04

//----------- 获取COOKIE ----------//

05

$url ="http://www.simsimi.com/";

06

$ch = curl_init($url);

07

curl_setopt($ch, CURLOPT_HEADER,1);

08

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

09

$content = curl_exec($ch);

10

list($header,$body) =explode("\r\n\r\n",$content);

11

preg_match("/set\-cookie:([^\r\n]*);/iU",$header,$matches);

12

$cookie =$matches[1];

13

curl_close($ch);

14

15

//----------- 抓 取 回 复 ----------//

16

$url ="http://www.simsimi.com/func/req?lc=ch&msg=$keyword";

17

$ch = curl_init($url);

18

curl_setopt($ch, CURLOPT_REFERER,"http://www.simsimi.com/talk.htm?lc=ch");

19

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

20

curl_setopt($ch, CURLOPT_COOKIE,$cookie);

21

$content = json_decode(curl_exec($ch),1);

22

curl_close($ch);

23

24

if($content['result']=='100') {

25

$content['response'];

26

return $content['response'];

27

}else {

28

return '我还不会回答这个问题...';

29

}

30

}

31

?>

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

最后附上微信公众平台智能聊天机器人源码:

转载地址:http://www.1990c.com/?p=932

http://blog.csdn.net/zxianyong/article/details/9298963#t1

公众平台 php,微信公众平台PHP开发(转载)相关推荐

  1. 微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试

    微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试 技术qq交流群:JavaDream ...

  2. 百度云搭建微信公众平台服务器,微信大众开放平台开发03-百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试...

    微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试 微信公众开放平台开发03---百度 ...

  3. 网络架构、云平台和微信公众平台开发接入

    云与后端相关的技术似乎并不属于嵌入式和物联智能硬件开发工程师的范畴,但是嵌入式开发工程师有必要认识成熟的网络架构和相关的云技术,以拓展自己在系统架构方面的视野.大数据分析是物联网背后的核心价值,物联智 ...

  4. Shopro商城,基于Fastadmin和Uniapp进行开发的多平台(微信公众号、微信小程序、H5网页、Android-App、IOS-App)购物商城

    Shopro商城 基于Fastadmin和Uniapp进行开发的多平台(微信公众号.微信小程序.H5网页.Android-App.IOS-App)购物商城,拥有强大的店铺装修.小程序直播.自定义模板. ...

  5. 网络架构、云平台和微信公众号开发接入--基于嵌入式工程师的视觉

    云与后端相关的技术似乎并不属于嵌入式和物联智能硬件开发工程师的范畴,但是嵌入式开发工程师有必要认识成熟的网络架构和相关的云技术,以拓展自己在系统架构方面的视野.大数据分析是物联网背后的核心价值,物联智 ...

  6. 结合百度云平台和微信公众平台开发(二)

    距离第一章的入门讲解已经有一段时间了,最近的确没有空,今天我们在上一次的基础上来进行一个扩展,实现天气查询功能,大概就是,我们在手机上想我们的公众账号发送一个消息,比如"weather&qu ...

  7. 结合百度云平台和微信公众平台进行开发(一)

    套话大话我就不说了,网上一大堆,我们就直接进入正题吧,相信对百度云平台和微信公众平台没有了解的也不会关注这篇文章. 上面的标题到底是个什么意思呢?下面让我们一步一步来完成一个测试小项目. 两者是怎样结 ...

  8. 微信公众号官网平台与微信公众号第三方平台的区别

    微信公众号官网平台 普通的微信公众账号只能开启编辑模式,编辑模式缺点: 1)功能有限,无法开发API丶地理位置回复等信息: 2) 文字回复有300字限制,关键字回复上限为200条; 3)关键字回复较多 ...

  9. 微信公众平台与微信开放平台的区别、服务号、订阅号、企业微信的区别

    微信公众平台 vs 微信开放平台 微信公众平台是介绍公众号相关的内容,比如服务号.订阅号.企业微信,所以叫微信公众平台:公众平台也是公众号的管理端,可以编辑推送文章,通常是公众号的运营.开发登录: 微 ...

  10. 微信公众平台、微信公众平台.小程序、微信.开放平台三者关系及unionid

    以下内容,仅限于根据自己开发以及阅读微信文档总结,错误之处敬请指出,共同进步! 一.微信公众平台.微信公众平台.小程序.微信.开放平台登录地址 项目 微信公众平台 微信公众平台.小程序 微信.开放平台 ...

最新文章

  1. 微服务治理实践:服务查询
  2. Android热更新实现方式
  3. 【 FPGA 】控制数码管动态扫描显示的小实验
  4. 中国农业科技领域最大一笔融资来了:极飞科技拿下12亿投资,百度&软银领投...
  5. 基于机器学习的捡球机器人设计与实现(探索)第4篇——机械设计)
  6. java web html入门书籍,JavaWeb入门到学废的第一天(HTML学习)
  7. Linux基本网路配置及软件包的安装
  8. Eclipse中部署hadoop2.3.0
  9. opengl加载显示3D模型gltf2类型文件
  10. 弹性理论法研究桩基受力计算公式_竖向荷载下群桩的承载力分析
  11. setTimeout() 与 setInterval() 异同
  12. word根据目录切块php,PHP导出Word文档如何自定义目录?
  13. labeme批量转换json文件_Python实现markdown文件批量转换为word
  14. 68.营救问题(广搜)
  15. TypeScript 令我苦不堪言
  16. PHP中self和static的区别,php面向对象程序设计中self与static的区别分析
  17. 半导体器件(一) 学习笔记
  18. 人民币对美元汇率中间价报6.7560元 上调349个基点
  19. java周总结1113_流总结_序列化_xml_html
  20. 十年老前端整理的前端全套视频教程,自学者们的福音

热门文章

  1. 解决eclipse neno在线下载安装缓慢及失败的问题
  2. [生存志] 第145节 班固著汉书
  3. PHP 富文本内容中图片路径追加域名
  4. 5、提取snp indel 位点
  5. mysql 索引的模糊查询_MYSQL语法(模糊查询,视图,索引)
  6. 码流、单码流、双码流、多码流
  7. java程序 jnlp,使用JNLP文件启动应用程序
  8. PS常用平面设计制作尺寸
  9. 自动驾驶测试流程大全
  10. 【渗透测试】VulnHub-Lord Of The Root: 1.0.1