微信开发系列教程(二)

726 查看

成为微信公众账号开发者后,当然想让别人关注自己的账号时给出一些欢迎语或者其他的友好性提示.根据官方文档,用户第一次关注公众账号会触发一个subscribe(订阅)事件,于此相对于的是用户取消关注公众账号时触发一个unsubscribe(取消订阅)事件.
首先,用户首次关注公众账号微信发送至URL(开发者模式所填UEL,以后文章中如未特意注明都是指开发者模式所填URL)的XML文档如下

<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>  //toUser 开发者微信号
    <FromUserName><![CDATA[FromUser]]></FromUserName> //发送方帐号 也就是该用户的**OpenID**
    <CreateTime>123456789</CreateTime>  //消息创建时间 (整型)
    <MsgType><![CDATA[event]]></MsgType> //消息类型,event
    <Event><![CDATA[subscribe]]></Event> //事件类型,subscribe(订阅)、unsubscribe(取消订阅)
</xml>

接收到该XML文档之后,使用PHP进行解析:

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信端的XML文档
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$MsgType = $postObj->event;
$Event = $postObj->subscribe;

解析完成后,得到消息的类型为event,事件类型为subscribe,可知是用户第一次关注该公众账号,发送被动响应消息,被动响应消息的类型和对应XML文档格式见:发送微信被动响应消息,这里以回复文本消息为例,回复被动响应文本消息XML文档如下:

<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName> //即上面解析得到的 $fromUsername 用户Openid
    <FromUserName><![CDATA[fromUser]]></FromUserName> //即上面解析得到的$toUsername  开发者账号
    <CreateTime>12345678</CreateTime>  //使用time()函数
   <MsgType><![CDATA[text]]></MsgType>  //标识回复的消息类型为 text
   <Content><![CDATA[]]></Content>  //回复的内容
</xml>

在模板中可以使用占位符(%s),

$textTpl = "<xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[%s]]></MsgType>
            <Content><![CDATA[%s]]></Content>
            </xml>";
$msgType = "text";
$contentStr = "hello world";
//这里的$fromUsername, $toUsername 对应上文中解析出的参数
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;

同时在用户关注时,可以将用户的必要数据存入数据库.在用户取消关注触发unsubscribe(取消订阅)事件时,删除用户的数据