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

最近在做微信功能的开发。偶然发现个好玩的东西。就是发歌名,会回复歌曲,点击即可听歌。加上方微信即可试听。现分享代码。使用方法:直接粘贴代码,修改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;
    }

}

?>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值