申请了订阅号,就得做点有意义的事情。对于会写代码的人,肯定不甘寂寞使用编辑模式,傻瓜式的回复。所以,根据粉丝(管关注该订阅号的用户)发送过来的信息,来处理各自的事情才是最爽的。
有时候,想法是美好的。微信是腾讯生出来的,什么都得按它的标准与要求来。或许部分对象不用这样,比如招商银行,中国移动等。他们可以得到会享受到普通人所不能享受到的特权。一切,都不是平等的啊。

提到上边这个,就说到具体点的事情。微信公众平台账号分为服务号和订阅号。服务号是企业,媒体,政府等才能够申请的。目前,是300元人民币一年的审核费(一次需要审核需要300元,如果审核不通过,那就需要下一个300元,除非你放弃了)。对于订阅号,也是可以花300元进行审核的,不过申请对象一样不是个人。即使订阅号申请通过了,依然还是订阅号。我也是从昨天开始才研究微信公众平台的。对于服务号和订阅号的区别是服务号可以使用自定义菜单,能够使用高级功能。审核通过的订阅号貌似也可以自定义菜单。

对于微博认证和微信认证,以及其他的相关的信息,可以访问刘峰的csdn博客:刘峰CSDN博客

既然腾讯生出微信公众平台,自然有提供文档以及API。那么就一步步的来吧。
登录上微信公众平台,点击“服务” – “我的服务” -“向用户回复消息”,如下图所示。

微信订阅号自动回复消息1

微信订阅号自动回复消息1


然后,会出现详细文档。所要用到的参数,格式都有。只是,没告诉你怎么用。当你知道怎么用了,再来看这个文档,就会发现眼前一片光明。如下图,是自动回复文字消息的介绍:
微信订阅号自动回复消息2

微信订阅号自动回复消息2


下边说下流程吧。
当粉丝发过来消息时,会以POST的形式发送。你的服务器文件会接受到信息,然后对接受到的信息进行解析。这个时候,你可以对接受到的信息进行不同的处理。比如用户如果发送过来的消息是1,你就返回给用户一段文字。如果发送过来的消息是2,你就返回给用户另一段文字。如果发送过来的消息是3,你就给用户返回一首音乐。下边,仅仅以如何返回文字消息贴出代码,语音是PHP的。PHP我只是会看懂一点。

    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        $contentStr = "";
        $msgType = "";
        if (!empty($postStr)){
                
                  $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>";             
                if(!empty( $keyword ))
                {
                      switch($keyword)
                      {
                          case '1':
                            $msgType = "text";
                              $contentStr = "天没有边,没有界。心是花园,也是荒野。光阴在花绽开中消亡,歌舞却永不停下。将一片云纱与你,敢不敢,愿不愿,一起飞跃长空。 \n /:rose 回复1101,收听《梦魇》";
                              $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                              echo $resultStr;
                              break;
                        default:
                            break;
                    }
              
                }
                else
                {
                    echo "Input something...";
                }
        }
        else 
        {
            echo "";
            exit;
        }
    }

 

$textTpl变量的值,就是上边说的,微信公众平台的文档中的自动回复消息的xml代码。只是,将其中需要填充的数据,抽取了出来。
按照上边的形式,你还可以自动回复图文消息,以及音乐消息。只是,普通订阅号不能回复图片,不能回复语音,不能回复视频。回复的音乐消息还没有封图。为什么不能回复呢。因为在那些的必须参数里边需要mediaId,可是普通订阅号根本就没这个。
有些人说可以通过其他方法自动回复图片,不知道怎么弄的。
想着这些限制,是有点郁闷的。
微信公众平台的研究,就两天吧。明天起,去做点别的。苦命的我,什么都得自己一个人摸索学习。

这里贴出封装好的被动回复消息的匹配类:
MatchText.php

<?php
class MatchUtils
{
    public $setFlg = FALSE;
    public $debug = TRUE;

    public function MatchUtils()
    {

    }
    
