[开发记录][微信]如何回复给用户不同类型的消息
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; } }
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- 微信的成功,靠的是QQ导流吗?
- 微信服务号推送模板消息接口
- PHP限制页面只能在微信自带浏览器访问的代码
- HTML5实现微信拍摄上传照片功能
- 微信小程序去哪里找 小程序到底如何使用(附小程序名单)
- 使用jQuery.wechat构建微信WEB应用
- nw.js实现类似微信的聊天软件
- jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法
- JS版微信6.0分享接口用法分析
- 大家在抢红包,程序员在研究红包算法
- js如何判断用户是否是用微信浏览器
- java制作仿微信录制小视频控件