我用wx_sample.php文件,公众号无法回复信息。。已经调用了responseMsg(),token验证通过了,其他地方没有修改,只修改了responseMsg调用这里

解决方案 »

  1.   

    public function responseMsg()
    {
    //get post data, May be due to the different environments
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data
    //就是说如果我们的请求数据不是为空
    if (!empty($postStr)){

    //这里就是xml技术解析数据
    libxml_disable_entity_loader(true);
    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
    $fromUsername = $postObj->FromUserName;
    $toUsername = $postObj->ToUserName;
    $keyword = trim($postObj->Content);
    //这个$event就是事件具体内容
    $event = $postObj->Event;

    //如果微信开发时,当需要调试输出信息,将信息输出到文件中
    file_put_contents('weixin.log',$fromUsername.'->'.$toUsername.'-'.$keyword,FILE_APPEND);

    $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>";

    switch ($postObj->MsgType)
    {           
    case 'event':
    //如果是用户订阅事件
    if ($event == 'subscribe') {
    $contentStr = "感谢订阅";

    $msgType = "text";
    $textTpl = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
    echo $textTpl;
    }
    break;
    case 'text':
    if($keyword == '听歌')
    {
    //返回歌单
    $contentStr = "欢迎来到点歌系统\r\n\r\n 歌单如下 \r\n\r\n1.甜蜜蜜\r\n2.哈哈哈\r\n3.belongto me\r\n";
    //返回
    $msgType = 'text';
    $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);

    echo $resultStr;
    }elseif (preg_match("/^[1-9](\d){0,2}$/", $keyword))
    {
    if ($keyword == '1') {
    $desc = 'first song';
    }elseif ($keyword == '2'){
    $desc == 'second song';
    }elseif ($keyword == '3'){
    $desc = 'third song';
    }else {

    $desc == 'default song';
    $keyword == '1';
    }
    //返回音乐
    $musicTpl = "<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[music]]></MsgType>
    <Music>
    <Title><![CDATA[好听到爆]]></Title>
    <Description><![CDATA[%s]]></Description>
    <MusicUrl><![CDATA[%s]]></MusicUrl>
    <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
    </Music>
    </xml>";

    //获得音乐播发的地址
    $musicUrl = "http://peiyu.ngrok.cc/weixin/mp3/{$keyword}.mp3";
    //填充返回的结果
    $resultStr = sprintf($musicTpl,$fromUsername,$toUsername,$time,$desc,$musicUrl,$musicUrl);
    //返回
    echo $resultStr;

    }

    else{
    //输入错误 返回提示
    $contentStr = "你的输入有问题,请重新输入";
    //返回
    $msgType = 'text';
    $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);

    echo $resultStr;
    }
    break;


    default:
    echo "更多功能开发中-------";
    break;
    }
    }


    }