申请了订阅号,就得做点有意义的事情。对于会写代码的人,肯定不甘寂寞使用编辑模式,傻瓜式的回复。所以,根据粉丝(管关注该订阅号的用户)发送过来的信息,来处理各自的事情才是最爽的。
有时候,想法是美好的。微信是腾讯生出来的,什么都得按它的标准与要求来。或许部分对象不用这样,比如招商银行,中国移动等。他们可以得到会享受到普通人所不能享受到的特权。一切,都不是平等的啊。
提到上边这个,就说到具体点的事情。微信公众平台账号分为服务号和订阅号。服务号是企业,媒体,政府等才能够申请的。目前,是300元人民币一年的审核费(一次需要审核需要300元,如果审核不通过,那就需要下一个300元,除非你放弃了)。对于订阅号,也是可以花300元进行审核的,不过申请对象一样不是个人。即使订阅号申请通过了,依然还是订阅号。我也是从昨天开始才研究微信公众平台的。对于服务号和订阅号的区别是服务号可以使用自定义菜单,能够使用高级功能。审核通过的订阅号貌似也可以自定义菜单。
对于微博认证和微信认证,以及其他的相关的信息,可以访问刘峰的csdn博客:刘峰CSDN博客
既然腾讯生出微信公众平台,自然有提供文档以及API。那么就一步步的来吧。
登录上微信公众平台,点击“服务” – “我的服务” -“向用户回复消息”,如下图所示。
然后,会出现详细文档。所要用到的参数,格式都有。只是,没告诉你怎么用。当你知道怎么用了,再来看这个文档,就会发现眼前一片光明。如下图,是自动回复文字消息的介绍:
下边说下流程吧。
当粉丝发过来消息时,会以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