前回の記事では Java 言語による WeChat パブリック プラットフォームの開発の最初の部分 - 環境構築と開発アクセスについてまとめましたが、この記事では メッセージの受信と応答についてまとめました。
WeChat パブリック プラットフォームに接続すると、WeChat は検証メソッドに Get リクエストを送信します。その後、メッセージを受信すると、WeChat は投稿リクエストを送信し、XML 形式でデータを送受信します。
WeChat から送信された通常のテキスト メッセージの XML パッケージ構造を見てください
;
公式文書の説明:
理解したら、コードの入力を開始します:
1.
受信したXML形式を次のように変換します。コレクション オブジェクト (Map)Util パッケージの下に、新しい MessageUtil ツール クラスを作成します。
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(); } }
このようにして、テキストメッセージの受信と応答が正常に完了しました。
プロジェクトに必要なJarパッケージ:
リンク: https://pan.baidu.com/s/1n7WXoDXN97AwQPjgiyz5gw パスワード: m5ne
関連推奨事項:
WeChatパブリック開発用のJavaグラフィックコード例プラットフォーム WeChat パブリック アカウント決済開発 (Java) の例の詳細な説明以上がJava + WeChat パブリック アカウント開発プロセスの手順 2 の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。