求助微信类

浏览:1455 发布日期:2013/11/13 分类:求助交流 关键字: 微信
用麦当苗儿的类(电梯直达:http://www.thinkphp.cn/extend/370.html)来捣鼓微信,想实现图文混编的菜单效果,如下。


已有的ThinkWechat.class.php的类中有如下的代码:/**
     * * 响应微信发送的信息(自动回复)
     * @param  string $to      接收用户名
     * @param  string $from    发送者用户名
     * @param  array  $content 回复信息,文本信息为string类型
     * @param  string $type    消息类型
     * @param  string $flag    是否新标刚接受到的信息
     * @return string          XML字符串
     */
    public function response($content, $type = 'text', $flag = 0){
        /* 基础数据 */
        $this->data = array(
            'ToUserName'   => $this->data['FromUserName'],
            'FromUserName' => $this->data['ToUserName'],
            'CreateTime'   => NOW_TIME,
            'MsgType'      => $type,
        );

        /* 添加类型数据 */
        $this->$type($content);

        /* 添加状态 */
        $this->data['FuncFlag'] = $flag;

        /* 转换数据为XML */
        $xml = new SimpleXMLElement('<xml></xml>');
        $this->data2xml($xml, $this->data);
        exit($xml->asXML());
    }

    /**
     * 回复文本信息
     * @param  string $content 要回复的信息
     */
    private function text($content){
        $this->data['Content'] = $content;
    }

    /**
     * 回复音乐信息
     * @param  string $content 要回复的音乐
     */
    private function music($music){
        list(
            $music['Title'], 
            $music['Description'], 
            $music['MusicUrl'], 
            $music['HQMusicUrl']
        ) = $music;
        $this->data['Music'] = $music;
    }

    /**
     * 回复图文信息
     * @param  string $news 要回复的图文内容
     */
    private function news($news){
        $articles = array();
        foreach ($news as $key => $value) {
            list(
                $articles[$key]['Title'],
                $articles[$key]['Description'],
                $articles[$key]['PicUrl'],
                $articles[$key]['Url']
            ) = $value;
            if($key >= 9) { break; } //最多只允许10调新闻
        }
        $this->data['ArticleCount'] = count($articles);
        $this->data['Articles'] = $articles;
    }

    /**
     * 数据XML编码
     * @param  object $xml  XML对象
     * @param  mixed  $data 数据
     * @param  string $item 数字索引时的节点名称
     * @return string
     */
    private function data2xml($xml, $data, $item = 'item') {
        foreach ($data as $key => $value) {
            /* 指定默认的数字key */
            is_numeric($key) && $key = $item;

            /* 添加子元素 */
            if(is_array($value) || is_object($value)){
                $child = $xml->addChild($key);
                $this->data2xml($child, $value, $item);
            } else {
                if(is_numeric($value)){
                    $child = $xml->addChild($key, $value);
                } else {
                    $child = $xml->addChild($key);
                    $node  = dom_import_simplexml($child);
                    $node->appendChild($node->ownerDocument->createCDATASection($value));
                }
            }
        }
    }

    /**
     * 对数据进行签名认证,确保是微信发送的数据
     * @param  string $token 微信开放平台设置的TOKEN
     * @return boolean       true-签名正确,false-签名错误
     */
    private function auth($token){
        /* 获取数据 */
        $data = array($_GET['timestamp'], $_GET['nonce'], $token);
        $sign = $_GET['signature'];
        
        /* 对数据进行字典排序 */
        sort($data);

        /* 生成签名 */
        $signature = sha1(implode($data));

        return $signature === $sign;
    }

}
WeixinAction的部分代码如下:    public function index(){
        /* 加载微信SDK */
        import('@.Action.ThinkWechat');
        $weixin = new ThinkWechat('hoshn');

        /* 获取请求信息 */
        $data = $weixin->request();
        
        /* 获取回复信息 */
        // 这里的回复信息是通过判断请求内容+自行定制的, 不在 SDK范围内,请自行完成
        list($content, $type) = $this->reply($data);
         $arr=M('info')->data($data)->add();
        //天气
        if(substr($data['Content'],0,6) == '天气'){
            $content = _getWeather($data['Content']);
            $type = 'text';
        
        //翻译    
        }else if(substr($data['Content'],0,6) == '翻译'){
            $content = _fanyi($data['Content']);
            $type = 'text';
        
        //快递    
        }else if(substr($data['Content'],0,6) == '快递'){
            $content = _getDindan($data['Content']);
            $type = 'text';
            
        //小黄鸡    
        }else if(substr($data['Content'],0,1) == '@'){
            $content = _xiaohuangji($data['Content']);
            $type = 'text';
            
        //帮助
        }else {
            $content="";
            }
            
        /* 响应当前请求 */
        $weixin->response($content, $type);
    }

    private function reply($data){
        if('text' == $data['MsgType']){
            $reply = array($data['Content'], 'text');
        } elseif('event' == $data['MsgType'] && 'subscribe' == $data['Event']){
            $reply = array('欢迎您关注...!', 'text');
        } else {
            exit;
        }
        return $reply;
    }
求达人帮忙指点改成可以回复成图文(如上图)的代码,我改了很多次都没成功,头都大了。

另外,谢谢以上代码的提供者~
最佳答案
评论( 相关
后面还有条评论,点击查看>>