亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java微信企業(yè)號開發(fā)之發(fā)送消息(文本、圖片、語音)

 更新時間:2016年06月28日 09:31:54   作者:9_張曉  
這篇文章主要為大家詳細介紹了java微信企業(yè)號開發(fā)之發(fā)送消息,發(fā)送類型包括文本、圖片、語音,感興趣的小伙伴們可以參考一下

上篇文章介紹了開啟回調(diào)模式,開始回調(diào)模式后我們就要實現(xiàn)聊天功能了。平時使用微信聊天可以發(fā)送文本消息、語音、圖片、視頻等,這里只實現(xiàn)了其中的一些功能和大家分享。 

一、與微信企業(yè)號建立連接
1、企業(yè)應用調(diào)用企業(yè)號提供的接口,管理或查詢企業(yè)號后臺所管理的資源、或給成員發(fā)送消息等,以下稱主動調(diào)用模式。
2、企業(yè)號把用戶發(fā)送的消息或用戶觸發(fā)的事件推送給企業(yè)應用,由企業(yè)應用處理,以下稱回調(diào)模式。
3、用戶在微信中閱讀企業(yè)應用下發(fā)的H5頁面,該頁面可以調(diào)用微信提供的原生接口,使用微信開放的終端能力,以下稱JSAPI模式。
這是微信企業(yè)號的開發(fā)文檔中寫的,但是我們一般使用前兩種方式。 
其實主動調(diào)用和回調(diào)都是相對的,這是站在微信服務器的角度,微信服務器通過企業(yè)號給微信客戶端發(fā)送消息是主動調(diào)用,微信客戶端主動發(fā)送消息去調(diào)用微信服務器相對服務器來說就是被動調(diào)用(回調(diào))。

二、主被動調(diào)用微信服務器處理的數(shù)據(jù)格式

1.主調(diào):服務器向微信客戶端發(fā)送json格式的數(shù)據(jù),數(shù)據(jù)不需要加密 

2.回調(diào):微信客戶端發(fā)送的消息需要AES加密,服務器接受的消息是xml格式

這兩條用一張圖表示如下:

三、聊天原理圖

首先微信客戶端發(fā)送消息到服務器處理,數(shù)據(jù)以xml格式傳輸?shù)降谌椒掌骱?,第三方服務器再將?shù)據(jù)轉為json格式,傳送給微信服務器,發(fā)送給客戶端。 

四、代碼實現(xiàn)
有了上面的原理基礎,下面是代碼部分

1.servlet

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 request.setCharacterEncoding("UTF-8");
 response.setCharacterEncoding("UTF-8"); 
 
  String msg_signature = request.getParameter("msg_signature"); 
  
  String timestamp = request.getParameter("timestamp"); 
  
  String nonce = request.getParameter("nonce"); 
  
  InputStream inputStream = request.getInputStream(); 
  String postData = IOUtils.toString(inputStream, "UTF-8"); 
  System.out.println(postData); 
  
  String msg = ""; 
  WXBizMsgCrypt wxcpt = null; 
  try { 
   wxcpt = new WXBizMsgCrypt(sToken , sEncodingAESKey , sCorpID ); 
   msg = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, postData); 
  } catch (AesException e) { 
   e.printStackTrace(); 
  } 
  System.out.println("msg=" + msg); 
   
  //獲取接口訪問憑證
  String accessToken = CommonUtil.getToken("wxe510946434680dab", "eWTaho766INvp4e1MCsz1mHYuT2DAleb62REQ3vsFizhY4vtmwZpKweuxUVh33G0").getAccessToken();
  try {
 @SuppressWarnings("unused")
 boolean flag = ChatService1.sendMessage(accessToken,msg);
 } catch (Exception e) {
 e.printStackTrace();
 }
} 

 2.service

public class ChatService1 {

 public static boolean sendMessage(String accessToken,String msg) throws Exception{
 boolean flag = false;
 Map<String, String> requestMap = MessageUtil.parseXml(msg); 
 // 發(fā)送者
 String fromUserName = requestMap.get("FromUserName");
 // 消息類型
 String msgType = requestMap.get("MsgType");
 
 if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){//如果是文本客服消息
 String Content = requestMap.get("Content");//文本消息的消息內(nèi)容
 //組裝文本客服消息,參數(shù)1:用戶id;參數(shù)2:發(fā)送的內(nèi)容
 jsonMsg = AdvancedUtil.makeTextCustomMessage("lishehe|zhisheng|zhangwenyuan|lixinjiang", Content);
 }else if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){//發(fā)送的是圖片
 String mediaId = requestMap.get("MediaId");
 jsonMsg = AdvancedUtil.makeImageCustomMessage("lishehe|zhisheng|zhangwenyuan|lixinjiang", mediaId);
 }else if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){
 String mediaId = requestMap.get("MediaId");
 jsonMsg= AdvancedUtil.makeVoiceCustomMessage("lishehe|zhisheng|zhangwenyuan|lixinjiang", mediaId);
 }
 flag = AdvancedUtil.sendCustomMessage(accessToken, jsonMsg);
 return flag;
 }
}

3.工具類

public class AdvancedUtil {
 private static Logger log = LoggerFactory.getLogger(AdvancedUtil.class);

 /**
 * 組裝發(fā)送文本消息
 * @return
 */
 public static String makeTextCustomMessage(String openId, String content) {
 content = content.replace("\"", "\\\"");
 String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"text\",\"agentid\":\"%s\",\"text\":{\"content\":\"%s\"}}";
 return String.format(jsonMsg, openId, 14,content);
 }

 /**
 * 組裝發(fā)送圖片消息
 * 
 * @return
 */
 public static String makeImageCustomMessage(String openId, String mediaId) {
 String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"image\",\"agentid\":\"%s\",\"image\":{\"media_id\":\"%s\"}}";
 return String.format(jsonMsg, openId,14, mediaId);
 }

 /**
 * 組裝發(fā)送語音消息
 * 
 * @return
 */
 public static String makeVoiceCustomMessage(String openId, String mediaId) {
 String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"voice\",\"agentid\":\"%s\",\"voice\":{\"media_id\":\"%s\"}}";
 return String.format(jsonMsg, openId,14, mediaId);
 }

四、總結

這樣就實現(xiàn)了消息的接收和推送,第三方服務器將接受的xml數(shù)據(jù)先解密解析,從中獲取消息類型,然后將要發(fā)送的消息封裝后轉為json格式,并傳送給微信服務器在發(fā)送到客戶端。

本文已被整理到了《Android微信開發(fā)教程匯總》,《java微信開發(fā)教程匯總》歡迎大家學習閱讀。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論