p=932" style="color: rgb(255, 153, 0); text-decoration: none;">微信公众平台PHP开发

2013.05.19 10:28CATEGORY:PHPVIEWS:2346COMMENTS:29

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

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

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

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

注: 眼下一张身份证仅仅能注冊两个账号,账号名称关乎加V认证,请谨慎注冊。

2. 申请server/虚拟主机
没有server/虚拟主机的童鞋能够使用BAE和SAE。不多介绍。

3. 开启开发人员模式
微信公众平台有两个模式,一个是编辑模式(傻瓜模式)。简单但功能单一。还有一个是开发人员模式。能够通过开发实现复杂功能。两个模式相互排斥,显而易见,登录微信公众平台并通过“高级功能”菜单开启开发人员模式。
 
4. 填写接口配置信息
相同是在“高级功能”菜单中配置。须要配置两项參数:
URL: 开发人员应用訪问地址,眼下仅支持80port。以“http://www.1990c.com/weixin/index.php”为例。
TOKEN: 任意填写。用于生成签名。以“1990c”为例。
填写完把以下代码保存为index.php并上传至http://www.1990c.com/weixin/文件夹,最后点击“提交”完毕验证。

01 <?php
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         $tmpArrarray($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是否正确接入。研究代码没有实质性意义。验证完就可以删除文件,就不具体说明了,有兴趣的童鞋能够查看官方文档。

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

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

01 <xml>
02 <!--开发人员微信号-->
03 <ToUserName><![CDATA[toUser]]></ToUserName>
04 <!--发送方帐号(OpenID)-->
05 <FromUserName><![CDATA[fromUser]]></FromUserName>
06 <!--消息创建时间 (整型)-->
07 <CreateTime>12345678</CreateTime>
08 <!--消息类别 (text文本消息)-->
09 <MsgType><![CDATA1]></MsgType>
10 <!--消息内容-->
11 <Content><![CDATA[content]]></Content>
12 <!--消息ID (64位整型)-->
13 <MsgId>1234567890123456</MsgId>
14 </xml>

开发人员在处理完消息后须要返回数据给微信server:

01 <xml>
02 <!--接收方帐号(OpenID)-->
03 <ToUserName><![CDATA[toUser]]></ToUserName>
04 <!--开发人员微信号-->
05 <FromUserName><![CDATA[fromUser]]></FromUserName>
06 <!--消息创建时间 (整型)-->
07 <CreateTime>12345678</CreateTime>
08 <!--消息类别 (text文本消息)-->
09 <MsgType><![CDATA1]></MsgType>
10 <!--回复消息内容-->
11 <Content><![CDATA[content]]></Content>
12 <!--星标操作(位0x0001被标志时 星标刚收到的消息)-->
13 <FuncFlag>0</FuncFlag>
14 </xml>

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

01 <?php
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= "<xml>
24         <ToUserName><![CDATA[%s]]></ToUserName>
25         <FromUserName><![CDATA[%s]]></FromUserName>
26         <CreateTime>%s</CreateTime>
27         <MsgType><![CDATA[%s]]></MsgType>
28         <Content><![CDATA[%s]]></Content>
29         <FuncFlag>0</FuncFlag>
30         </xml>";
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 <?

php

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 ?>

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

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

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

p=932

微信公众平台PHP开发的更多相关文章

  1. 微信公众平台应用开发:方法、技巧与案例--柳峰,Java语言版本

    他本人的博客:http://blog.csdn.net/lyq8479 作者简介: 刘运强,网名“柳峰”,资深微信公众平台应用开发工程师,国内微信公众平台应用开发的先驱之一,项目经验丰富.他还是一位资 ...

  2. 基于微信公众平台的开发(清华大学第二讲)_Alien的笔记

    基于微信公众平台的开发(清华大学第二讲)_Alien的笔记 基于微信公众平台的开发(清华大学第二讲)

  3. 【课程分享】ASP.NET MVC5&amp;微信公众平台整合开发实战(响应式布局、JQuery Mobile,Windows Azure、微信核心开发)

    对这个课程有兴趣的,能够联系我QQ2748165793 基础知识储备 ASP.NET MVC 5基础(6讲) 第一讲-初识ASP.NET MVC并搭建整合开发环境 第二讲-深入MVC开发模式 第三讲- ...

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

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

  5. 用node.js进行微信公众平台的开发

    基本原理 用nodejs怎样来实现对微信公众平台的开发呢? 别的就不多说了,先来简单介绍微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务 ...

  6. 微信公众平台网页开发实战--3.利用JSSDK在网页中获取地理位置(HTML5+jQuery)

    复制一份JSSDK环境,创建一份index.html文件,结构如图7.1所示. 图7.1  7.1节文件结构 在location.js中,封装“getLocation”接口,如下: 01 wxJSSD ...

  7. C#微信公众平台账号开发,从零到整,步骤详细。

    想到微信的火热,想到其他公司开发手游,如雷电,酷跑类的,都不是很火,但是弱智的“打飞机”和“天天酷跑”却是那么火热.于是乎,想做个微信营销的软件.首先想到的是手机连电脑wifi,用抓包工具抓微信的包, ...

  8. 微信公众平台入门开发教程.Net(C#)框架

    一.序言 一直在想第一次写博客,应该写点什么好?正好最近在研究微信公众平台开发,索性就记录下,分享下自己的心得,也分享下本人简单模仿asp.net运行机制所写的通用的微信公众平台开发.Net(c#)框 ...

  9. 微信公众平台java开发详解(工程代码+解析)

    原文:http://blog.csdn.net/pamchen/article/details/38718947 说明:本次的教程主要是对微信公众平台开发者模式的讲解,网络上很多类似文章,但很多都让初 ...

随机推荐

  1. 编译mapnik(win7 环境下vs2008编译mapnik 0.7.1 成功)

    编译mapnik(win7 环境下vs2008编译mapnik 0.7.1 成功) ------by  wangsh 2012.02.22 Mapnik 是一个开源的 Python/C++ 地图渲染引 ...

  2. 性能测试之LoardRunner 手动关联二

    概述: 1.如果寻找左右边界值 2.关联函数详解 以下是详细介绍 1.如果寻找左右边界值 <以login 为例> Step1.录制两份相同的业务流程的的脚本,输入的数据要相同 Step2. ...

  3. FreeLink开源呼叫中心设计思想

    上一篇大概说了国内外优秀的呼叫中心系统: 国内外优秀呼叫中心系统简单介绍 借鉴上述呼叫中心系统,我们的设计新一代呼叫中心例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY ...

  4. SSH反向连接让外网也可远程访问内网机器

    最近把树莓派折腾了一番,放在了家里,但是家里是内网,出门在外,不方便直接ssh上来,于是请教了秦兄,指点迷津,发现SSH反向链接可以实现这个功能. 1. ssh反向链接的概念 A主机:外网,ip:11 ...

  5. Centos系统各种日志存详解

    Centos系统各种日志存储路径和详细介绍 Linux常见的日志文件详述如下 1./var/log/boot.log(自检过程) 2./var/log/cron (crontab守护进程crond所派 ...

  6. 万方数据知识平台 TFHpple +Xpath解析

    试了一下.基本上适合全部的检索结果. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loadi ...

  7. HDU4452Running Rabbits(模拟)

    HDU4452Running Rabbits(模拟) pid=4452" target="_blank" style="">题目链接 题目大意: ...

  8. form表单提交不成功提示

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  9. chfn,chsh,last,login,mail ,mesg ,talk,wall,write,nice ,pstree ,renice,skill ,expr ,reset,tset,compress ,lpd ,lpq ,lpr ,lprm,fdformat ,mformat ,mkdosf

    名称:chfn 使用权限:所有使用者 用法:shell>> chfn 说明:提供使用者更改个人资讯,用于finger and mail username 范例: shell>> ...

  10. GrabCut--Opencv篇

    最近因为工作需要,需要实现一个Grabcut函数.Opencv已经提供此函数,今天把opencv的例程拿出来跑了一下,对于简单的背景实现效果还不错. OpenCV中的GrabCut算法是依据<& ...