以下的格式和参数说明均参考的开发手册

回复纯文本

格式:

<xml> 
    <ToUserName>< ![CDATA[toUser] ]></ToUserName> 
    <FromUserName>< ![CDATA[fromUser] ]></FromUserName> 
    <CreateTime>12345678</CreateTime> 
    <MsgType>< ![CDATA[text] ]></MsgType> 
    <Content>< ![CDATA[你好] ]></Content> 
</xml>

参数说明:

参数是否必须描述
ToUserName接收方帐号(收到的OpenID)
FromUserName开发者微信号
CreateTime消息创建时间 (整型)
MsgTypetext
Content回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

回复图文

格式

<xml>
   <ToUserName>< ![CDATA[toUser] ]></ToUserName>
   <FromUserName>< ![CDATA[fromUser] ]></FromUserName>
   <CreateTime>12345678</CreateTime>
   <MsgType>< ![CDATA[news] ]></MsgType>
   <ArticleCount>1</ArticleCount>
   <Articles>
      <item>
         <Title>< ![CDATA[title1] ]></Title> 
         <Description>< ![CDATA[description1] ]></Description>
         <PicUrl>< ![CDATA[picurl] ]></PicUrl>
         <Url>< ![CDATA[url] ]></Url>
      </item>
   </Articles>
</xml>

参数说明:

参数是否必须说明
ToUserName接收方帐号(收到的OpenID)
FromUserName开发者微信号
CreateTime消息创建时间 (整型)
MsgTypenews
ArticleCount图文消息个数,限制为8条以内
Articles多条图文消息信息,默认第一个item为大图,注意,如果图文数超过8,则将会无响应
Title图文消息标题
Description图文消息描述
PicUrl图片链接,支持JPG、PNG格式,较好的效果为大图360200,小图200200
Url点击图文消息跳转链接

示例代码:(ThinkPHP3.2.3)

<?php
<?php
namespace Wx\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
        //获得参数 signature nonce token timestamp echostr
        $nonce     = $_GET['nonce'];
        $token     = 'xxxx';
        $timestamp = $_GET['timestamp'];
        $echostr   = $_GET['echostr'];
        $signature = $_GET['signature'];
        //形成数组,然后按字典序排序
        $array = array();
        $array = array($nonce, $timestamp, $token);
        sort($array);
        //拼接成字符串,sha1加密 ,然后与signature进行校验
        $str = sha1( implode( $array ) );
        if( $str  == $signature && $echostr ){
            //第一次接入weixin api接口的时候
            echo  $echostr;
            exit;
        }else{
            $this->reponseMsg();
        }
    }
    public function reponseMsg(){
        //1.获取到微信推送过来post数据(xml格式)
        $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
        //2.处理消息类型,并设置回复类型和内容
        $postObj = simplexml_load_string( $postArr );//xml转换成对象
        //判断是否是用户回复过来的消息
        //用户发送过来消息后回复图文消息或者是单文本消息
        if( strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='孙肖宁' ){
            $toUser = $postObj->FromUserName;
            $fromUser = $postObj->ToUserName;
            $arr = array(
                //注意:进行多图文发送时,子图文个数不能超过8个
                array(
                    'title'=>'孙肖宁',
                    'description'=>"孙肖宁的个人博客",
                    'picUrl'=>'http://www.sunxiaoning.com/usr/themes/handsome/usr/img/aaa.jpg',
                    'url'=>'http://www.sunxiaoning.com',
                ),
                array(
                    'title'=>'小宁博客',
                    'description'=>"孙肖宁的个人博客",
                    'picUrl'=>'http://www.sunxiaoning.com/usr/themes/handsome/usr/img/aaa.jpg',
                    'url'=>'http://www.sunxiaoning.com',
                ),
                array(
                    'title'=>'孙肖宁的个人博客',
                    'description'=>"孙肖宁的个人博客",
                    'picUrl'=>'http://www.sunxiaoning.com/usr/themes/handsome/usr/img/aaa.jpg',
                    'url'=>'http://www.sunxiaoning.com',
                ),
            );
            $template = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <ArticleCount>".count($arr)."</ArticleCount>
                        <Articles>";
            foreach($arr as $k=>$v){
                $template .="<item>
                            <Title><![CDATA[".$v['title']."]]></Title> 
                            <Description><![CDATA[".$v['description']."]]></Description>
                            <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>
                            <Url><![CDATA[".$v['url']."]]></Url>
                            </item>";
            }
            
            $template .="</Articles>
                        </xml> ";
            echo sprintf($template, $toUser, $fromUser, time(), 'news');
        }else{
            switch( trim($postObj->Content) ){
                case 1:
                    $content = '您输入的数字是1';
                break;
                case 2:
                    $content = '您输入的数字是2';
                break;
                case 3:
                    $content = '您输入的数字是3';
                break;
                case '博客':
                    $content = "<a href='http://www.sunxiaoning.com'>小宁博客</a>";
                break;
                default:
                    $content = '暂无选项';

            }    
            $toUser   = $postObj->FromUserName;
            $fromUser = $postObj->ToUserName;
            $time     = time();
            $msgType  =  'text';
            $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            </xml>";
             $info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
             echo $info;
        }
    }
}
Last modification:June 24, 2018
If you think my article is useful to you, please feel free to appreciate