讀古今文學網 > 微信公眾平台開發:從零基礎到ThinkPHP5高性能框架實踐 > 9.1 客服接口 >

9.1 客服接口

當用戶和公眾號產生特定動作的交互時,微信將會把消息數據推送給開發者,開發者可以在一段時間內(目前為48小時)調用客服接口,通過POST一個JSON數據包來發送消息給普通用戶。此接口主要用於客服等有人工消息處理環節的功能,方便開發者為用戶提供更加優質的服務。

目前允許的動作列表如下。

1)用戶發送信息。

2)點擊自定義菜單(僅有點擊推事件、掃碼推事件、掃碼推事件且彈出「消息接收中」提示框這三種菜單類型會觸發客服接口)。

3)關注公眾號。

4)掃瞄二維碼。

5)支付成功。

6)用戶維權。

開發者可以直接構造文本和圖文消息回復給用戶。而音樂、圖片、語音、視頻這四種消息則需要先獲得素材的media_id,這可以從用戶發送過來的消息中獲得,也可以通過上傳多媒體文件來獲得。

發送客服消息的接口如下。


https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
  

發送各種類型的客服消息介紹如下。

1.向用戶發送文本

向用戶發送文本的數據格式如下。


{
    "touser":"OPENID",
    "msgtype":"text",
    "text":
    {
         "content":"Hello World"
    }
}
  

該數據的參數說明如表9-1所示。

表9-1 客服接口文本消息的參數說明

向用戶發送文本消息的代碼實現如下。


$access_token = "nFX6GFsspSLBKJLgMQ3kj1YM8_FchRE7vE2ZOIlmfiCOQntZKnBwuOen2GCBpFHBYS4QLGX9fGoVfA36tftME2sRiYsKPzgGQKU-ygU7x8cgy_1tlQ4n1mhSumwQEGy6PK6rdTdo8O8GROuGE3Hiag";
$openid = "o7Lp5t6n59DeX3U0C7Kric9qEx-Q";
$data = '{
    "touser":"'.$openid.'",
    "msgtype":"text",
    "text":
    {
         "content":"Hello World"
    }
}';
$url = "https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_
token;
$result = https_request($url, $data);
var_dump($result);

function https_request($url, $data)
{
    $curl = curl_init;
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($curl);
    if (curl_errno($curl)) {
        return 'Errno'.curl_error($curl);
    }
    curl_close($curl);
    return $result;
}
  

上述代碼執行後,效果如圖9-1所示。

2.向用戶發送圖文

向用戶發送圖文時,發送的數據格式如下。


{
    "touser":"OPENID",
    "msgtype":"news",
    "news":{
        "articles": [
        {
            "title":"Happy Day",
            "description":"Is Really A Happy Day",
            "url":"URL",
            "picurl":"PIC_URL"
        },
        {
            "title":"Happy Day",
            "description":"Is Really A Happy Day",
            "url":"URL",
            "picurl":"PIC_URL"
        }
        ]
    }
}
  

該數據的參數說明如表9-2所示。

表9-2 客服接口圖文消息的參數說明

向用戶發送圖文消息的代碼實現如下。


$access_token = "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-
WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9
qgfnmNtIZWSjSQ";
$url = "https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_
token;
$openid = "oLVPpjqs9BhvzwPj5A-vTYAX3GLc";

// 發送圖文
$data = '{
    "touser": "'.$openid.'", 
    "msgtype": "news", 
    "news": {
        "articles": [
            {
                "title": "深圳天氣預報", 
                "description": "", 
                "picurl": "", 
                "url": ""
            }, 
            {
                "title": "12月04日 週三 13℃~23℃ 多雲 微風", 
                "description": "", 
                "picurl": "http:// discuz.comli.com/weixin/weather/d01.jpg", 
                "url": ""
            }, 
            {
                "title": "12月05日 週四 16℃~24℃ 晴 微風", 
                "description": "", 
                "picurl": "http:// discuz.comli.com/weixin/weather/d00.jpg", 
                "url": ""
            }, 
            {
                "title": "12月06日 週五 16℃~24℃ 多雲 微風", 
                "description": "", 
                "picurl": "http:// discuz.comli.com/weixin/weather/d01.jpg", 
                "url": ""
            }
        ]
    }
}';
$result = https_request($url,$data);

function https_request($url, $data = null)
{
    $curl = curl_init;
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
 

上述代碼執行後,效果如圖9-2所示。

圖9-1 微信公眾號發送文本消息

圖9-2 微信公眾號發送圖文消息

3.向用戶發送音樂

向用戶發送音樂時,數據格式如下。


{
    "touser":"OPENID",
    "msgtype":"music",
    "music":
    {
        "title":"MUSIC_TITLE",
        "description":"MUSIC_DESCRIPTION",
        "musicurl":"MUSIC_URL",
        "hqmusicurl":"HQ_MUSIC_URL",
        "thumb_media_id":"THUMB_MEDIA_ID" 
    }
}
  

該數據的參數說明如表9-3所示。

表9-3 客服接口音樂消息的參數說明

發送音樂消息的代碼實現如下。


$access_token = "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-
WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9
qgfnmNtIZWSjSQ";
$url = "https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_
token;
$openid = "oLVPpjqs9BhvzwPj5A-vTYAX3GLc";

// 發送音樂
$data = '{
    "touser": "'.$openid.'", 
    "msgtype": "music", 
    "music": {
        "title": "最炫民族風", 
        "description": "鳳凰傳奇", 
        "musicurl": "http:// 122.228.226.40/music/zxmzf.mp3", 
        "hqmusicurl": "http:// 122.228.226.40/music/zxmzf.mp3", 
        "thumb_media_id": "b8as-GpA_EFqVoPY7vPT3fpVZBWJb27K77De2dc_0FZml-UExlTMP7
        IVMz89uh3W"
    }
}';
$result = https_request($url,$data);
var_dump($result);

