以下的格式和参数说明均参考的开发手册
回复纯文本
格式:
<xml>
<ToUserName>< ![CDATA[toUser] ]></ToUserName>
<FromUserName>< ![CDATA[fromUser] ]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType>< ![CDATA[text] ]></MsgType>
<Content>< ![CDATA[你好] ]></Content>
</xml>
参数说明:
参数 | 是否必须 | 描述 |
---|---|---|
ToUserName | 是 | 接收方帐号(收到的OpenID) |
FromUserName | 是 | 开发者微信号 |
CreateTime | 是 | 消息创建时间 (整型) |
MsgType | 是 | text |
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 | 是 | 消息创建时间 (整型) |
MsgType | 是 | news |
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;
}
}
}