ホームページ Java &#&チュートリアル Java + WeChat パブリック アカウント開発プロセスの手順 2 の詳細な説明

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

Aug 10, 2018 pm 02:50 PM

前回の記事では 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

名前を数字に変換してグループ内でソートを実装する方法は? 名前を数字に変換してグループ内でソートを実装する方法は? Apr 19, 2025 pm 01:57 PM

名前を数字に変換してグループ内でソートを実装する方法は?ユーザーをグループでソートする場合、ユーザーの名前を数字に変換して、異なる可能性があることがよくあります...

Springプロジェクトは、開始時に円形の依存関係によりランダム性の問題を引き起こすのはなぜですか? Springプロジェクトは、開始時に円形の依存関係によりランダム性の問題を引き起こすのはなぜですか? Apr 19, 2025 pm 11:21 PM

Spring Project Startupにおける円形依存関係のランダム性を理解してください。春のプロジェクトを開発するとき、プロジェクトの起動時に循環依存関係によって引き起こされるランダム性に遭遇する可能性があります...

See all articles