微信小程序之客服消息

客服消息

參考:官方文檔

創建客服消息事件

官方代碼:

第一種:

<contact-button 
  type="default-light" 
  size="20"
  session-from="weapp"
>
</contact-button>

第二種:
給button按鈕添加open-type="contact"

<button 
    class="weui-btn" 
    type="primary" 
    open-type="contact"
    >發送客服信息
</button>

然后打開微信web開發者工具的預覽,手機上訪問調試的小程序。
點擊剛才設置的發送客服消息(我只用過第二種,第一種沒試過),小程序會跳轉到會話界面,這個界面跟普通會話沒有什么區別,但是只能給小程序發送文本消息圖片消息

客服消息界面

以上這些就是客服消息的界面發送入口了

接收消息

準備工作

在微信小程序網頁上面配置開發者服務器的地址
這里我的已經設置好了

消息服務器配置

下面再就是對用戶發過來的消息進行代碼編寫了

需要注意的地方

  1. 消息推送配置點提交的時候,微信發送的是GET請求。
  2. 當用戶給小程序發送消息的時候,微信發送的POST請求。
  3. 這兩次的請求雖然不一樣,但是他們的請求的地址要是一樣的。

上代碼來說:

這里是在網頁上填寫完配置信息點提交的時候,微信請求開發者服務器,發送GET請求,Java層做的處理,校驗通過則網頁上回提示提交成功。

import java.io.BufferedReader;
import java.io.InputStreamReader;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.core.util.wx.SignUtil;
import com.core.util.wx.WXMsgResponseUtil;
import com.udbac.entity.WXImageRequest;
import com.udbac.entity.WXTextRequest;
import com.udbac.util.WxApiClient;

import net.sf.json.JSONObject;


@Controller
@RequestMapping("/wxapi")
public class WxApiController {

