วิธีเชื่อมต่อกับเซิร์ฟเวอร์ด้วย 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
* เวลาปัจจุบัน: 4/3/2016 5:32:57 PM คราวนี้จะเหนือกว่า
2. เอกสารต้นฉบับ (บทคัดย่อ)
ที่อยู่เอกสาร: http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
ในการเข้าถึงการพัฒนาแพลตฟอร์มสาธารณะ WeChat นักพัฒนาจำเป็นต้องทำตามขั้นตอนต่อไปนี้:
1. กรอกในการกำหนดค่าเซิร์ฟเวอร์
2. ตรวจสอบความถูกต้องของที่อยู่เซิร์ฟเวอร์
3. ใช้ตรรกะทางธุรกิจตามเอกสารอินเทอร์เฟซ
3. ความเข้าใจในเอกสาร
ตรวจสอบความถูกต้องของที่อยู่เซิร์ฟเวอร์
1. API ได้รับการแนะนำเช่นนี้:
หลังจากผู้พัฒนาส่งข้อมูลเซิร์ฟเวอร์ WeChat จะส่งคำขอ GET ไปยัง URL ที่อยู่เซิร์ฟเวอร์ที่เติมเต็ม คำขอรับมีสี่พารามิเตอร์: ลายเซ็น, การประทับเวลา, nonce, echosttr
นักพัฒนาตรวจสอบคำขอโดยการตรวจสอบลายเซ็น (มีวิธีการตรวจสอบด้านล่าง)
หากคุณยืนยันว่าคำขอ GET นั้นมาจาก WeChat Server โปรดส่งคืนเนื้อหาพารามิเตอร์ ECHOSTR ตามที่เป็นอยู่และการเข้าถึงจะมีผลและกลายเป็นนักพัฒนาได้สำเร็จ มิฉะนั้นการเข้าถึงจะล้มเหลว
กระบวนการเข้ารหัส/ตรวจสอบมีดังนี้:
1) เรียงลำดับพจนานุกรมของโทเค็นการประทับเวลาและ nonce
2) ประกบกันสามสตริงพารามิเตอร์เป็นหนึ่งสตริงสำหรับการเข้ารหัส sha1
3) สตริงที่ได้รับจากนักพัฒนาสามารถเปรียบเทียบกับลายเซ็นเพื่อระบุคำขอที่มาจาก WeChat
2. เข้าใจ
หมายความว่าคำขออยู่ในโหมด "รับ" และการเข้าถึงคำขอจะส่งคืนพารามิเตอร์สี่พารามิเตอร์: ลายเซ็น, การประทับเวลา, nonce, echostr
เราต้องยอมรับพารามิเตอร์เหล่านี้แล้วประมวลผล หากการตรวจสอบประสบความสำเร็จจะส่งคืน "echostr" ที่ได้รับมิฉะนั้นการตรวจสอบจะล้มเหลว
วิธีการตรวจสอบคือการเรียงลำดับโทเค็นพารามิเตอร์สามตัวที่ยอมรับการประทับเวลาและ nonce จากนั้นการเข้ารหัส SHA1 และในที่สุดก็เปรียบเทียบกับลายเซ็น
*สตริงที่เข้ารหัสสามารถเปรียบเทียบกับลายเซ็น หากมันเท่ากัน [API อาจไม่ได้อธิบายอย่างชัดเจน] ให้กลับ "echostr" และตรวจสอบได้สำเร็จ
3. ตระหนัก
สร้าง Servlet Coreservlet เพื่อใช้ HttpServlet และโอเวอร์โหลดวิธีการ Doget
การเตรียมพารามิเตอร์
// ตั้งค่าโทเค็นระดับโลกนักพัฒนาตั้งค่าตัวเอง API อธิบายด้วยวิธีนี้: โทเค็นสามารถกรอกข้อมูลโดยนักพัฒนาที่จะ, // ใช้เป็นลายเซ็นรุ่น (โทเค็นจะถูกนำมาเปรียบเทียบกับโทเค็นที่มีอยู่ใน URL อินเตอร์เฟสเพื่อตรวจสอบความปลอดภัย) โทเค็น = "wgyscsf"; // ตามคำอธิบาย API String timestamp = req.getParameter ("timestamp"); สตริง nonce = req.getParameter ("nonce"); String echosttr = req.getParameter ("echosttr");การดำเนินการตามสามขั้นตอนที่กล่าวถึงโดย API
// ขั้นตอนที่ 1: เรียงลำดับพจนานุกรมของโทเค็น, timestamp, nonce string [] parms = ใหม่สตริง [] {โทเค็น, timestamp, nonce}; // ใส่สตริงที่ต้องจัดเรียงพจนานุกรมในอาร์เรย์อาร์เรย์ การเข้ารหัส sha1 [baidu: การเข้ารหัส Java sha1] // splice สตริงสตริง parmsstring = ""; // โปรดทราบว่ามันไม่สามารถ = null ที่นี่ สำหรับ (int i = 0; i <parms.length; i ++) {parmsstring+= parms [i];} // sha1 encryption string mparms = null; // ผลลัพธ์หลังจากการเข้ารหัส ... // สถานที่นี้คือการดำเนินการของ SHA1 มาจากเซิร์ฟเวอร์ WeChat โปรดส่งคืนเนื้อหาพารามิเตอร์ ECHOSTR ตามที่เป็นอยู่และการเข้าถึงจะมีผลและกลายเป็นนักพัฒนาได้สำเร็จไม่เช่นนั้นการเข้าถึงล้มเหลว */// ขั้นตอนที่ 3: นักพัฒนาได้รับสตริงที่เข้ารหัสและสามารถเปรียบเทียบกับลายเซ็นเพื่อระบุว่าคำขอมาจากการเข้าถึง WeChat ที่ประสบความสำเร็จ System.out.println (tag + ":" + mparms + "--->" + ลายเซ็น); ถ้า (mparms.equals (ลายเซ็น)) {// system.out.println (tag + ":" + mparms + "---->" signature); printwriter.write (echosttr);} else {// การเข้าถึงล้มเหลวไม่จำเป็นต้องเขียน back // system.out.println (tag + "การเข้าถึงล้มเหลว");}4. กรอกการกำหนดค่าเซิร์ฟเวอร์
1) การรวมการกำหนดค่าเซิร์ฟเวอร์เนื้อหาส่วนใหญ่เป็นเซิร์ฟเวอร์และอินเทอร์เฟซการเข้าถึง WeChat ที่เราต้องกำหนดค่าหลังจากเราเขียนโค้ดของเราเองเพื่อเข้าถึงแพลตฟอร์มการพัฒนา WeChat
2) การทำงานของเซิร์ฟเวอร์เปิด Tomcat ของเซิร์ฟเวอร์และใส่รหัสที่เป็นลายลักษณ์อักษรลงในไฟล์ WebApps
3) การดำเนินงานแพลตฟอร์มสาธารณะ WeChat
*สมัครบัญชี WeChat Test (สแกนโดยตรงกับ WeChat เพื่อเข้าสู่ระบบ): http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
*เปิดหมายเลขทดสอบแพลตฟอร์มสาธารณะ WeChat และกำหนดค่าข้อมูลการกำหนดค่าอินเตอร์เฟส การกำหนดค่ามีดังนี้
URL: http: // ip/weixinapidemo/coreservlet
โทเค็น: WGYSCSF
*จะได้รับการเตือนเมื่อส่งความสำเร็จการกำหนดค่าและความล้มเหลว
รหัสแหล่งที่มาทั้งหมดในส่วนนี้สามารถใช้โดยตรงได้โดยตรง
แพ็คเกจ com.gist.servlet; นำเข้า java.io.ioException; นำเข้า java.io.printwriter; นำเข้า Java.security.messagedigest; นำเข้า java.security.nosuchalgorithmexception; นำเข้า Java.util.arrays; javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse;/*** @author Gao Yuan http://blog.csdn.net/wgyscsf </n> * ระยะเวลาการเขียน 2016-4-3 4:34:05 PM */@webservlet ("/coreservlet") คลาสสาธารณะ Coreservlet ขยาย HTTPSERVLET / * * ขั้นตอนที่ 2: ตรวจสอบความถูกต้องของที่อยู่เซิร์ฟเวอร์หลังจากผู้พัฒนาส่งข้อมูลเซิร์ฟเวอร์ WeChat จะส่งคำขอ GET ไปยัง URL ที่อยู่เซิร์ฟเวอร์ที่เต็มไปด้วย * คำขอ GET มีสี่พารามิเตอร์: ลายเซ็น, timestamp, nonce, echosttr * ผู้พัฒนาตรวจสอบคำขอโดยการตรวจสอบลายเซ็น (มีวิธีการตรวจสอบด้านล่าง) หากคุณยืนยันว่าคำขอ GET นั้นมาจากเซิร์ฟเวอร์ WeChat โปรดส่งคืนเนื้อหาพารามิเตอร์ 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 โปรดส่งคืนเนื้อหาพารามิเตอร์ ECHOSTR ตามที่เป็นอยู่และการเข้าถึงจะมีผลและกลายเป็นนักพัฒนาที่ประสบความสำเร็จ มิฉะนั้นการเข้าถึงจะล้มเหลว */ // ขั้นตอนที่ 3: นักพัฒนาได้รับสตริงที่เข้ารหัสและสามารถเปรียบเทียบกับลายเซ็นเพื่อระบุว่าคำขอมาจากการเข้าถึง WeChat ที่ประสบความสำเร็จ System.out.println (tag + ":" + mparms + "--->" + ลายเซ็น); if (mparms.equals (ลายเซ็น)) {// system.out.println (tag + ":" + mparms + "---->" + ลายเซ็น); printwriter.write (echostr); } else {// การเข้าถึงล้มเหลวไม่จำเป็นต้องเขียนย้อนกลับ // system.out.println (แท็ก + "การเข้าถึงล้มเหลว"); }} @Override void dopost (httpservletrequest req, httpservletResponse resp) พ่น servletexception, ioexception {doget (req, resp); -บทความแรกของ Java WeChat Development API ได้รับการแนะนำให้รู้จักกับคุณที่นี่ ฉันหวังว่าคุณจะยังคงให้ความสนใจกับเนื้อหาที่อัปเดตในอนาคต ขอบคุณ!