    /**
     * 回复文本消息
     * @param array $newsData
     * @return string
     */
    public function MatchText($newsData)
    {
        $createtime = time();
        $funcflag = $this->setFlag ? 1 : 0;
        $textTpl ="<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[%s]]></MsgType>
        <Content><![CDATA[%s]]></Content>
        <FuncFlag>%s</FuncFlag>
        </xml>";
        return sprintf($textTpl,$newsData['FromUserName'], $newsData['ToUserName'],$createtime,"text",$newsData['content'],$funcflag);
    }
    
    
    /**
     * 回复图片消息
     * @param array $newsData
     * @return string
     */
    public function MatchImage($newsData)
    {
        $createtime = time();
        $funcflag = $this->setFlag ? 1 : 0;
        $textTpl = "<xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[%s]]></MsgType>
            <Image>
            <MediaId><![CDATA[%s]]></MediaId>
            </Image>
            <FuncFlag>%s</FuncFlag>
            </xml>";
        return sprintf($textTpl , $newsData['FromUserName'], $newsData['ToUserName'],$createtime,"image",$newsData['mediaId'] , $funcflag);
    }
    
    /**
     * 回复语音消息
     * @param array $newsData
     * @return string
     */
    public function MatchVoice($newsData)
    {
        $createtime = time();
        $funcflag = $this->setFlag ? 1 : 0;
        $textTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[%s]]></MsgType>
        <Voice>
        <MediaId><![CDATA[%s]]></MediaId>
        </Voice>
        <FuncFlag>%s</FuncFlag>
        </xml>";
        return sprintf($textTpl , $newsData['FromUserName'], $newsData['ToUserName'],$createtime,"voice", $newsData['mediaId'] , $funcflag);
    }
    
    /**
     * 回复视频消息
     * @param array $newsData
     * @return string
     */
    public function MatchVideo($newsData)
    {
        $createtime = time();
        $funcflag = $this->setFlag ? 1 : 0;
        $textTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[%s]]></MsgType>
        <Video>
        <MediaId><![CDATA[%s]]></MediaId>
        <Title><![CDATA[%s]]></Title>
        <Description><![CDATA[%s]]></Description>
        </Video>
        <FuncFlag>%s</FuncFlag>
        </xml>";
        return sprintf($textTpl , $newsData['FromUserName'], $newsData['ToUserName'],$createtime,"video", $newsData['mediaid'] , $newsData['title'] , $newsData['description'] , $funcflag);
    }
    
    
    /**
     * 回复音乐消息
     * @param array $newsData
     * @return string
     */
    public function MatchMusic($newsData=array())
    {
        $createtime = time();
        $funcflag = $this->setFlag ? 1 : 0;
        $textTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[%s]]></MsgType>
        <Music>
        <Title><![CDATA[%s]]></Title>
        <Description><![CDATA[%s]]></Description>
        <MusicUrl><![CDATA[%s]]></MusicUrl>
        <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
        </Music>
        <FuncFlag>%s</FuncFlag>
        </xml>";
        return sprintf($textTpl,$newsData['FromUserName'], $newsData['ToUserName'],$createtime,"music",$newsData['title'],$newsData['description'],$newsData['MusicUrl'],$newsData['HQMusicUrl'],$funcflag);
    }
    
    /**
     * 回复图文消息
     * @param array $newsData
     * @return string
     */
    public function MatchNews($newsData=array())
    {
        $createtime = time();
        $funcflag = $this->setFlag ? 1 : 0;
        $newTplHeader = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>{%s}</CreateTime>
        <MsgType><![CDATA[%s]]></MsgType>
        <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) 
            {
                $content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picUrl'],$item['url'])."\r\n";//微信的信息数据
            }
         }
        $header = sprintf($newTplHeader,$newsData['FromUserName'], $newsData['ToUserName'],$createtime,"news",$itemsCount);
                $footer = sprintf($newTplFoot,$funcflag);
        return $header . $content . $footer;
    }
    
    public function Reply($mes)
    {
//         if($this -> debug)
//         {
//             $this ->writeStr($mes."\n");
//         }
        echo($mes);
    }
    
    /**
     * 打印数据到本地
     **/
    private function writeStr($str)
    {
        $date = date('Y-m-d');
        $open=fopen("log/".$date."_log.txt","a" );
        fwrite($open,$str);
        fclose($open);
    }
}
?>

 

这样调用:

        //这个array包含了用户发送过来的消息。比如各种ID等。
        $array['content'] = "这个是回复文本匹配"
        $matchUtils = new MatchUtils();
        $reply = $matchUtils->MatchText($array);
        $matchUtils->Reply($reply);

 

这里有免费的服务器URL以及token。想用的可以试试效果:
url:http://www.vini123.com/weixin/
token:vini123
有兴趣的朋友,可以扫扫右边的二维码或添加微信哦:vinifly