微信第三方平台(微信公众号)代回复多图文

微信发送图文消息,支持多图文发送,微信官方要求用xml格式发送,所以第一种方式就是直接将xml做一个模板,然后用sprintf函数进行格式,大概如下:

 $xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($xmlTpl, $pushData['FromUserName'], $pushData['ToUserName'], time(), $content);


如果是图文的话用图文的模板即可,最后直接echo $result;exit();就可以实现了。


第二种方式是把数据放到数组里面,然后对数组进行xml格式转换即可,要注意的问题是多维数组的递归转换和微信xml回复格式的正确性验证,多图文如下:


 //回复图文消息
    public static function transmitNews($postArr,$newsList)
    {
        $list = [];
        foreach ($newsList as $key => $item){
            $list['item['.$key.']'] = [
                'Title'=>str_replace('%','点',$item['title']),
                'Description'=>'点击进入详情',
                'PicUrl'=>$item['pic'],
                'Url'=>$item['url'],
            ];
        }

        $arr = [
            'ToUserName'=>$postArr['FromUserName'],
            'FromUserName'=>$postArr['ToUserName'],
            'CreateTime'=>time(),
            'MsgType'=>'news',
            'ArticleCount'=>count($newsList),
            'Articles'=>[$list],
        ];

        return self::arr2xml($arr);

    }
//这个是递归转换数组到xml的方法:
private static function arr2xml($data, $root = true){
        $str="";
        if($root)$str .= "<xml>";
        foreach($data as $key => $val){
            //去掉key中的下标[]
            $key = preg_replace('/\[\d*\]/', '', $key);
            if(is_array($val)){
                $child = arr2xml($val, false);
                $str .= "<$key>$child</$key>";
            }else{
                $str.= "<$key><![CDATA[$val]]></$key>";
            }
        }
        if($root)$str .= "</xml>";
        return $str;
    }
最后echo $obj::$transmitNews($postArr,$newsList);即可。


效果如下:



评论/留言