1. 前提
微信接口接上之后我们就可以开始开发功能了,微信接口接入可参考:微信公众平台开发——准备开发和接口接入
2. 注意
需要注意的是$wechatObj->valid()和$wechatObj->responseMsg(),valid是用来调试时验证接口用的,在接入后我们就不需要用到了,可以注释掉,然后调用$wechatObj->responseMsg()来实现功能.
3. 实现
这里实现公众号关注自动回复和普通消息回复作为例子.
<?php
/* 微信接口文件*/
//define your token
define("TOKEN", "wechatgzp");
$wechatObj = new wechatCallbackapiTest(); //实例化封装类
//$wechatObj->valid(); //注释掉这里
$wechatObj->responseMsg(); //这里调用回复功能封装的函数
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)){
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
the best way is to check the validity of xml by yourself */
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$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>";
//加载图文模版
$picTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
</Articles>
<FuncFlag>1</FuncFlag>
</xml> ";
//用户输入内容了
if(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "欢迎关注!更多内容,敬请期待!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
//判断是否是新关注
elseif(trim($postObj->MsgType) == "event" and trim($postObj->Event) == "subscribe")
{
$msgType = "news";
$title = "大兄弟别跑听锅锅说话"; //标题
$data = date('Y-m-d'); //时间
$desription = "感谢您关注【大兄弟别跑听锅锅说话】"."\n"."微信号:gzpblog"."\n"."博客网址:http://www.gzpblog.com"."\n"."更多内容,敬请期待!"; //简介
$image = "http://www.gzpblog.com/usr/uploads/shuta.jpg"; //图片地址
$turl = "http://www.gzpblog.com"; //链接地址
$resultStr = sprintf($picTpl, $fromUsername, $toUsername, $time, $msgType, $title,$desription,$image,$turl);
echo $resultStr;
}
}
else
{
echo "";
exit;
}
}
}
在这里我们用了两种回复格式,关注时自动回复用的是带图片的新闻模式,而普通消息回复则是纯文字。判断关注使用事件来判断,而普通消息回复判断其keyword,各消息类型的推送XML数据包结构在开发者文档中列出来,这里就不列了,给个地址:http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html
以我自己的公众号为例,实现的效果如下:
实际上,这只是其中的一个简单小功能,然后我们会发现,个人公众号,不能通过认证,能调用的接口权限很少,只能实现一些简单功能,具体权限也可以在官方文档中找到。而且,连自定义菜单这种功能,个人公众号都无法调用接口,实在蛋疼得很。(后续补充:个人公众号可以自定义菜单了)
当然,还是有一些功能挺有意思的等待去发掘,将微信服务器和博客的共用可能可以打造出一些有意思的效果,不过不知道能不能实现,现在只是想想,以后有时间研究研究。
4. 后续更新(2017年~)
微信公众号已经可以在后台直接设置自动回复了,个人公众号也可以自定义菜单了,逐渐放开了。所以本文仅供参考了。
0 条评论
来做第一个留言的人吧!