Java + WeChat パブリック アカウント開発プロセスの手順 2 の詳細な説明

php是最好的语言
リリース: 2018-08-10 14:50:34
オリジナル
2662 人が閲覧しました

前回の記事では Java 言語による WeChat パブリック プラットフォームの開発の最初の部分 - 環境構築と開発アクセスについてまとめましたが、この記事では メッセージの受信と応答についてまとめました。

WeChat パブリック プラットフォームに接続すると、WeChat は検証メソッドに Get リクエストを送信します。その後、メッセージを受信すると、WeChat は投稿リクエストを送信し、XML 形式でデータを送受信します。

WeChat から送信された通常のテキスト メッセージの XML パッケージ構造を見てください

;

1348831860

Content>

1234567890123456

公式文書の説明:

Java + WeChat パブリック アカウント開発プロセスの手順 2 の詳細な説明理解したら、コードの入力を開始します:

1.

受信したXML形式を次のように変換します。コレクション オブジェクト (Map)

Util パッケージの下に、新しい MessageUtil ツール クラスを作成します。

Java + WeChat パブリック アカウント開発プロセスの手順 2 の詳細な説明Convert 受信した XML 形式を Map 形式に変換するには、dom4j と呼ばれる jar パッケージが必要です。そして、それを Web-INF の下の lib パッケージに置きます。必要なすべての jar パッケージを記事の最後に置きます。 dom4j jar パッケージを利用すると、XML 形式を Map オブジェクト形式に変換するメソッドを作成できます。このメソッドは次のように実装されます:

/**
	 * 新建方法,将接收到的XML格式,转化为Map对象
	 * @param request 将request对象,通过参数传入
	 * @return 返回转换后的Map对象
	 */
	public static Map<String, String> xmlToMap(HttpServletRequest request) 
			throws IOException, DocumentException{
		Map<String, String> map = new HashMap<String, String>();
		//从dom4j的jar包中,拿到SAXReader对象。
		SAXReader reader = new SAXReader();
		InputStream is = request.getInputStream();//从request中,获取输入流
		Document doc =  reader.read(is);//从reader对象中,读取输入流
		Element root = doc.getRootElement();//获取XML文档的根元素
		List<Element> list = root.elements();//获得根元素下的所有子节点
		for (Element e : list) {
			map.put(e.getName(), e.getText());//遍历list对象,并将结果保存到集合中
		}
		is.close();
		return map;
	}
ログイン後にコピー

2,

上記のメソッドと同様に、メソッドを作成する必要があります。メッセージオブジェクトをXMLに変換します。

ここでも、jar パッケージ xstream.jar を使用する必要があります。インポート方法は dom4j と同じです。 (もう 1 つの注意点として、以前にインポートした xstream はバージョン 1.4 であり、応答メッセージの内容が常に不足していました。そこで、さまざまな試みの結果、jar パッケージのバージョンを 1.3 に変更したところ、応答メッセージが正常に送信されました。具体的な理由は一時的に不明です。時間を無駄にしないように、後で学ぶ人にこの落とし穴を伝えてください)

もちろん、まず最初に、エンティティ内の 6 つの属性を運ぶ新しいエンティティ クラス TextMessage を作成する必要があります。クラスは WeChat によって送信された XML テキストに対応し、対応する Get/Set メソッドと空のパラメーター/完全なパラメーターの構造を提供します。これについてはここでは詳しく説明しません:

private String ToUserName;//开发者微信号
private String FromUserName;//发送方账号
private Long CreateTime;//消息创建时间
private String MsgType;//消息类型
private String Content;//文本消息内容
private String MsgId;//消息id,64位整型
ログイン後にコピー

次に、変換するメソッドを作成します。このテキスト メッセージ クラスのオブジェクトを XML 形式に変換します。 Return:

/**
* 将文本消息对象转化成XML格式
* @param message 文本消息对象
* @return 返回转换后的XML格式
*/
public static String textMessageToXml(TextMessage message){
	XStream xs = new XStream();
	//由于转换后xml根节点默认为class类,需转化为<xml>
	xs.alias("xml", message.getClass());
	return xs.toXML(message);
}
ログイン後にコピー

3.

上記 2 つの処理メソッドを記述したら、[メッセージの受信と応答] を実装しましょう。

元のサーブレットに戻り、doPost メソッドを記述します。 :

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		try {
			//将request请求,传到Message工具类的转换方法中,返回接收到的Map对象
			Map<String, String> map = MessageUtil.xmlToMap(request);
			//从集合中,获取XML各个节点的内容
			String ToUserName = map.get("ToUserName");
			String FromUserName = map.get("FromUserName");
			String CreateTime = map.get("CreateTime");
			String MsgType = map.get("MsgType");
			String Content = map.get("Content");
			String MsgId = map.get("MsgId");
			if(MsgType.equals("text")){//判断消息类型是否是文本消息(text)
				TextMessage message = new TextMessage();
                //原来【接收消息用户】变为回复时【发送消息用户】
				message.setFromUserName(ToUserName);
				message.setToUserName(FromUserName);
				message.setMsgType("text");
				message.setCreateTime(new Date().getTime());//创建当前时间为消息时间
				message.setContent("您好,"+FromUserName+"\n我是:"+ToUserName
				+"\n您发送的消息类型为:"+MsgType+"\n您发送的时间为"+CreateTime
				+"\n我回复的时间为:"+message.getCreateTime()+"\n您发送的内容是:"+Content);
				//调用Message工具类,将对象转为XML字符串
                str = MessageUtil.textMessageToXml(message); 
				System.out.println(str);
				out.print(str);
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}finally{
			out.close();
		}
		} catch (DocumentException e) {
			e.printStackTrace();
		}finally{
			out.close();
		}
	}
ログイン後にコピー

このようにして、テキストメッセージの受信と応答が正常に完了しました。

Java + WeChat パブリック アカウント開発プロセスの手順 2 の詳細な説明プロジェクトに必要なJarパッケージ:

リンク: https://pan.baidu.com/s/1n7WXoDXN97AwQPjgiyz5gw パスワード: m5ne

関連推奨事項:

WeChatパブリック開発用のJavaグラフィックコード例プラットフォーム

WeChat パブリック アカウント決済開発 (Java) の例の詳細な説明

以上がJava + WeChat パブリック アカウント開発プロセスの手順 2 の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート