【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信服務(wù)器post消息體的接收示例_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信服務(wù)器post消息體的接收示例_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信服務(wù)器post消息體的接收示例_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信服務(wù)器post消息體的接收示例_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信服務(wù)器post消息體的接收示例_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余2頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信服務(wù)器post消息體的接收示例

這篇文章主要介紹了微信服務(wù)器post消息體的接收示例,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓在下帶著大家一起了解一下。微信服務(wù)器post消息體的接收(一)消息類型和消息格式上面有說(shuō)道我們所有的和微信服務(wù)器之間進(jìn)行溝通基本都是通過(guò)post消息體完成的,首先我們了解下消息體的類型,大致類型有兩種:普通消息類型:文本消息、圖片消息、語(yǔ)音消息、視頻消息、小視頻消息、地理位置消息、鏈接消息事件消息類型:關(guān)注/取消關(guān)注事件、掃描帶參數(shù)二維碼事件、上報(bào)地理位置事件、自定義菜單事件、點(diǎn)擊菜單拉取消息時(shí)的事件推送、點(diǎn)擊菜單跳轉(zhuǎn)鏈接時(shí)的事件推送消息類型:微信服務(wù)端推送的所有消息體的類型格式都是xml格式;(二)消息重試機(jī)制微信服務(wù)器在五秒內(nèi)收不到響應(yīng)會(huì)斷掉連接,并且重新發(fā)起請(qǐng)求,總共重試三次。假如服務(wù)器無(wú)法保證在五秒內(nèi)處理并回復(fù),可以直接回復(fù)空串,微信服務(wù)器不會(huì)對(duì)此作任何處理,并且不會(huì)發(fā)起重試,但是這里后期可以使用【客服消息接口】去完成消息再次推送。(三)消息接收處理在前面我們有說(shuō)道微信的消息體是采用xml格式,那么我在這里寫(xiě)了一個(gè)MessageUtil去做消息格式的處理,大致代碼如下:package

com.cuiyongzhi.wechat.util;

import

java.io.InputStream;

import

java.io.Writer;

import

java.util.HashMap;

import

java.util.List;

import

java.util.Map;

import

javax.servlet.http.HttpServletRequest;

import

org.dom4j.Document;

import

org.dom4j.Element;

import

org.dom4j.io.SAXReader;

import

com.thoughtworks.xstream.XStream;

import

com.thoughtworks.xstream.core.util.QuickWriter;

import

com.thoughtworks.xstream.io.HierarchicalStreamWriter;

import

com.thoughtworks.xstream.io.xml.PrettyPrintWriter;

import

com.thoughtworks.xstream.io.xml.XppDriver;

/**

*

ClassName:

MessageUtil

*

@Description:

消息工具類

*

@author

dapengniao

*

@date

2016年3月7日

上午10:05:04

*/

public

class

MessageUtil

{

/**

*

返回消息類型:文本

*/

public

static

final

String

RESP_MESSAGE_TYPE_TEXT

=

"text";

/**

*

返回消息類型:音樂(lè)

*/

public

static

final

String

RESP_MESSAGE_TYPE_MUSIC

=

"music";

/**

*

返回消息類型:圖文

*/

public

static

final

String

RESP_MESSAGE_TYPE_NEWS

=

"news";

/**

*

請(qǐng)求消息類型:文本

*/

public

static

final

String

REQ_MESSAGE_TYPE_TEXT

=

"text";

/**

*

請(qǐng)求消息類型:圖片

*/

public

static

final

String

REQ_MESSAGE_TYPE_IMAGE

=

"image";

/**

*

請(qǐng)求消息類型:鏈接

*/

public

static

final

String

REQ_MESSAGE_TYPE_LINK

=

"link";

/**

*

請(qǐng)求消息類型:地理位置

*/

public

static

final

String

REQ_MESSAGE_TYPE_LOCATION

=

"location";

/**

*

請(qǐng)求消息類型:音頻

*/

public

static

final

String

REQ_MESSAGE_TYPE_VOICE

=

"voice";

/**

*

請(qǐng)求消息類型:推送

*/

public

static

final

String

REQ_MESSAGE_TYPE_EVENT

=

"event";

/**

*

事件類型:subscribe(訂閱)

*/

public

static

final

String

EVENT_TYPE_SUBSCRIBE

=

"subscribe";

/**

*

事件類型:unsubscribe(取消訂閱)

*/

public

static

final

String

EVENT_TYPE_UNSUBSCRIBE

=

"unsubscribe";

/**

*

事件類型:CLICK(自定義菜單點(diǎn)擊事件)

*/

public

static

final

String

EVENT_TYPE_CLICK

=

"CLICK";

/**

*

@Description:

解析微信發(fā)來(lái)的請(qǐng)求(XML)

*

@param

@param

request

*

@param

@return

*

@param

@throws

Exception

*

@author

dapengniao

*

@date

2016年3月7日

上午10:04:02

*/

@SuppressWarnings("unchecked")

public

static

Map<String,

String>

parseXml(HttpServletRequest

request)

throws

Exception

{

//

將解析結(jié)果存儲(chǔ)在HashMap中

Map<String,

String>

map

=

new

HashMap<String,

String>();

//

從request中取得輸入流

InputStream

inputStream

=

request.getInputStream();

//

讀取輸入流

SAXReader

reader

=

new

SAXReader();

Document

document

=

reader.read(inputStream);

//

得到xml根元素

Element

root

=

document.getRootElement();

//

得到根元素的所有子節(jié)點(diǎn)

List<Element>

elementList

=

root.elements();

//

遍歷所有子節(jié)點(diǎn)

for

(Element

e

:

elementList)

map.put(e.getName(),

e.getText());

//

釋放資源

inputStream.close();

inputStream

=

null;

return

map;

}

@SuppressWarnings("unused")

private

static

XStream

xstream

=

new

XStream(new

XppDriver()

{

public

HierarchicalStreamWriter

createWriter(Writer

out)

{

return

new

PrettyPrintWriter(out)

{

//

對(duì)所有xml節(jié)點(diǎn)的轉(zhuǎn)換都增加CDATA標(biāo)記

boolean

cdata

=

true;

@SuppressWarnings("rawtypes")

public

void

startNode(String

name,

Class

clazz)

{

super.startNode(name,

clazz);

}

protected

void

writeText(QuickWriter

writer,

String

text)

{

if

(cdata)

{

writer.write("<![CDATA[");

writer.write(text);

writer.write("]]>");

}

else

{

writer.write(text);

}

}

};

}

});

}在這個(gè)方法體里需要用到部分依賴,需要在pom文件加入如下部分:<!--

xml

-->

<dependency>

<groupId>org.apache.directory.studio</groupId>

<artifactId>org.dom4j.dom4j</artifactId>

<version>1.6.1</version>

</dependency>

<dependency>

<groupId>com.thoughtworks.xstream</groupId>

<artifactId>xstream</artifactId>

<version>1.4.8</version>

</dependency>然后將我們的WechatSecurityController中的post方法修改為如下,用于做消息的接收和處理:@RequestMapping(value

=

"security",

method

=

RequestMethod.POST)

//

post方法用于接收微信服務(wù)端消息

public

void

DoPost(HttpServletRequest

request,HttpServletResponse

response)

{

System.out.println("這是post方法!");

try{

Map<String,

String>

map=MessageUtil.p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論