最近在做微信功能的开发。偶然发现个好玩的东西。就是发歌名,会回复歌曲,点击即可听歌。加上方微信即可试听。现分享代码。使用方法:直接粘贴代码,修改TOKEN为自己的即可。 开发参考资料:微信公众平台开发者文档 打造一个微信语音点歌系统
<?php define("TOKEN", "yelongyi"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); /** * 微信处理类 */ class wechatCallbackapiTest { /** * 回应微信推送的主方法 */ public function responseMsg() { //获取post数据 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //解析post数据 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); switch ($postObj->MsgType) { case 'event': echo $resultStr = $this->getWelcomeContent($postObj); break; case 'text': echo $resultStr = $this->getMusicContent($postObj); break; default: echo $resultStr = $this->getMusicContent($postObj); break; } } /** * 用户关注该公众号时推送给用户的信息 * @param resource $postObj 微信推送过来的数据对象 * */ private function getWelcomeContent($postObj) { if ($postObj->Event == 'subscribe') { $ret = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $ToUserName = $postObj->FromUserName; $FromUserName = $postObj->ToUserName; $CreateTime = time(); $MsgType = 'text'; $Content = '欢迎关注PHP技术文章,本公众号会不定时分享PHP相关技术性文章。当然,无聊也开发了一些小功能,目前可用的是点歌功能,输入歌名或歌名[空格]歌星,即可点歌。个人网站:www.yelongyi.com'; return sprintf($ret, $ToUserName, $FromUserName, $CreateTime, $MsgType, $Content); } else { //这里是取消关注,暂时不做处理 } } /** * 获取返回数据,响应文字流 * @param resource $postObj 微信推送过来的数据对象 * @return text 格式化的字符串 */ private function getTextContent($postObj) { $ret = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $MsgType = 'text'; //回复类型 $GetMsg = $postObj->Content; //用户发送的内容 //如果输入的是以下文字,后期会进行其他处理,目前还没做。 $MsgArray = array('文章', '技术', '其他', '笑话'); if (in_array($GetMsg, $MsgArray)) { $RetMsg = '您需要的' . $GetMsg . '还没有找到,好吧,就算找到了也不会回给你。'; } else { $RetMsg = '亲,如果您是点歌,那么很遗憾没有找到您点的歌,请确认后再次点歌。如果您是来逗我的话,对不起,我宁死不从。我也是有贞操的。'; } $resultStr = sprintf($ret, $postObj->FromUserName, $postObj->ToUserName, time(), $MsgType, $RetMsg); return $resultStr; } /** * 获取返回数据,响应点歌 * @param type $postObj 微信推送过来的数据对象 * @return text 格式化的字符串 */ private function getMusicContent($postObj) { $ret = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Music> <Title><![CDATA[%s]]></Title> <Description><![CDATA[]]></Description> <MusicUrl><![CDATA[%s]]></MusicUrl> <HQMusicUrl><![CDATA[%s]]></HQMusicUrl> <FuncFlag><![CDATA[1]]></FuncFlag> </Music> </xml>"; $recognition = $postObj->Content; //判断格式是否为歌名+明星 if (strstr($recognition, " ")) { $strArray = explode(" ", $recognition); $keywordc = urlencode($strArray[0]); $keyword2 = urlencode($strArray[1]); } else { $keywordc = urlencode($recognition); $keyword2 = null; } //这里歌曲库拿的是百度音乐,歌曲还是比较全的 $musicapi = "http://box.baidu.com/x?op=12&count=1&title={$keywordc}\$\${$keyword2}\$\$\$\$"; $simstr = file_get_contents($musicapi); $musicobj = simplexml_load_string($simstr); //如果没有搜寻到歌曲,按输入文字处理 if (empty($musicobj->count)) { return $this->getTextContent($postObj); } foreach ($musicobj->url as $itemobj) { $encode = $itemobj->encode; $decode = $itemobj->decode; $removedecode = end(explode('&', $decode)); if ($removedecode <> "") { $removedecode = "&" . $removedecode; } $decode = str_replace($removedecode, "", $decode); $musicurl = str_replace(end(explode('/', $encode)), $decode, $encode); break; } $resultStr = sprintf($ret, $postObj->FromUserName, $postObj->ToUserName, time(), 'music', $recognition, $decode, $musicurl, $musicurl); return $resultStr; } } ?>
微信公众平台回复公众号听歌
最新推荐文章于 2022-10-02 10:17:35 发布