1. 程式人生 > >[開發記錄][微信]如何回覆給使用者不同型別的訊息

[開發記錄][微信]如何回覆給使用者不同型別的訊息

微信後臺開發-如何回覆給使用者不同型別的訊息

如下,是回覆文字訊息的方式,回覆其他型別的訊息時,都可以結合微信給出的訊息格式,對這個程式碼進行改寫即可。

 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和它的有效時間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;
  }
}