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

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

微信开发文档已经提供了各种消息类型的回复格式,参考如下:
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

开发者ID信息

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。

微信access_token返回消息

也可以使用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;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值