วิธีใช้เมนูส่วนบุคคลที่กำหนดเองบน WeChat ต่อไปนี้เป็นคำแนะนำสำหรับคุณ
1. คำอธิบายทั่วโลก <br /> สำหรับคำอธิบายโดยละเอียดโปรดดูบทความสองบทความแรก
2. คำอธิบายของบทความนี้ <br /> บทความนี้แบ่งออกเป็นห้าส่วน:
* การห่อหุ้มของคลาสเครื่องมือ AccessTokenutils
* การอ่านและการวิเคราะห์เมนูที่กำหนดเองและเอกสารเมนูส่วนบุคคล
* การวิเคราะห์และการสร้างถั่วที่สอดคล้องกันสำหรับเมนู JSON
* การใช้เมนูที่กำหนดเอง
* การใช้เมนูเมนูเมนูส่วนบุคคลที่กำหนดเองเมนูทุกประเภทจะได้รับ ในตอนท้ายของบทความนี้จะมีรหัสแหล่งข้อมูลตัวอย่างทั้งหมดรวมถึงบทความสี่บทความแรกในบทความนี้
การห่อหุ้มของคลาสเครื่องมือ AccessTokenUtils
บทความข้างต้นได้รับการแนะนำในรายละเอียดเกี่ยวกับการได้มาและการประหยัดเวลาของ AccessTokens ที่นี่จะได้รับ accesstokenutils แบบแพคเกจโดยตรง จะไม่ได้รับหลักการดำเนินการและการอ่านเอกสาร
accesstokenutils.java
แพ็คเกจ com.gist.utils; นำเข้า java.io.file; นำเข้า java.io.fileinputstream; นำเข้า java.io.fileoutputstream; นำเข้า java.io.ioException; นำเข้า Java.io.InputStreamReader; นำเข้า Java.net.url; com.gist.bean.access_token; นำเข้า com.google.gson.gson;/** * @author gao yuan </n> อีเมล: [email protected] </n> บล็อก http://blog.csdn.net/wgyscsf {ส่วนตัวคงที่สุดท้ายยาว max_time = 7200 * 1000; // weChat อนุญาตให้ Access_Token สูงสุดเวลา (MS) สตริงสตริงสุดท้ายคงที่ส่วนตัว = "weixinapitest"; // แท็กสตริงสุดท้ายคงที่ appid = "wx889b020b3666666b0b8"; "6DA7676BF394F0A9F15FBF06027856BB"; // คีย์/ * * วิธีนี้ใช้ access_token, บันทึกและบันทึก access_token เพียง 2 ชั่วโมง หากเกินสองชั่วโมงให้กลับมาอีกครั้ง หากไม่เกินสองชั่วโมงให้รับโดยตรง วิธีนี้ขึ้นอยู่กับ *: สตริงคงที่สาธารณะ getAccessToken (); * * แนวคิด: เก็บ access_token ที่ได้รับและเวลาปัจจุบันในไฟล์ * เมื่อแยกออกให้กำหนดความแตกต่างของเวลาระหว่างเวลาปัจจุบันและเวลาที่บันทึกไว้ในที่เก็บข้อมูล หากมากกว่า max_time ให้กลับมาอีกครั้งและจัดเก็บการเข้าถึงไฟล์ที่ได้รับเพื่อแทนที่เนื้อหาต้นฉบับ*และหากน้อยกว่า MAX_TIME ให้รับโดยตรง */ // เพื่อที่จะโทรโดยไม่ต้องโยนข้อยกเว้นข้อยกเว้นทั้งหมดจะถูกจับที่นี่ รหัสมีความยาวเล็กน้อย สตริงคงที่สาธารณะ getSavedAccess_token () {gson gson = new gson (); // jar ของบุคคลที่สามจัดการกับการแปลงของ JSON และถั่วสตริง maccess_token = null; // access_token ที่ต้องได้รับ; fileOutputStream fos = null; // output stream fileInputStream fis = null; // ไฟล์สตรีมอินพุตไฟล์ = ไฟล์ใหม่ ("temp_access_token.temp"); // access_token บันทึกตำแหน่งลอง {// ถ้าไฟล์ไม่มีอยู่ }} catch (Exception e1) {e1.printstackTrace (); } // ถ้าขนาดไฟล์เท่ากับ 0 นั่นหมายความว่าครั้งแรกที่คุณใช้ให้บันทึก access_token ถ้า (file.length () == 0) {ลอง {maccess_token = getAccessToken (); // รับ AccessToken Access_Token ที่ = Access_Token ใหม่ (); at.setaccess_token (maccess_token); at.setexpires_in (System.currentTimeMillis () + ""); // ตั้งค่าสตริงเวลาฝาก json = gson.tojson (at); FOS = ใหม่ fileOutputStream (ไฟล์, false); // ผนวก fos.write ((json) .getBytes ()); // บันทึกเวลา AccessToken และปัจจุบันลงในไฟล์ fos.close (); ส่งคืน maccess_token; } catch (exception e) {e.printstacktrace (); }} else {// อ่านเนื้อหาไฟล์ไบต์ [] b = ไบต์ใหม่ [2048]; int len = 0; ลอง {fis = new FileInputStream (ไฟล์); len = fis.read (b); } catch (ioexception e1) {// todo catch block catch ที่สร้างอัตโนมัติ e1.printstacktrace (); } สตริง mjsonAccess_token = สตริงใหม่ (b, 0, len); // เนื้อหาของไฟล์อ่าน access_token access_token = gson.fromjson (mjsonaccess_token, access_token ใหม่ (). getClass ()); if (access_token.getExpires_in ()! = null) {long savetime = long.parselong (access_token.getExpires_in ()); นานแล้ว = System.currentTimeMillis (); Long Remiantime = Nowtime - Savetime; // system.out.println (Tag + "ความแตกต่างเวลา:" + remiantime + "MS"); if (remiantime <max_time) {access_token at = gson.fromjson (mjsonaccess_token, access_token ใหม่ (). getClass ()); maccess_token = at.getaccess_token (); ส่งคืน maccess_token; } else {maccess_token = getAccessToken (); access_token at = new Access_token (); at.setaccess_token (maccess_token); at.Setexpires_in (System.currentTimeMillis () + ""); สตริง json = gson.tojson (at); ลอง {fos = ใหม่ fileOutputStream (ไฟล์, false); // ผนวก fos.write ((json) .getBytes ()); fos.close (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } ส่งคืน maccess_token; }} else {return null; }} ส่งคืน maccess_token; } / * * รับ WeChat Server AccessToken ส่วนนี้สอดคล้องกับ getAccess_token () ไม่มีการเพิ่มความคิดเห็น*/สตริงคงที่สาธารณะ getAccessToken () {string urlstring = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid= สตริง reslut = null; ลอง {url requrl = url ใหม่ (urlstring); httpsurlconnection httpsconn = (httpsurlconnection) requrl .openconnection (); InputStreamReader ISR = ใหม่ inputStreamReader (httpsconn.getInputStream ()); ถ่าน [] chars = char ใหม่ [1024]; reslut = ""; int len; ในขณะที่ ((len = isr.read (chars))! = -1) {reslut += สตริงใหม่ (chars, 0, len); } isr.close (); } catch (ioexception e) {e.printstacktrace (); } GSON GSON = new GSON (); access_token access_token = gson.fromjson (reslut, access_token ใหม่ (). getClass ()); if (access_token.getaccess_token ()! = null) {return access_token.getaccess_token (); } else {return null; -
การอ่านและการวิเคราะห์เมนูที่กำหนดเองและเอกสารเมนูส่วนบุคคล
•เมนูที่กำหนดเอง
◦สร้างส่วนต่อประสานเมนู
◦Customอินเตอร์เฟสการสอบถามเมนู
menu เมนูการลบส่วนต่อประสาน
◦เหตุการณ์เมนูพุช
◦ส่วนต่อประสานเมนูที่มีบุคลิกภาพ
◦รับการกำหนดค่าเมนูของบัญชีอย่างเป็นทางการ
•ที่อยู่เอกสาร: http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html
•เอกสารเว็บไซต์อย่างเป็นทางการให้คำอธิบายต่อไปนี้:
* อินเทอร์เฟซเมนูที่กำหนดเองสามารถใช้ปุ่มประเภทต่าง ๆ ดังนี้: 1 คลิก: คลิกเหตุการณ์ ... ; 2. ดู: เหตุการณ์กระโดด ... ; 3 .... (เกี่ยวกับเมนูที่กำหนดเอง)
* คำขอการโทรแบบอินเตอร์เฟสคำอธิบายวิธีการร้องขอ http: โพสต์ (โปรดใช้โปรโตคอล https) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token (เกี่ยวกับเมนูที่กำหนดเอง)
* ตัวอย่างคำขอคลิกและดู {"ปุ่ม": [... ]} (เกี่ยวกับเมนูที่กำหนดเอง)
* คำอธิบายพารามิเตอร์ ... (เกี่ยวกับเมนูที่กำหนดเอง)
* สร้างเมนูส่วนบุคคลวิธีการร้องขอ http: โพสต์ (โปรดใช้โปรโตคอล https) https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=access_token (เกี่ยวกับเมนูส่วนบุคคล)
* คำขอตัวอย่าง: {"ปุ่ม": [... ], "MatchRule": {... }} (เกี่ยวกับเมนูส่วนบุคคล)
* คำอธิบายพารามิเตอร์ ... (เกี่ยวกับเมนูส่วนบุคคล)
* นักพัฒนาสามารถตั้งค่าเมนูที่ผู้ใช้เห็นผ่านเงื่อนไขต่อไปนี้ (เกี่ยวกับเมนูส่วนบุคคล):
1. การจัดกลุ่มผู้ใช้ (ความต้องการทางธุรกิจของนักพัฒนาสามารถทำได้ด้วยความช่วยเหลือของการจัดกลุ่มผู้ใช้)
2. เพศ
3. ระบบปฏิบัติการโทรศัพท์มือถือ
4. ภูมิภาค (ภูมิภาคกำหนดโดยผู้ใช้ในไคลเอนต์ WeChat)
5. ภาษา (ภาษาที่ผู้ใช้ตั้งอยู่บนไคลเอนต์ WeChat)
•เข้าใจ:
◦มันเป็นคำขอโพสต์ที่คุ้นเคยอีกครั้ง แต่ฉันไม่ค่อยเข้าใจคำที่คลุมเครือเกี่ยวกับการโทร ฉันเพิ่งรู้ว่าเราต้องใช้พารามิเตอร์ "? access_token = access_token" ซึ่งเราได้รับในบทความก่อนหน้า หากเราเปลี่ยนที่อยู่คำขอ "Access_Token" ในเอกสาร WeChat เป็น Access_Token ที่เราได้รับและเยี่ยมชม URL เราจะเห็น "{" errCode ": 44002," errmsg ":" ข้อมูลโพสต์ว่างเปล่า: [GDVEDA0984VR23] "}" อาจหมายความว่าข้อมูลคำขอโพสต์ที่ว่างเปล่า ดังนั้นเราจำเป็นต้องส่งผ่านพารามิเตอร์ไปยังเซิร์ฟเวอร์ WeChat ผ่านรูปแบบของการร้องขอการโพสต์และรูปแบบพารามิเตอร์จะได้รับด้านล่างเอกสาร: {"ปุ่ม": […]} ดังนั้นเราจึงต้องส่งพารามิเตอร์ไปยังเซิร์ฟเวอร์ WeChat ในรูปแบบนี้
◦เกี่ยวกับคำอธิบายพารามิเตอร์เราจะเห็นว่ามีเจ็ดพารามิเตอร์ในการสร้างเมนูที่กำหนดเอง นอกเหนือจากพารามิเตอร์ทั้งเจ็ดนี้ในส่วนต่อประสานเมนูส่วนบุคคลแล้วยังมีพารามิเตอร์อีกแปดตัว เพียงแค่ดูที่ส่วนนี้ของเอกสารเราสามารถเข้าใจได้ว่าพารามิเตอร์ทั้งแปดนี้ใช้สำหรับการจับคู่และการกรองสำหรับเมนูส่วนบุคคล
◦ใหม่เราจำเป็นต้องสร้าง JSON ตามข้อกำหนดของเอกสาร WeChat เพื่อส่งข้อมูลสตริงของ JSON นี้ไปยังเซิร์ฟเวอร์ WeChat ผ่านคำขอโพสต์และ JSON รวมถึงเหตุการณ์ปุ่มหลายประเภทที่เราสร้างขึ้น
การวิเคราะห์และการสร้างถั่วที่สอดคล้องกันสำหรับเมนู JSON
การวิเคราะห์เมนูที่กำหนดเอง JSON (ไม่รวมเมนูส่วนบุคคล) รหัสต่อไปนี้เป็นตัวอย่างที่กำหนดโดยเอกสาร WeChat
ตัวอย่างคำขอคลิกและดู
{"ปุ่ม": [{"type": "คลิก", "ชื่อ": "เพลงวันนี้", "key": "v1001_today_music"}, {"ชื่อ": "เมนู", "sub_button": [{"type": "ดู", "ชื่อ": "ค้นหา" "type": "ดู", "ชื่อ": "วิดีโอ", "url": "http://v.qq.com/"}, {"type": "คลิก", "ชื่อ": "Like us", "key": "v1001_good"}]}}}}} หลังจากการวิเคราะห์เราจะเห็นได้ว่าข้อมูลสตริงของ JSON นี้แบ่งออกเป็นสามเลเยอร์: "" ปุ่ม ": [{…}, {…}]", "," [{…}, {{"ชื่อ": เมนู, "sub_button": [{}, {}] " "url": "... "}, {}, {}, {} "ซึ่งอาจดูวิงเวียน
อย่างไรก็ตามหากเราสามารถเรียกคืนเมนู WeChat ที่เราเห็นในความเป็นจริงมันจะเข้าใจได้ง่ายขึ้น: ระดับ 1: เมนู (เมนูหนึ่งเมนู) ปุ่มหลักที่ต่ำกว่าสามปุ่ม ระดับ 2: ปุ่มผู้ปกครอง (ปุ่มหลัก 1 ถึง 3 ปุ่ม) ปุ่มปุ่มเด็กล่างถึงห้าปุ่ม ระดับ 3: ปุ่มเด็ก (ปุ่มเด็ก 1 ถึง 5 ปุ่ม)
ตอนนี้เราจะเห็นได้ว่า JSON และ "เมนู" ที่เราเข้าใจสามารถติดต่อได้ทีละคน ตอนนี้โฟกัสคือวิธีการยืนยัน "ชื่อระดับ" ของแต่ละระดับซึ่งเป็นวัตถุ Javabean ที่สอดคล้องกันใน Java
ในเวลาเดียวกันเนื่องจากมีปุ่มพาเรนต์หลายปุ่มภายใต้เมนูระดับแรกจึงอยู่ในรูปแบบของรายการ <เมนูหลัก> อาจมีเมนูย่อยหลายรายการภายใต้ปุ่มหลักซึ่งเป็นรายการ <เมามัน>; อย่างไรก็ตามปุ่มหลักอาจเป็นปุ่มตอบสนองแยกต่างหาก เป็นวัตถุปุ่มพาเรนต์แยกต่างหาก ปุ่มย่อยเป็นวัตถุย่อยแยกต่างหาก
เมื่อดูคำอธิบายพารามิเตอร์เกี่ยวกับเมนูที่กำหนดเองเราจะเห็นว่าปุ่มแบ่งออกเป็นปุ่มระดับแรก ("ปุ่ม") และปุ่มระดับที่สอง ("Sub_button") นอกจากนี้ยังมีประเภทข้อมูลทั่วไปเช่น: ประเภทการตอบสนองเมนู ("ประเภท") ชื่อเมนู ("ชื่อ") คลิกพิมพ์พารามิเตอร์ ("คีย์") พารามิเตอร์ประเภทมุมมอง ("url") ประเภท media_id และพารามิเตอร์ประเภท View_limited ("media_id")
•ข้อมูลที่เป็นนามธรรม (ไม่มี setter, getter เขียน):
// ปุ่มคลาสฐานคลาสสาธารณะ BaseButton {ประเภทสตริงส่วนตัว; ชื่อสตริงส่วนตัว; คีย์สตริงส่วนตัว URL สตริงส่วนตัว สตริงส่วนตัว media_id;} // ปุ่มย่อยระดับระดับ sonbutton ขยาย baseButton {สตริงส่วนตัว sub_button;} // ปุ่มพาเรนต์คลาสสาธารณะชั้นเรียน Public Button ขยาย baseButton {ปุ่มสตริงส่วนตัว; // ปุ่มแม่อาจตอบกลับไปที่ @SerializedName ("sub_button") // รายการ <SonButton> sonButtons; // อาจมีหลายปุ่มย่อย} เมนูคลาสสาธารณะ {@SerializedName ("ปุ่ม") รายการส่วนตัว <Fatherbutton> Fatherbuttons;}ข้างต้นคือการวิเคราะห์เมนูที่กำหนดเองที่สมบูรณ์และการสร้าง Javabean ที่เกี่ยวข้อง
สำหรับเมนูส่วนบุคคลหากคุณดูเอกสารประกอบในส่วนนี้คุณจะพบว่ามันเหมือนกับเมนูที่กำหนดเองเพียงแค่ "การกำหนดค่า" หลายครั้งรูปแบบมีดังนี้: {"ปุ่ม": […], "MatchRule": {…}}
เราพบว่า "การจับคู่" ของ JSON และ "ปุ่ม" อยู่ในระดับเดียวกันและการวิเคราะห์และการใช้งานนั้นเหมือนกันกับข้างต้นและการใช้งานของ Javabean นั้นได้รับโดยตรง
// JSON ที่สอดคล้องกับ JSON ของ JSON Public Class MatchRule {Private String Group_id; String Private String ส่วนตัว Client_platform_type; ประเทศสตริงส่วนตัว; Private String Province; String Private String; การใช้เมนูที่กำหนดเอง
งานเราใช้การตอบกลับปุ่ม WeChat ทั้งหมด:
งาน (หมายเหตุ: "M-0" หมายถึงปุ่มหลัก; "MN" หมายถึงปุ่ม Parent MTH, ปุ่ม Nth Child (M, N ≠ 0)): 1-0: ชื่อ: คลิก, การตอบสนองคลิกเหตุการณ์: คลิกเหตุการณ์กด 2-0: ชื่อ: ปุ่มหลัก 2. 2-1: ชื่อ: ดู, การตอบสนองเหตุการณ์: ข้ามไปที่หน้าเว็บ; 2-2: ชื่อ: scancode_push, เหตุการณ์ตอบสนอง: scancode_waitmsg, เหตุการณ์ตอบสนอง: scancode_waitmsg, เหตุการณ์ตอบสนอง: เหตุการณ์ Scancode Push และกล่องพรอมต์ "รับข้อความ" ปรากฏขึ้น; 2-4: ชื่อ: PIC_SYSPHOTO, เหตุการณ์ตอบสนอง: เปิดระบบเพื่อถ่ายภาพและโพสต์รูปภาพ 2-5: ชื่อ: pic_photo_or_album, เหตุการณ์ตอบสนอง: ป๊อปอัพและถ่ายภาพหรือโพสต์รูปภาพในอัลบั้ม 3-0: ชื่อ: ปุ่มหลัก 3. 3-1: ชื่อ: pic_weixin, เหตุการณ์ตอบสนอง: ผู้ส่งอัลบั้ม WeChat ป๊อปอัพ; 3-2: ชื่อ: location_select, เหตุการณ์ตอบสนอง: ตัวเลือกตำแหน่งทางภูมิศาสตร์แบบป๊อปอัพ; 3-3: ชื่อ: media_id, เหตุการณ์การตอบสนอง: ข้อความการจัดส่ง (ยกเว้นข้อความข้อความ); 3-4: ชื่อ: view_limited, เหตุการณ์ตอบสนอง: ข้าม URL ข้อความกราฟิก
ใช้ซอร์สโค้ด (อ้างอิง accessTokenUtils.java ในส่วนแรก: การห่อหุ้มของคลาสเครื่องมือ AccessTokenutils)
/ * * สร้างเมนูที่กำหนดเอง */@Test โมฆะสาธารณะ createCommmenu () {String Access_Token = AccessTokenUTILS.GETACCESSTOKEN (); // รับ AccessTokenUtils เป็นคลาสที่ห่อหุ้มด้วย // stitching api ต้องการ httpsurl link urlstring = "https://api.weixin. access_token; ลอง {// สร้าง URL url requrl = url ใหม่ (urlstring); // รับลิงค์ httpsurlconnection httpsconn = (httpsurlconnection) requrl .openconnection (); httpsconn.setDooutput (จริง); // รับกระแสเอาต์พุตของการเชื่อมต่อเพื่ออ่านเนื้อหาการตอบกลับ OutputStreamWriter OSR = New OutputStreamWriter (httpsconn.getOutputStream ()); OSR.WRITE (getMenujson ()); // ใช้วิธีการภายนอกของคลาสนี้เพื่อ getMenujson () osr.close (); // ส่งคืนผลลัพธ์ inputStreamReader isr = new inputStreamReader (httpsconn.getInputStream ()); // อ่านเนื้อหาการตอบกลับของเซิร์ฟเวอร์และแสดง char [] chars = char ใหม่ [1024]; สตริง reslut = ""; int len; ในขณะที่ ((len = isr.read (chars))! = -1) {reslut += สตริงใหม่ (chars, 0, len); } system.out.println ("ผลตอบแทนผล:" + reslut); isr.close (); } catch (ioexception e) {e.printstacktrace (); }} สตริงสาธารณะ getMenujson () {gson gson = new gson (); // JSON เครื่องมือประมวลผลเมนูเมนู = เมนูใหม่ (); // รายการเมนูรายการ <FatherButton> fatherbuttons = new ArrayList <FatherButton> (); // fb1.setName ("คลิก"); fb1.setType ("คลิก"); fb1.setkey ("10"); // -------------------- // PARTER BUTTON 2 FARDBUTTON FB2 = ใหม่ FAIRDBUTTON (); fb2.setName ("ปุ่มหลัก 2"); รายการ <SonButton> sonButtons2 = new ArrayList <SonButton> (); // การรวบรวมปุ่มเด็ก // Subbutton 2-1 SonButton SB21 = ใหม่ SonButton (); SB21.SetName ("ดู"); sb21.seturl ("http://www.baidu.com"); SB21.SetType ("ดู"); // ปุ่มย่อย 2-2 SonButton SB22 = ใหม่ sonButton (); sb22.setName ("scancode_push"); SB22.SetType ("scancode_push"); SB22.SetKey ("22"); // ย่อย 2-3 SonButton SB23 = ใหม่ sonButton (); sb23.setName ("scancode_waitmsg"); SB23.SetType ("scancode_waitmsg"); SB23.SetKey ("23"); // ย่อย 2-4 SonButton SB24 = ใหม่ sonButton (); sb24.setName ("pic_sysphoto"); SB24.SetType ("PIC_SYSPHOTO"); SB24.SetKey ("24"); // ย่อย 2-4 SonButton SB24 = ใหม่ sonButton (); sb24.setName ("pic_sysphoto"); SB24.SetType ("PIC_SYSPHOTO"); SB24.SetKey ("24"); // ย่อย 2-4 SonButton SB24 = ใหม่ sonButton (); sb24.setName ("pic_sysphoto"); SB24.SetKey ("24"); // ย่อย 2-5 SonButton SB25 = ใหม่ sonButton (); sb25.setName ("pic_photo_or_album"); SB25.SetType ("pic_photo_or_album"); SB25.SetKey ("25"); // เพิ่มปุ่มเด็กลงในปุ่มเด็กตั้งค่า sonbuttons2.add (SB21); sonbuttons2.add (SB22); sonbuttons2.add (SB23); sonbuttons2.add (SB24); sonbuttons2.add (SB25); // ใส่ปุ่มเด็กลงใน 2-0 ปุ่มแม่แม่ชุด FB2.SetsonButtons (SonButtons2); // -------------------- // ปุ่มผู้ปกครอง 3 Fatherbutton FB3 = ใหม่ FatherButton (); fb3.setName ("presidy button3"); รายการ <SonButton> sonButtons3 = new ArrayList <SonButton> (); // ปุ่มย่อย 3-1 SonButton SB31 = ใหม่ sonButton (); sb31.setName ("pic_weixin"); SB31.SetType ("pic_weixin"); SB31.SetKey ("31"); // ปุ่มย่อย 3-2 SonButton SB32 = ใหม่ sonButton (); sb32.setName ("locatselect"); SB32.SetType ("location_select"); SB32.SetKey ("32"); // // ปุ่มย่อย 3-3 --- ไม่สามารถทดสอบได้เนื่องจากจำเป็นต้องใช้ Media_ID สิ่งนี้ต้องเรียกใช้รหัสวัสดุ // SonButton SB33 = ใหม่ sonButton (); // sb33.setName ("media_id"); // SB33.SetType ("media_id"); // SB33.SetMedia_id ("???"); // // ปุ่มย่อย 3-4-> ไม่สามารถทดสอบได้เนื่องจากจำเป็นต้องใช้ Media_ID สิ่งนี้ต้องเรียกใช้รหัสวัสดุ // SonButton SB34 = ใหม่ sonButton (); // sb34.setName ("view_limited"); // SB34.SetType ("view_limited"); // sb34.setmedia_id ("???"); // เพิ่มปุ่มเด็กลงในปุ่มเด็กคิว sonbuttons3.Add (SB31); SonButtons3.Add (SB32); // sonbuttons3.Add (SB33); // sonbuttons3.Add (SB34); // ใส่ปุ่มลูกไปที่ 3-0 ปุ่ม PARTER BUTTON คิว fb3.setsonbuttons (sonbuttons3); // ----------------------------------------------------------------------------- Fatherbuttons.add (FB2); Fatherbuttons.add (FB3); // เพิ่มคิวปุ่มหลักลงในเมนูเมนูเมนู SetFatherButtons (Fatherbuttons); สตริง json = gson.tojson (เมนู); System.out.println (JSON); // ทดสอบเอาต์พุตส่งคืน JSON; - การดำเนินการตามเมนูส่วนบุคคล
•งาน: แสดงปุ่มต่าง ๆ ตามเพศ (สามารถจัดกลุ่มตามเพศภูมิภาคระบบปฏิบัติการมือถือ ฯลฯ )
•แก้ไขรหัส 1 เนื่องจากมีการใช้งานโดยพื้นหลัง WeChat ที่แตกต่างกันอินเทอร์เฟซจึงแตกต่างกัน อย่างไรก็ตามมันยังคงเป็นคำขอโพสต์ รหัสไม่จำเป็นต้องเปลี่ยนแปลง เพียงแทนที่ URLString ดั้งเดิม
// ลิงค์ httpsurl ที่ต้องการโดย SPLICING API String urlString = "https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=" access_token;
•แก้ไขรหัส 2 เพียงสร้าง MatchRule ตั้งค่ากฎการจับคู่แล้วเพิ่ม MatchRule ลงในเมนูเพื่อให้กฎการจับคู่เสร็จสมบูรณ์
// ------ // เริ่มการตั้งค่าเมนูส่วนบุคคลที่นี่ MatchRule MatchRule = ใหม่ MatchRule (); MatchRule.SetSex ("2"); // Boys Menu.SetMatchRule (MatchRule); // ---ดาวน์โหลดซอร์สโค้ด: http://xiazai.vevb.com/201606/yuanma/weixinapi(vevb.com).rar
บทความนี้ได้รวบรวมไว้ใน "บทสรุปการสอนการพัฒนา Android WeChat" และ "สรุปการสอนการพัฒนา Java WeChat" ยินดีต้อนรับทุกคนให้เรียนรู้และอ่าน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น