php微信公众号开发(3)php实现简单微信文本通讯
微信开发前,需要设置token,这个是微信设置的,可以任意设置,用来实现微信通讯。这里有一个别人写的微信类,功能还比较不错。weixin.class.php代码如下
<?php
classWeixin
{
public$token='';//token
public$debug=false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据
public$setFlag=false;
public$msgtype='text';//('text','image','location')
public$msg=array();
publicfunction__construct($token,$debug)
{
$this->token=$token;
$this->debug=$debug;
}
//获得用户发过来的消息(消息内容和消息类型)
publicfunctiongetMsg()
{
$postStr=$GLOBALS["HTTP_RAW_POST_DATA"];
if(!empty($postStr)){
$this->msg=(array)simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
$this->msgtype=strtolower($this->msg['MsgType']);
}
}
//回复文本消息
publicfunctionmakeText($text='')
{
$CreateTime=time();
$FuncFlag=$this->setFlag?1:0;
$textTpl="<xml>
<ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>
<FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>
<CreateTime>{$CreateTime}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%s</FuncFlag>
</xml>";
returnsprintf($textTpl,$text,$FuncFlag);
}
//根据数组参数回复图文消息
publicfunctionmakeNews($newsData=array())
{
$CreateTime=time();
$FuncFlag=$this->setFlag?1:0;
$newTplHeader="<xml>
<ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName>
<FromUserName><![CDATA[{$this->msg['ToUserName']}]]></FromUserName>
<CreateTime>{$CreateTime}</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[%s]]></Content>
<ArticleCount>%s</ArticleCount><Articles>";
$newTplItem="<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";
$newTplFoot="</Articles>
<FuncFlag>%s</FuncFlag>
</xml>";
$Content='';
$itemsCount=count($newsData['items']);
$itemsCount=$itemsCount<10?$itemsCount:10;//微信公众平台图文回复的消息一次最多10条
if($itemsCount){
foreach($newsData['items']as$key=>$item){
if($key<=9){
$Content.=sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']);
}
}
}
$header=sprintf($newTplHeader,$newsData['content'],$itemsCount);
$footer=sprintf($newTplFoot,$FuncFlag);
return$header.$Content.$footer;
}
publicfunctionreply($data)
{
echo$data;
}
publicfunctionvalid()
{
if($this->checkSignature()){
if($_SERVER['REQUEST_METHOD']=='GET')
{
echo$_GET['echostr'];
exit;
}
}else{
exit;
}
}
privatefunctioncheckSignature()
{
$signature=$_GET["signature"];
$timestamp=$_GET["timestamp"];
$nonce=$_GET["nonce"];
$tmpArr=array($this->token,$timestamp,$nonce);
sort($tmpArr);
$tmpStr=implode($tmpArr);
$tmpStr=sha1($tmpStr);
if($tmpStr==$signature){
returntrue;
}else{
returnfalse;
}
}
}
?>
接着正式开发,使用百度SVN地址,创建weixinapi.php文件,这个根据你后台设置名称。
<?php
define("TOKEN","");
define('DEBUG',false);
include_once('weixin.class.php');
require_once("db.php");
$weixin=newWeixin(TOKEN,DEBUG);//实例化
$weixin->getMsg();
$type=$weixin->msgtype;//消息类型
$keyword=$weixin->msg['Content'];//获取的文本
if($type==='text'){
$reply=$weixin->makeText($key);
}elseif($type==='event'){//第一次关注推送事件
$reply=$weixin->makeText("欢迎关注");
}else{//其他类型
$reply=$weixin->makeText("暂时没有图片,声音,地理位置等功能,后续开发会增加,感谢你关注");
}
$weixin->reply($reply);
这样就实现了一个例子,第一次关注事件回复,非文本回复,以及文本回复,这里文本回复是你输入什么就返回什么。
具体实现功能就写在文本回复里面。
其他的功能暂时不做,具体开发下节再说。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。