您的位置:首页 > 移动开发 > 微信开发

[开发记录][微信]如何回复给用户不同类型的消息

2015-12-04 11:17 701 查看

微信后台开发-如何回复给用户不同类型的消息

微信开发文档已经提供了各种消息类型的回复格式,参考如下:

http://mp.weixin.qq.com/wiki/18/c66a9f0b5aa952346e46dc39de20f672.html

被动回复用户消息时,只需要从发来的消息中提取发送者ID和接收者ID,将两者身份进行对调,构造回复消息即可。

如下,是回复文本消息的方式,回复其他类型的消息时,都可以结合微信给出的消息格式,对这个代码进行改写即可。

private function transmitText($postObj, $content)
{

$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$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>";
$msgType = "text";
$result= sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $content);

return  $result;
}
}


需要特别指出的是,微信在回复语音、视频、图片的时候,回复的不是它们的url,而是一个叫做MediaId的东西。在微信中,语音、视频和图片这种多媒体素材保存在服务器时会分配一个MediaId,为了节省服务器资源,多媒体素材保存的时候分为临时和永久的。

临时的多媒体素材只可以保存三天,MediaId可以被复用。

永久素材的数量则有上限,图文消息素材和图片素材的上限为5000,其他类型为1000。

不论临时还是永久,每个素材的格式大小也有限制,图片大小不超过2M,支持bmp/png/jpeg/jpg/gif格式,语音大小不超过5M,长度不超过60秒,支持mp3/wma/wav/amr格式。

如何上传素材并获取它的MediaId?

1.首先在公众平台获取微信公众号的AppID和AppSecret



2.然后使用AppID和AppSecret获取access_token。

access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

access_token的获取方式是:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

在url中填写自己的AppID和AppSecret和就可获得微信的返回信息

下图为返回信息,包括access_token和它的有效时间7200s。



也可以使用curl的方式获取,代码如下

$appid = "******";
$appsecret = "*********";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
$jsoninfo = json_decode($output, true);
$access_token = $jsoninfo["access_token"];


3.利用access_token上传素材得到返回的MediaId

只能采用curl的方式进行上传,代码如下:

$file_info=array(
'filename'=>'images/0.jpg',  //图片相对于网站根目录的路径
'content-type'=>'image/jpeg',  //文件类型
);

echo add_material($access_token,$file_info);

function add_material($access_token,$file_info){
$url="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$access_token}&type=image";
$ch1 = curl_init ();
$timeout = 5;
$real_path="{$file_info['filename']}";
//$real_path=str_replace("/", "\\", $real_path);
$data= array("media"=>"@{$real_path}",'form-data'=>$file_info);
curl_setopt ( $ch1, CURLOPT_URL, $url );
curl_setopt ( $ch1, CURLOPT_POST, 1 );
curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );
curl_setopt ( $ch1, CURLOPT_POSTFIELDS, $data );
$result = curl_exec ( $ch1 );
curl_close ( $ch1 );

if(curl_errno()==0){
$result=json_decode($result,true);
//var_dump($result);
return $result['media_id'];
}else {
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信