    /**
     * GET請求:進行URL、Tocken 認證; 
     * 1.將token、timestamp、nonce三個參數進行字典序排序 
     * 2.將三個參數字符串拼接成一個字符串進行sha1加密 
     * 3.開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信
     */
    @RequestMapping(value = "/message/token", method = RequestMethod.GET)
    public @ResponseBody String doGet(HttpServletRequest request) {

            String token = "mytoken";// 獲取token,進行驗證;
            String signature = request.getParameter("signature");// 微信加密簽名
            String timestamp = request.getParameter("timestamp");// 時間戳
            String nonce = request.getParameter("nonce");// 隨機數
            String echostr = request.getParameter("echostr");// 隨機字符串

            // 校驗成功返回 echostr,成功成為開發者;否則返回error,接入失敗
            if (SignUtil.validSign(signature, token, timestamp, nonce)) {
                return echostr;
            }
        return "error";
    }

好了,到這一步完了,就可以讓用戶發送消息了,但是我們要處理用戶發送過來的消息是什么?
繼續上代碼:

/**
     * POST請求:
     * 接收客服消息; 
     * 此處的value值也就是往微信公眾平臺要配置的請求的地址
     */
    @ResponseBody
    @RequestMapping(value = "/message/token",method=RequestMethod.POST)
    public JSONObject doMessagePost(HttpServletRequest request,HttpServletResponse response) {
        try {
            ServletInputStream stream = request.getInputStream();
             BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
             StringBuffer buffer = new StringBuffer();
             String line = new String("");  
             while((line = reader.readLine()) != null){
                 buffer.append(line);
             }
            JSONObject jsonObject = JSONObject.fromObject(buffer.toString());
            System.out.println(jsonObject);
            if (jsonObject.getString("MsgType").equals("text")) { //收到的是文本消息
                WXTextRequest wxRequest = new WXTextRequest();
                wxRequest.setToUserName(jsonObject.getString("ToUserName"));
                wxRequest.setFromUserName(jsonObject.getString("FromUserName"));
                wxRequest.setCreateTime(jsonObject.getString("CreateTime"));
                wxRequest.setMsgType(jsonObject.getString("MsgType"));
                wxRequest.setContent(jsonObject.getString("Content"));
                wxRequest.setMsgId(jsonObject.getString("MsgId"));
                
                //也回復一個文本消息
                return WXMsgResponseUtil.sendCustomerMessage(WxApiClient.touser);  
            }else{ //那就是圖片的消息了
                WXImageRequest imageRequest = new WXImageRequest();
                imageRequest.setToUserName(jsonObject.getString("ToUserName"));
                imageRequest.setFromUserName(jsonObject.getString("FromUserName"));
                imageRequest.setCreateTime(jsonObject.getString("CreateTime"));
                imageRequest.setMsgType(jsonObject.getString("MsgType"));
                imageRequest.setPicUrl(jsonObject.getString("PicUrl"));
                imageRequest.setMediaId(jsonObject.getString("MediaId"));
                imageRequest.setMsgId(jsonObject.getString("MsgId"));
                
                //也回復一個圖片消息
                return WXMsgResponseUtil.sendCustomerImageMessage(WxApiClient.touser,imageRequest.getMediaId());
            }
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

此處可以看到處理用戶消息的controller跟配置消息請求的controller請求地址是一樣的,就是訪問的請求方式不一樣,這是尤其注意的地方。

這里有一個消息回復處理工具類:
微信小程序就兩種消息處理,文本和圖片,所以也就相對簡單多了

import java.util.Date;

import com.udbac.util.HttpUtil;
import com.udbac.util.WxApiClient;

import net.sf.json.JSONObject;

/**
 * 測試客服消息發送 Title:TemplateTest Description:
 * 
 * @author root
 * @date 2017年6月7日 上午11:30:49
 */

public class WXMsgResponseUtil {

    /***
     * 文檔地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/custommsg/conversation.html
     * 發送的文本消息
     */
    public static JSONObject sendCustomerMessage(String touser){
        JSONObject obj = new JSONObject();

        obj.put("touser", touser);
        obj.put("msgtype", "text");

        JSONObject text = new JSONObject();
        text.put("content", "現在時刻:\n" + new Date());

        obj.put("text", text);

        System.out.println("回復的文本:\n"+obj.toString());
        JSONObject jsonObject = HttpUtil.httpsRequest(WxApiClient.getCustomerMessageUrl(), "POST", obj.toString());
        System.out.println(jsonObject);
        return jsonObject;
    }
    

    /***
     * 文檔地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/custommsg/conversation.html
     * 發送的圖片消息
     */
    public static JSONObject sendCustomerImageMessage(String touser,String mediaId){
        JSONObject obj = new JSONObject();

        obj.put("touser", touser);
        obj.put("msgtype", "image");

        JSONObject media = new JSONObject();
        media.put("media_id",mediaId);

        obj.put("image", media);

        System.out.println("回復的圖片:\n"+obj.toString());
        JSONObject jsonObject = HttpUtil.httpsRequest(WxApiClient.getCustomerMessageUrl(), "POST", obj.toString());
        System.out.println(jsonObject);
        return jsonObject;
    }
}

最后看實際效果吧!

客服消息測試發送

測試發送文本消息和圖片消息都沒有問題。

我的博客地址:http://www.hanyz.cn/2017/06/07/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%B9%8B%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容

  • 1、客服消息功能概述 在頁面中使用 <contact-button/> 可以顯示進入客服會話按鈕。 當用戶在客服會...
    碼農隨想錄閱讀 68,340評論 13 26
  • @synthesize和@dynamic分別有什么作用?@property有兩個對應的詞,一個是 @synthes...
    筆筆請求閱讀 528評論 0 1
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,785評論 18 139
  • 《深海里的星星》是獨木舟所著青春文學作品。文章背景定點在因娛樂節目火遍全國的長沙,故事里的這群孩子在這里生,在這里...
    張大婷123閱讀 653評論 0 3
  • 一個個看似平凡的小故事,卻設計的如此獨特,看似獨立的情節,那些人物竟都有某種關聯?!督鈶n雜貨店》讀書筆記。時空跨越...
    渣渣兔閱讀 183評論 0 0