วิธีรับและตอบกลับข้อความจาก WeChat Development API ฉันจะแนะนำคุณด้านล่าง
1. คำอธิบาย
* ตัวอย่างนี้ได้รับการพัฒนาและแสดงให้เห็นตามเอกสารการพัฒนา WeChat: http://mp.weixin.qq.com/wiki/home/index.html เวอร์ชันล่าสุด (4/3/2016 5:34:36 PM)
* แพลตฟอร์มการแก้ไข: myeclipse10.7+win32+jdk1.7+tomcat7.0
* เซิร์ฟเวอร์: Alibaba Cloud Windows Server 2008 64bits
* ข้อกำหนดของแพลตฟอร์ม: วิธีการใช้คำอธิบายประกอบการใช้งาน Servlet, ข้อกำหนดของแพลตฟอร์ม: J2EE6.0+, JDK6.0+, TOMCAT7.0+
* การสาธิตมุ่งเน้นไปที่การแยกวิเคราะห์ API มากขึ้น
* เพื่อประโยชน์ในการทดสอบคำแนะนำแต่ละกรณีการทดสอบนั้นมีความเป็นอิสระและไม่ได้ขึ้นอยู่กับวิธีการอื่น อย่าพิจารณาบรรจุภัณฑ์มากนัก
* การสาธิตจะดำเนินการให้มากที่สุดเท่าที่จะเป็นไปได้ตามข้อกำหนดของ API วัตถุประสงค์: ทำความเข้าใจว่ามีการใช้เอกสารอย่างไรและบรรลุผลของการเรียนรู้จากตัวอย่างหนึ่งและนำไปใช้กับผู้อื่น
* ข้อกำหนดความรู้: มูลนิธิ Java ที่เป็นของแข็ง, การทำความเข้าใจความรู้การสื่อสารเครือข่าย http, มีความเข้าใจเพียงพอเกี่ยวกับ Javaweb, การวิเคราะห์ JSON
* ส่วนนี้ของซอร์สโค้ดตัวอย่างนี้จะได้รับในตอนท้ายของแต่ละบทความ หลังจากวิเคราะห์ API รหัสแหล่งข้อมูลการสาธิตทั้งหมดจะได้รับในรูปแบบของแพ็คเกจซอร์สโค้ด
* เวลาปัจจุบัน: 4/3/2016 5:32:57 PM คราวนี้จะเหนือกว่า
2. เอกสารการจัดการข้อความต้นฉบับ (Abstract)
•ที่อยู่เอกสาร: http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html
•การจัดการข้อความ
imex
ime
◦ส่งข้อความตอบกลับข้อความ-โพสต์
◦รับการเข้ารหัสข้อความและการถอดรหัสเมื่อตอบกลับแบบพาสซีฟ
◦รับข้อความบริการลูกค้า
interface Message Massage Interface
interface Message-Template Message Interface
spectation ข้อมูลข้อกำหนดการใช้งานข้อความข้อความ-ข้อความ
◦รับการกำหนดค่าการตอบกลับอัตโนมัติสำหรับบัญชีอย่างเป็นทางการ
3. ความเข้าใจในเอกสาร
•รับข้อความ
◦เอกสารอธิบายสิ่งนี้: เมื่อผู้ใช้ WeChat ทั่วไปส่งข้อความไปยังบัญชีสาธารณะเซิร์ฟเวอร์ WeChat จะบรรจุข้อมูล XML ของข้อความโพสต์ไปยัง URL ที่ผู้พัฒนากรอกไว้
◦ความเข้าใจ: เซิร์ฟเวอร์ WeChat ส่งคืนข้อความที่ผู้ใช้ส่งไปยัง REQ ในรูปแบบของสตรีมโพสต์ เมื่อเราต้องการรับข้อความที่ส่งโดยผู้ใช้เราสามารถรับได้ผ่าน req.getInputStream () แน่นอนว่าเราสามารถทำการแยกวิเคราะห์ที่จำเป็นตามรูปแบบ XML ของข้อความส่งคืนในเอกสาร
ทำให้สำเร็จ:
/** ในส่วนนี้เราได้รับข้อมูลที่ส่งโดยผู้ใช้และแยกวิเคราะห์เป็น <k, v> สำหรับการแสดงผล* /// แยกวิเคราะห์ข้อมูลที่ผู้ใช้ส่ง inputStream คือ = req.getInputStream (); // รับสตรีมคำขอ // เก็บผลลัพธ์ที่แยกวิเคราะห์ในแผนที่ HashMap <String, String> MAP = HASHMAP ใหม่ <String, String> (); // Parse XML, แยกวิเคราะห์ผลตอบแทนที่ได้รับในข้อมูลข้อความ xml] เอกสารเอกสาร = null; ลอง {document = reader.read (IS);} catch (documentException e1) {// toDo catch block catch ที่สร้างขึ้นอัตโนมัติ e1.printstackTrace ();} // รับองค์ประกอบขององค์ประกอบรูท <loot.list.list.list.list สำหรับ (Element E: ElementList) Map.put (e.getName (), e.getText ()); // ชุดทดสอบเอาต์พุต <String> keyset = map.keyset (); // หลังจากการทดสอบเอาต์พุตถูกแยกวิเคราะห์ข้อมูลที่ส่งโดยผู้ใช้จะถูกส่งโดยระบบของผู้ใช้ สำหรับ (คีย์สตริง: ปุ่มกด) {system.out.println (คีย์ + ":" + map.get (คีย์));} system.out.println (แท็ก + ": สิ้นสุดเพื่อแยกวิเคราะห์ข้อมูลที่ผู้ใช้ส่ง"); •ส่งข้อความ
◦เอกสารอธิบายสิ่งนี้: เมื่อผู้ใช้ส่งข้อความไปยังบัญชีอย่างเป็นทางการ (หรือเมื่อมีการผลักดันเหตุการณ์โดยการดำเนินการของผู้ใช้เฉพาะ) คำขอโพสต์จะถูกสร้างขึ้น นักพัฒนาสามารถส่งคืนโครงสร้าง XML ที่เฉพาะเจาะจงในแพ็คเกจตอบกลับ (รับ) เพื่อตอบกลับข้อความ (ตอนนี้รองรับข้อความตอบกลับรูปภาพรูปภาพข้อความเสียงวิดีโอและเพลง) การพูดอย่างเคร่งครัดการส่งข้อความตอบกลับแบบพาสซีฟไม่ใช่อินเทอร์เฟซจริง ๆ แต่การตอบกลับข้อความที่ส่งไปยังเซิร์ฟเวอร์ WeChat
◦ความเข้าใจ: เมื่อผู้ใช้ส่งคำขอคำขอโพสต์จะถูกสร้างขึ้นและเราสามารถตอบกลับข้อความผ่านการตอบสนอง อย่างไรก็ตามเนื้อหาตอบกลับมีข้อกำหนดรูปแบบที่เข้มงวด เฉพาะเมื่อมีการปฏิบัติตามข้อกำหนดของรูปแบบจะกระบวนการ WeChat Server และส่งคืนไปยังผู้ใช้ โดยการดูโมดูล "การจัดการข้อความ" เอกสารเราจะเห็นว่ามีข้อความต่าง ๆ ใน WeChat และข้อความแต่ละประเภทมีข้อกำหนดรูปแบบเฉพาะของตัวเอง เราต้องปฏิบัติตามข้อกำหนดเพื่อส่งคืนข้อมูลเฉพาะให้กับผู้ใช้ตามปกติ เราพยายามตอบกลับผู้ใช้ที่มีข้อมูลข้อความและข้อความกราฟิกในรูปแบบที่ต้องการของเอกสาร โฟกัส: สร้างพารามิเตอร์ที่ต้องการตามข้อกำหนดของเอกสาร หมายเหตุพิเศษ: พารามิเตอร์มีความละเอียดอ่อน
implement 1- ตอบกลับไปยังข้อความปกติ:
// ตัวอย่างที่ 1: ส่งข้อความปกติโปรดตรวจสอบรูปแบบ XML ของเอกสารเกี่ยวกับ "ข้อความตอบกลับข้อความ" // ขั้นตอนที่ 1: สร้างพารามิเตอร์ที่ต้องการ textMSG TEXTMSG = ใหม่ textMSG (); textMSG.SetTouSerName (map.get ("FromUSerName")); textmsg.setFromuserName (map.get ("tousername")); textmsg.setCreateTime (วันที่ใหม่ (). getTime ()); // เวลาการสร้างข้อความ (จำนวนเต็ม) textmsg.setmsgtype ("ข้อความ"); รูปแบบ XML ที่ได้รับการยอมรับโดย weChat [baidu: xstream bean ถึง xml] xstream xstream = ใหม่ xstream (); xstream.alias ("xml", textmsg.getClass ()); String textMSG2xML = xstream.toxml (textmsg); รูปแบบข้อมูลไปยัง WeChat Server และเซิร์ฟเวอร์ส่งต่อไปยังผู้ใช้ PrintWriter PrintWriter = resp.getWriter (); PrintWriter.print (TextMSG2XML); implement 2- ตอบกลับไปยังข้อความ:
// ตัวอย่างที่ 2 ส่งข้อความกราฟิกและข้อความ โปรดตรวจสอบรูปแบบ XML ของเอกสาร "ตอบกลับข้อความ" // ขั้นตอนที่ 1: สร้างพารามิเตอร์ที่ต้องการโดยการตอบกลับไปยังรายการข้อความ <บทความ> บทความ = arraylist ใหม่ <บทความ> (); บทความ A = บทความใหม่ (); A.SetPicurl ("http://b.hiphotos.baidu.com/image/pic/item/08f7905298222720ea5d058ba7ccb0a46f21fab50.jpg" picandtextmsg = ใหม่ picandtextmsg (); picandtextmsg.settousername (map.get ("fromusername")); // ส่งและรับข้อความ "ผู้ใช้" ตรงข้าม picandtextmsg.setfromusername (map.get ("tousername"); PicandTextMsg.setMsgType ("ข่าว"); // กราฟิกและประเภทข้อความ PICANDTEXTMSG.SetArtArtIcleCount (1); picandtextmsg.setarticles (บทความ); // ขั้นตอนที่สองคือการแปลงข้อมูลที่สร้างขึ้นเป็นรูปแบบ XML ที่ได้รับการยอมรับโดย weChat [baidu: xstream bean เป็น xml] xstream xstream = new xstream () xstream.alias ("xml" picandTextMsg2xml = xstream.toxml (picandtextmsg); system.out.println (picandtextmsg2xml); // ขั้นตอนที่สามคือการส่งข้อมูลรูปแบบของ XML ไปยังเซิร์ฟเวอร์ weChat รหัสแหล่งที่มาทั้งหมดในส่วนนี้สามารถใช้โดยตรงได้โดยตรง
• coreservlet.java (รวมถึงการเข้าถึงเซิร์ฟเวอร์การรับข้อความผู้ใช้ส่งข้อความตอบกลับไปยังข้อความสามัญและตอบกลับข้อความกราฟิกขวดบุคคลที่สาม: DOM4J, Xstream)
แพ็คเกจ com.gist.servlet; นำเข้า java.io.ioException; นำเข้า java.io.inputstream; นำเข้า java.io.printwriter; นำเข้า java.security.messagedigest; นำเข้า java.security.nosuchalgorithmexception; java.util.hashmap; นำเข้า java.util.list; นำเข้า java.util.map; นำเข้า java.util.set; นำเข้า javax.servlet.servletexception; นำเข้า javax.servlet.annotation.webservlet; javax.servlet.http.htttservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.dom4j.document; นำเข้า org.dom4j.documentexception; นำเข้า org.dom4j.element; com.gist.bean.picandtextmsg; นำเข้า com.thoughtworks.xstream.xstream;/** * @author gao yuan </n> อีเมล: [email protected] </n> บล็อก http://blog.csdn.net/wgyscsf */@webservlet ("/coreservlet") คลาสสาธารณะ coreservlet ขยาย httpservlet {ส่วนตัวคงที่สุดท้าย long serialversionuid = 1l; String tag = "Coreservlet"; / * * ขั้นตอนที่ 2: ตรวจสอบความถูกต้องของที่อยู่เซิร์ฟเวอร์หลังจากผู้พัฒนาส่งข้อมูลเซิร์ฟเวอร์ WeChat จะส่งคำขอ GET ไปยัง URL ที่อยู่เซิร์ฟเวอร์ที่เต็มไปด้วย * คำขอ GET มีสี่พารามิเตอร์: ลายเซ็น, timestamp, nonce, echosttr * ผู้พัฒนาตรวจสอบคำขอโดยการตรวจสอบลายเซ็น (มีวิธีการตรวจสอบด้านล่าง) หากคุณยืนยันว่าคำขอ GET นั้นมาจาก WeChat Server โปรดส่งคืนเนื้อหาพารามิเตอร์ ECHOSTR ตามที่เป็นอยู่ *การเข้าถึงจะมีผลและกลายเป็นนักพัฒนาได้สำเร็จไม่เช่นนั้นการเข้าถึงจะล้มเหลว * * กระบวนการเข้ารหัส/การตรวจสอบมีดังนี้: 1. เรียงลำดับพจนานุกรมของโทเค็น, การประทับเวลา, และ nonce 2. * ประกบสตริงพารามิเตอร์สามตัวลงในสตริงสำหรับการเข้ารหัส sha1 3. สตริงหลังจากนักพัฒนาได้ เพื่อสร้างลำดับ วิธีการคือการสร้างลำดับจากขนาดเล็กถึงใหญ่ตามลำดับตัวอักษรหรือตามลำดับของจำนวนน้อยและจำนวนมาก */ @Override Void DoGet (httpservletRequest REQ, httpservletResponse resp) โยน servletexception, ioexception {// ตั้งค่าการเข้ารหัส req.setcharacterencoding ("UTF-8"); resp.setContentType ("html/text; charset = utf-8"); resp.setcharacterencoding ("UTF-8"); // รับเอาท์พุทสตรีม printwriter printwriter = resp.getWriter (); // ตั้งค่าโทเค็นระดับโลกนักพัฒนาตั้งค่าตัวเอง API อธิบายสิ่งนี้: โทเค็นสามารถกรอกข้อมูลได้ตามความประสงค์โดยนักพัฒนา // ใช้เป็นลายเซ็นรุ่น (โทเค็นจะถูกนำมาเปรียบเทียบกับโทเค็นที่มีอยู่ใน URL อินเตอร์เฟสเพื่อตรวจสอบความปลอดภัย // ตามคำอธิบาย API รับสี่พารามิเตอร์ด้านบนลายเซ็นสตริง = req.getParameter ("ลายเซ็น"); String timestamp = req.getParameter ("timestamp"); สตริง nonce = req.getParameter ("nonce"); String echosttr = req.getParameter ("echosttr"); // // อุณหภูมิ: การพิมพ์ชั่วคราว, ดูสถานการณ์พารามิเตอร์การส่งคืน // system.out.println (tag + ": ลายเซ็น:" + ลายเซ็น + ", timestamp:" // + timestamp + ", nonce:" + nonce + ", echostr:" + echostrt); // เข้าถึงตาม "กระบวนการเข้ารหัส/การตรวจสอบ" ที่กล่าวถึงโดย API มีสามขั้นตอนในทั้งหมด // ขั้นตอนที่ 1: เรียงลำดับพจนานุกรมของโทเค็น, timestamp, nonce สามพารามิเตอร์สตริง [] parms = สตริงใหม่ [] {โทเค็น, timestamp, nonce}; // ใส่สตริงที่จำเป็นต้องจัดเรียงตามความต้องการ การเข้ารหัส // splice สตริงสตริง parmsstring = ""; // โปรดทราบว่ามันไม่สามารถ = null ได้ที่นี่ สำหรับ (int i = 0; i <parms.length; i ++) {parmsstring+= parms [i]; } // sha1 encryption string mparms = null; // encrypted ผลลัพธ์ messagedigest digest = null; ลอง {digest = java.security.messagedigest.getInstance ("sha"); } catch (nosuchalgorithmexception e) {// toDo บล็อก catch ที่สร้างโดยอัตโนมัติ E.PrintStackTrace (); } digest.update (parmsstring.getBytes ()); byte messageGeSt [] = digest.digest (); // สร้าง hex string stringbuffer hexstring = new StringBuffer (); // แปลงอาร์เรย์ไบต์เป็นเลขฐานสิบหกสำหรับ (int i = 0; i <messageDigest.length; i ++) {string shahex = integer.tohexstring (messagedigest [i] & 0xff); if (shahex.length () <2) {hexstring.append (0); } hexstring.append (Shahex); } mparms = hexString.toString (); // การเข้ารหัสผล/ * * ข้อกำหนด API: หากคุณยืนยันว่าคำขอ GET มาจากเซิร์ฟเวอร์ WeChat โปรดส่งคืนเนื้อหาพารามิเตอร์ Echosttr ตามที่เป็นอยู่และการเข้าถึงจะมีผลและกลายเป็นนักพัฒนาประสบความสำเร็จ มิฉะนั้นการเข้าถึงจะล้มเหลว */ // ขั้นตอนที่ 3: นักพัฒนาได้รับสตริงที่เข้ารหัสและสามารถเปรียบเทียบกับลายเซ็นเพื่อระบุว่าคำขอมาจากการเข้าถึง WeChat ที่ประสบความสำเร็จ // system.out.println (tag + ":" + mparms + "--->" + ลายเซ็น); if (mparms.equals (ลายเซ็น)) {// system.out.println (tag + ":" + mparms + "---->" + ลายเซ็น); printwriter.write (echostr); } else {// การเข้าถึงล้มเหลวไม่จำเป็นต้องเขียนย้อนกลับ // system.out.println (แท็ก + "การเข้าถึงล้มเหลว"); }} / * * ตรวจสอบเอกสาร API สำหรับการส่งและรับข้อความและผลักดันรูปแบบข้อความเดียวกันโดยทั่วไป ในรูปแบบต่อไปนี้: <xml> * <tousername> <! [cdata [touser]]> </tousername> * <fromusername> <! [cdata [fromuser]]> </fromusername> <เนื้อหา> <! [CDATA [นี่คือการทดสอบ]]> </เนื้อหา> * <SGID> 1234567890123456 </sgid> </xml> จากนั้นเราสามารถทำการประมวลผลแบบครบวงจรได้ * / / * * ก่อนอื่นมารับสตรีมอินพุตและดูข้อมูลในสตรีมอินพุต โดยการทดสอบโฟลว์การพิมพ์เราจะเห็นได้ว่าทุกครั้งที่ผู้ใช้ร้องขอเราจะได้รับคำขอ REQ รูปแบบคำขออยู่ในรูปแบบ XML ซึ่งอธิบายไว้ในเอกสาร * / / * * โปรดทราบว่า req.getInputStream () สามารถเรียกคืนได้เพียงครั้งเดียวและสามารถอ่านได้เพียงครั้งเดียว หากคุณต้องการอ่านหลายครั้งคุณต้องหาวิธีอื่น เพื่อความเรียบง่าย * เราจะได้รับ req.getInputStream () เพียงครั้งเดียวและไม่พิมพ์ข้อมูลสตรีมเอาท์พุทอีกต่อไป พิมพ์ข้อมูลที่แยกวิเคราะห์โดยตรง */ @Override void dopost (httpservletrequest req, httpservletResponse resp) โยน servletexception, ioexception {// ตั้งค่าการเข้ารหัส req.setcharacterencoding ("UTF-8"); resp.setContentType ("html/text; charset = utf-8"); resp.setcharacterencoding ("UTF-8"); /** ในส่วนนี้เราได้รับข้อมูลที่ส่งโดยผู้ใช้และแยกวิเคราะห์เป็น <k, v> สำหรับการแสดงผล*/ // วิเคราะห์ข้อมูลที่ส่งโดยผู้ใช้อินพุตสตรีมคือ = req.getInputStream (); // รับสตรีมคำขอ // เก็บผลลัพธ์ที่แยกวิเคราะห์ไว้ในแผนที่ HASHMAP <สตริง // พาร์ส XML การแยกวิเคราะห์ผลตอบแทนที่ได้รับ XML ลงในข้อมูลข้อความที่เราใช้กับ SaxReader Reader = new SaxReader (); // jar ของบุคคลที่สาม: DOM4J [Baidu: SaxReader Parsing XML] เอกสารเอกสาร = null; ลอง {document = reader.read (IS); } catch (documentException e1) {// todo catch block catch ที่สร้างอัตโนมัติ e1.printstacktrace (); } // รับองค์ประกอบองค์ประกอบรูท XML รูท = document.getRootElement (); // รับโหนดลูกทั้งหมดของรายการองค์ประกอบรูท <Element> ElementList = root.Elements (); // Traverse โหนดลูกทั้งหมดสำหรับ (องค์ประกอบ E: ElementList) MAP.PUT (E.GetName (), E.GetText ()); // ทดสอบชุดเอาต์พุต <String> keyset = map.keyset (); // ทดสอบข้อความเอาต์พุตที่ส่งโดยผู้ใช้หลังจากการวิเคราะห์ System.out.println (Tag + ": เริ่มแยกวิเคราะห์ข้อมูลที่ส่งโดยผู้ใช้"); สำหรับ (คีย์สตริง: คีย์เซ็ต) {System.out.println (คีย์ + ":" + map.get (คีย์)); } system.out.println (tag + ": สิ้นสุดการแยกวิเคราะห์ข้อมูลที่ส่งโดยผู้ใช้"); / * * ในส่วนนี้เราพยายามตอบกลับข้อมูลข้อความและข้อความกราฟิกไปยังผู้ใช้ตามรูปแบบที่ต้องการของเอกสาร โฟกัส: สร้างพารามิเตอร์ที่ต้องการตามข้อกำหนดของเอกสาร หมายเหตุพิเศษ: พารามิเตอร์มีความละเอียดอ่อน */ // // ตัวอย่างที่ 1: ส่งข้อความปกติโปรดตรวจสอบรูปแบบ XML ของเอกสารเกี่ยวกับ "ตอบข้อความตอบกลับ" // // // ขั้นตอนที่ 1: สร้างพารามิเตอร์ที่ต้องการตามข้อมูลข้อความตอบกลับ // textmsg textmsg = textmsg ใหม่ (); // textmsg.settouserName (map.get ("fromusername")); // ส่งและรับข้อความ "ผู้ใช้" ตรงข้าม // textmsg.setFromuserName (map.get ("touserName")); // textmsg.setCreateTime (วันที่ใหม่ (). getTime ()); // เวลาในการสร้างข้อความ (จำนวนเต็ม) // textmsg.setMsgType ("text"); // ข้อความประเภทข้อความ // textmsg.setContent ("ฉันเป็นเซิร์ฟเวอร์ตอบกลับผู้ใช้"); // // // // // // ขั้นตอนที่สองคือการแปลงข้อมูลที่สร้างขึ้นเป็นรูปแบบ XML ที่รับรู้โดย WeChat [Baidu: Xstream Bean เป็น XML] // Xstream Xstream = New Xstream (); // xstream.alias ("xml", textmsg.getclass ()); // String textMSG2XML = xstream.toxml (textMSG); // system.out.println (textmsg2xml); // // // // // // // ขั้นตอนที่สามคือการส่งข้อมูลรูปแบบของ XML ไปยัง WeChat Server และเซิร์ฟเวอร์ส่งต่อไปยังผู้ใช้ // PrintWriter PrintWriter = resp.getWriter (); // printwriter.print (textmsg2xml); // // ตัวอย่างที่ 2 ส่งกราฟิกและข้อความ โปรดตรวจสอบเอกสารเกี่ยวกับรูปแบบ XML ของ "ตอบกลับข้อความ" // ขั้นตอนที่ 1: สร้างพารามิเตอร์ที่ต้องการตามการตอบกลับไปยังรายการข้อความ <บทความ> บทความ = arrayList ใหม่ <Saticle> (); บทความ A = บทความใหม่ (); A.Settitle ("ฉันเป็นชื่อรูปภาพ"); A.SetUrl ("www.baidu.com"); // ที่อยู่นี้หลังจากคลิกที่รูปภาพและกระโดด A.Setpicurl ("http://b.hiphotos.baidu.com/image/pic/item/08f790529822720e5d058ba7ccb0a46f2f2f2f2f2f2f2f2f2f2f2 A.SetDescription ("ฉันเป็นคำอธิบายของภาพ"); articles.add (a); picandTextmsg picandtextmsg = ใหม่ picandtextmsg (); PicandTextMsg.settouserName (map.get ("fromusername")); // ส่งและรับข้อความ "ผู้ใช้" เพียง PicandTextMsg.SetFromuserName (map.get ("touserName")); PicandTextMsg.setCreateTime (วันที่ใหม่ (). getTime ()); // เวลาในการสร้างข้อความ (จำนวนเต็ม) picandTextmsg.setMsgType ("ข่าว"); // ประเภทกราฟิกข้อความ PICANDTEXTMSG.SETARTARTICLECOUNT (1); PicandTextmsg.setarticles (บทความ); // ขั้นตอนที่สองคือการแปลงข้อมูลที่สร้างขึ้นเป็นรูปแบบ XML ที่ได้รับการยอมรับโดย WeChat [Baidu: Xstream Bean เป็น XML] Xstream Xstream = New Xstream (); xstream.alias ("xml", picandtextmsg.getclass ()); xstream.alias ("รายการ", a.getclass ()); String PicandTextMsg2xml = xstream.toxml (picandtextmsg); System.out.println (PicandTextMSG2XML); // ขั้นตอนที่สามคือการส่งข้อมูลรูปแบบของ XML ไปยังเซิร์ฟเวอร์ WeChat และเซิร์ฟเวอร์ส่งต่อไปยังผู้ใช้ PrintWriter PrintWriter = resp.getWriter (); printwriter.print (picandtextmsg2xml); -
• testmsg.java (ถั่วข้อความปกติ)
แพ็คเกจ com.gist.bean;/** * @author gao yuan </n> อีเมล: [email protected] </n> บล็อก http://blog.csdn.net/wgyscsf </n> * สตริงส่วนตัว Fromusername; ความยาวส่วนตัว createTime; สตริงส่วนตัว msgtype; @Override สตริงสาธารณะ toString () {return "textmsg [tousername =" + tousername + ", fromusername =" + fromusername + ", createTime =" + createTime + ", msgType =" + msgType + ", เนื้อหา =" + เนื้อหา "]" } เนื้อหาสตริงส่วนตัว; Public TextMSG (String TouserName, String FromUserName, Long CreateTime, String MsgType, เนื้อหาสตริง) {super (); tousername = tousername; fromusername = fromusername; createTime = createTime; msgType = msgType; เนื้อหา = เนื้อหา; } public textMSG () {super (); } สตริงสาธารณะ getTouSerName () {return tousername; } โมฆะสาธารณะ settername (สตริง tousername) {tousername = tousername; } สตริงสาธารณะ getFromuserName () {return fromusername; } โมฆะสาธารณะ setFromuserName (สตริง fromusername) {fromusername = fromusername; } สาธารณะยาว getCreateTime () {return createTime; } โมฆะสาธารณะ setCreateTime (Long createTime) {createTime = createTime; } สตริงสาธารณะ getMsgType () {return msgType; } โมฆะสาธารณะ setMsGType (สตริง msgType) {msgType = msgType; } สตริงสาธารณะ getContent () {return content; } โมฆะสาธารณะ setContent (เนื้อหาสตริง) {content = content; -
•บทความ java (บทความถั่วภายในข้อความ)
แพ็คเกจ com.gist.bean;/** * @author gao yuan </n> อีเมล: [email protected] </n> บล็อก http://blog.csdn.net/wgyscsf </n> * การเขียนระยะเวลา 2016-4-4 2:47:08 PM @Override สตริงสาธารณะ toString () {return "item [title =" + title + ", คำอธิบาย =" + คำอธิบาย + ", picurl =" + picurl + ", url =" + url + "]"; } สตริงสาธารณะ getTitle () {return title; } โมฆะสาธารณะ SettItle (ชื่อสตริง) {title = title; } สตริงสาธารณะ getDescription () {return คำอธิบาย; } โมฆะสาธารณะ setDescription (คำอธิบายสตริง) {คำอธิบาย = คำอธิบาย; } สตริงสาธารณะ getPicurl () {return picurl; } โมฆะสาธารณะ setpicurl (สตริง picurl) {picurl = picurl; } สตริงสาธารณะ getUrl () {return url; } โมฆะสาธารณะ seturl (url string) {url = url; } คำอธิบายสตริงส่วนตัว; สตริงส่วนตัว picurl; url สตริงส่วนตัว;}
• picandTextmsg.java (ถั่วข้อความกราฟิก)
แพ็คเกจ com.gist.bean; นำเข้า java.util.list;/** * @author gao yuan </n> อีเมล: [email protected] </n> บล็อก http://blog.csdn.net/wgyscsf </n> * สตริงส่วนตัว Fromusername; ความยาวส่วนตัว createTime; สตริงส่วนตัว msgtype; INT articlecount ส่วนตัว; รายการส่วนตัว <บทความ> บทความ; @Override สตริงสาธารณะ toString () {return "picandtextmsg [tousername =" + tousername + ", fromusername =" + fromusername + ", createTime =" + createTime + ", msgType =" + msgType + ", articlecount =" } สตริงสาธารณะ getTouSerName () {return tousername; } โมฆะสาธารณะ settername (สตริง tousername) {tousername = tousername; } สตริงสาธารณะ getFromuserName () {return fromusername; } โมฆะสาธารณะ setFromuserName (สตริง fromusername) {fromusername = fromusername; } สาธารณะยาว getCreateTime () {return createTime; } โมฆะสาธารณะ setCreateTime (Long createTime) {createTime = createTime; } สตริงสาธารณะ getMsgType () {return msgType; } โมฆะสาธารณะ setMsGType (สตริง msgType) {msgType = msgType; } สาธารณะ int getarticleCount () {return articleCount; } โมฆะสาธารณะ setarticleCount (int articleCount) {articleCount = articleCount; } รายการสาธารณะ <บทความ> getarticles () {บทความส่งคืน; } setarticles โมฆะสาธารณะ (รายการ <บทความ> บทความ) {บทความ = บทความ; -
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น