function https_request($url, $data = null){
    $curl = curl_init;
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
  

上述代碼執行後,效果如圖9-3所示。

4.向用戶發送圖片

向用戶發送圖片時,數據格式如下。


{
    "touser":"OPENID",
    "msgtype":"image",
    "image":
    {
        "media_id":"MEDIA_ID"
    }
}
  

該數據的參數說明如表9-4所示。

表9-4 客服接口圖片消息的參數說明

發送圖片消息的代碼實現如下。


$access_token = "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-
WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9
qgfnmNtIZWSjSQ";
$url = "https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_
token;
$openid = "oLVPpjqs9BhvzwPj5A-vTYAX3GLc";

// 發送圖片
$data = '{
    "touser":"'.$openid.'",
    "msgtype":"image",
    "image":
    {
        "media_id":"jViS8sQUXIh6rTdkz2qUOD5pvChYpp50i9rsLR4YnCm-pqdpiHhz6xbN2KAboScV"
    }
}';
$result = https_request($url,$data);
var_dump($result);

function https_request($url, $data = null){
    $curl = curl_init;
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
  

上述代碼執行後,效果如圖9-4所示。

圖9-3 微信公眾號發送音樂消息

圖9-4 微信公眾號發送圖片消息

5.向用戶發送語音

向用戶發送語音時,數據格式如下。


{
    "touser":"OPENID",
    "msgtype":"voice",
    "voice":
    {
        "media_id":"MEDIA_ID"
    }
}
  

該數據的參數說明如表9-5所示。

表9-5 客服接口語音消息的參數說明

向用戶發送語音消息的代碼實現如下。


$access_token = "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-
WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9
qgfnmNtIZWSjSQ";
$url = "https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_
token;
$openid = "oLVPpjqs9BhvzwPj5A-vTYAX3GLc";

// 發送語音
$data= '
{
    "touser": "'.$openid.'", 
    "msgtype": "voice", 
    "voice": {
        "media_id": "gAn8fV1hQB8mtLf6X2YTN-3ySaBMlzvbCLAzFUhPQDRVrWA1o9tRCnzxa4bEzUiM"
    }
}';
$result = https_request($url,$data);
var_dump($result);

function https_request($url, $data = null){
    $curl = curl_init;
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
 

上述代碼執行後,效果如圖9-5所示。

6.向用戶發送視頻

向用戶發送視頻時,數據格式如下。


{
    "touser":"OPENID",
    "msgtype":"video",
    "video":
    {
        "media_id":"MEDIA_ID",
        "title":"TITLE",
        "description":"DESCRIPTION"
    }
}
  

該數據的參數說明如表9-6所示。

表9-6 客服接口視頻消息的參數說明

向用戶發送視頻消息的代碼實現如下。


$access_token = "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-
WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9
qgfnmNtIZWSjSQ";
$url = "https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_
token;
$openid = "oLVPpjqs9BhvzwPj5A-vTYAX3GLc";

// 發送視頻
$data = '{
    "touser": "'.$openid.'", 
    "msgtype": "video", 
    "video": {
        "media_id": "zbpy8wXj2UtIKB_56QUddCYLmWPLVeHoKqE94h2-nB9weSU65nVKTpE909Mvi8b5",
        "thumb_media_id": "b8as-GpA_EFqVoPY7vPT3fpVZBWJb27K77De2dc_0FZml-UExlTMP7IVMz
        89uh3W"
    }
}';
$result = https_request($url,$data);
var_dump($result);

function https_request($url, $data = null){
    $curl = curl_init;
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
  

上述代碼執行後,效果如圖9-6所示。

圖9-5 微信公眾號發送語音消息

圖9-6 微信公眾號發送視頻消息

7.向用戶發送卡券

向用戶發送卡券時,數據格式如下。


{
    "touser":"oiPuduCHIBb2aHvZoqSm1t7KbXtw",
    "msgtype":"wxcard",
    "wxcard":{
        "card_id":"piPuduM3NHSnSMYgWS-oqGFQbBjM"
    }
}
  

該數據的參數說明如表9-7所示。

表9-7 客服接口卡券消息的參數說明

向用戶發送卡券消息的代碼實現如下。


$access_token = "O1AEwcSsQQlPjGlDdI-f_yd8u2mRmpYY_knJaqQ5t5Wl9Wr_TXeWaI0--JPwU3hcjX1GdtpjHn4tAJFmgKeJKOH9K4GPVjcyhR1utGkEAd4RSNiAAAXYT";
$url = "https:// api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_
token;
$openid = "oiPuduCHIBb2aHvZoqSm1t7KbXtw";

// 發送卡券
$data = '{
    "touser":"'.$openid.'",
    "msgtype":"wxcard",
    "wxcard":{
        "card_id":"piPuduM3NHSnSMYgWS-oqGFQbBjM"
    }
}';
$result = https_request($url,$data);
var_dump($result);

function https_request($url, $data = null){
    $curl = curl_init;
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
  

上述代碼執行後,效果如圖9-7所示。

圖9-7 微信公眾號發送卡券消息