微信公众平台PHP开发


微信公众平台PHP开发

最近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的~
 
闽南师大小秘书
 
今天来分享一下开发经验~
微信公众平台提供的接口很简单,先看看消息交互流程:
 
微信公众平台消息交互流程
 
说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过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 {
 	    publicfunction valid() {
 	        $echoStr= $_GET["echostr"];
 	        if($this->checkSignature()){
 	            echo$echoStr;
 	            exit;
 	        }
 	    }
 	 
 	    privatefunction 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) {
 	            returntrue;
 	        } else {
 	            returnfalse;
 	        }
 	    }
 	}
?>


这玩意儿就是微信公众平台校验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 {
 	    publicfunction 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”的消息。


现在用户通过微信公众平台发送任何消息公众账号均会返回一条内容为“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,速度比较快~
 

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

<?php
/*-------------------------------------------------
|     index.php [ 微信公众平台接口 ]
+--------------------------------------------------
|     Author: LinYunpeng <QQ:50663950>
+------------------------------------------------*/

$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"; //消息类型
		include('simsimi.php');
		$contentStr = simsimi($keyword); //返回消息内容

		//格式化消息模板
		$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
		echo $resultStr; //输出结果
	}
}
?>

<?php
/*-------------------------------------------------
|     simsimi.php [ 智能聊天(simsimi) ]
+--------------------------------------------------
|     Author: LinYunpeng <QQ:50663950>
+------------------------------------------------*/

function simsimi($keyword) {
	$keyword = urlencode(urlencode($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&ft=0.0";
	$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 '我还不会回答这个问题...';
	}
}
?>



phpWechat 是由一个具有多年行业开发经验的前端 UI 设计师、PHP开发工程师组成的团队设计、研发的一套的微信公众平台管理系统,您可以瞬间完成一个公共号或者PC站或者两者皆有的平台搭建。 phpWeChat 微信+网站开发框架功能亮点: 1、100%开源,没有任何加密文件 phpWeChat核心文件100%开源,没有任何加密文件,开发者可以放心使用而无需担心留有后门程序等。 2、程序轻量级,一天读完所有代码 核心框架压缩包只有2.66M,十分利于开发者迅速阅读全部代码。 3、代码严谨,结构清晰 phpWeChat使用MVC开发模式,各个功能模块之间独立并目录结构统一。开发者可迅速掌握phpWeChat的框架结构。 4、二次开发文档十分完善 我们提供了完善的phpWeChat二次开发文档,便于开发者学习与查阅。 5、高度集成微信接口 phpWeChat高度集成了微信公共号的自动回复、菜单管理、素材管理、模板消息、粉丝管理、微信支付等常用接口,您只需一个函数或2/3行代码即可实现原本需要很费时费力才能开发的功能。 6、phpWeChat也是一个PC(网站)开发框架和CMS 慢慢您会发现,phpWeChat是一个更接近CMS功能的框架。 7、高度封装常用开发功能 只需一两行固定的代码,您便可以写出列表分页、微信支付、文件上传、邮件发送、短信发送等功能。 8、数据结构合理,负载强劲 phpWeChat集成了常见的内存级缓存(MemCache)、文件缓存处理方案,使得系统更符合大数据、大并发的公共号或网站使用。 9、集成应用市场,功能拓展一瞬间 phpWeChat集成了应用市场并在线安装应用的功能,您可以在一瞬间安装完成其他开发开发的功能模块。 phpWeChat安装方法: 将下载的程序压缩包(zip格式)解压后,将全部文件和文件夹上传至网站根目录。然后输入域名/install.php 即可进入安装程序。 注意:安装phpWeChat前请先创建好phpWeChat所需的数据库。 phpWeChat 目录结构: addons 功能模块目录 admin 公用后台目录 api 插件目录 data 数据缓存目录 install 安装程序目录,安装后请改名或删除 include 公用操作类目录 statics 静态文件目录 template 视图(模板)目录 upload 上传文件存放目录 phpWeChat 更新日志: 新版v1.0.3发布: phpWeChat PC+微信公众号开发核心框架v1.0.3针对v1.0.2版本出现的问题,主要修复了和增加了以下功能: 1、优化自定义模块操作; 2、优化安装过程; 3、修复一处在线支付的PHP版本兼容问题; 4、修复一处自定义模块的问题; 5、修复后台模块管理显示未知版本的bug; 6、修复粉丝行为IP报错的Bug; 7、删除一些冗余代码; 8、修复消息模板不存在时,一直提示[同步中]的bug。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值