微信公众平台回复公众号听歌

来源:互联网 发布:淘宝交易关闭alin41288 编辑:程序博客网 时间:2024/04/29 23:39
最近在做微信功能的开发。偶然发现个好玩的东西。就是发歌名,会回复歌曲,点击即可听歌。加上方微信即可试听。现分享代码。使用方法:直接粘贴代码,修改TOKEN为自己的即可。 开发参考资料:微信公众平台开发者文档   打造一个微信语音点歌系统 
<?phpdefine("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;    }}?>

                                             
0 0
原创粉丝点击