1. ปรับแต่งเมนูคำอธิบายและประเภทปุ่ม
1. คำอธิบายเมนู
1) เมนูที่กำหนดเองรวมถึงเมนูระดับแรกสูงสุด 3 เมนูและเมนูระดับแรกแต่ละเมนูมีเมนูระดับสองวินาที
2) เมนูระดับแรกมีอักขระจีนสูงสุด 4 ตัวและเมนูระดับที่สองมีอักขระจีนมากถึง 7 ตัว ชิ้นส่วนพิเศษจะถูกแทนที่ด้วย "... "
3) หลังจากสร้างเมนูที่กำหนดเองกลยุทธ์การรีเฟรชเมนูคือเมื่อผู้ใช้เข้าสู่หน้าเซสชันบัญชีอย่างเป็นทางการหรือหน้าโปรไฟล์บัญชีอย่างเป็นทางการหากเขาพบว่าคำขอสุดท้ายที่จะดึงเมนูคือ 5 นาทีที่ผ่านมาเขาจะดึงเมนู หากเมนูได้รับการอัปเดตเมนูของลูกค้าจะได้รับการรีเฟรช ในระหว่างการทดสอบคุณสามารถพยายามยกเลิกการติดตามบัญชีสาธารณะและติดตามอีกครั้งและคุณสามารถเห็นผลกระทบหลังจากการสร้าง
2. อินเทอร์เฟซเมนูที่กำหนดเองสามารถใช้ปุ่มหลายประเภทได้
1) คลิก: หลังจากผู้ใช้คลิกปุ่มคลิกพิมพ์เมื่อคลิกเหตุการณ์พุชเซิร์ฟเวอร์ WeChat จะส่งโครงสร้างของเหตุการณ์ประเภทข้อความไปยังผู้พัฒนาผ่านอินเทอร์เฟซข้อความ (ดูที่คู่มืออินเทอร์เฟซข้อความ) และนำค่าคีย์ที่กรอกโดยนักพัฒนาในปุ่ม นักพัฒนาสามารถโต้ตอบกับผู้ใช้ผ่านค่าคีย์ที่กำหนดเอง
2) ดู: กระโดด URL หลังจากผู้ใช้คลิกปุ่มประเภทมุมมองไคลเอนต์ WeChat จะเปิด URL ของเว็บเพจที่กรอกโดยนักพัฒนาในปุ่มซึ่งสามารถรวมกับการอนุญาตเว็บเพจเพื่อให้ได้อินเทอร์เฟซข้อมูลพื้นฐานของผู้ใช้เพื่อรับข้อมูลพื้นฐานของผู้ใช้
3) SCANCODE_PUSH: หลังจากผู้ใช้คลิกปุ่มสำหรับเหตุการณ์พุชรหัสสแกนไคลเอนต์ WeChat จะเรียกเครื่องมือสแกนและแสดงผลการสแกนหลังจากเสร็จสิ้นการดำเนินการรหัสสแกน (ถ้าเป็น URL มันจะเข้าสู่ URL)
4) scancode_waitmsg: สแกนรหัสเพื่อผลักดันเหตุการณ์และกล่องพรอมต์ "ข้อความรับ" จะปรากฏขึ้น หลังจากผู้ใช้คลิกปุ่มไคลเอนต์ WeChat จะเรียกเครื่องมือสแกน หลังจากดำเนินการสแกนเสร็จแล้วผลลัพธ์ของรหัสสแกนจะถูกส่งผ่านไปยังผู้พัฒนา ในเวลาเดียวกันเครื่องมือสแกนจะถูกปิดและกล่องพรอมต์ "ข้อความรับ" จะปรากฏขึ้นและจากนั้นข้อความที่ส่งโดยนักพัฒนาอาจได้รับ
5) PIC_SYSPHOTO: หลังจากผู้ใช้คลิกปุ่มไคลเอ็นต์ WeChat จะปรับกล้องระบบ หลังจากเสร็จสิ้นการดำเนินการภาพถ่ายภาพถ่ายที่ถ่ายจะถูกส่งไปยังนักพัฒนาและผลักดันเหตุการณ์ไปยังนักพัฒนา ในเวลาเดียวกันกล้องระบบจะถูกปิดและข้อความที่ส่งโดยนักพัฒนาอาจได้รับ
6) PIC_PHOTO_OR_ALBUM: หลังจากผู้ใช้คลิกปุ่มไคลเอ็นต์ WeChat จะปรากฏตัวเลือกให้ผู้ใช้เลือก "ถ่ายภาพ" หรือ "เลือกจากอัลบั้มโทรศัพท์มือถือ" หลังจากผู้ใช้เลือกเขาจะผ่านกระบวนการอีกสองกระบวนการ
7) PIC_WEIXIN: หลังจากผู้ใช้คลิกปุ่มบนผู้ส่งอัลบั้ม WeChat Photo อัลบั้มไคลเอ็นต์ WeChat จะปรับอัลบั้ม WeChat Photo หลังจากดำเนินการเลือกเสร็จสิ้นภาพถ่ายที่เลือกจะถูกส่งไปยังเซิร์ฟเวอร์ของนักพัฒนาและส่งเหตุการณ์ไปยังนักพัฒนา ในเวลาเดียวกันอัลบั้มจะปิด จากนั้นข้อความที่ส่งโดยนักพัฒนาอาจได้รับ
8) Location_select: หลังจากผู้ใช้คลิกปุ่มเมื่อผู้ใช้คลิกปุ่มไคลเอ็นต์ WeChat จะเรียกใช้เครื่องมือเลือกตำแหน่งทางภูมิศาสตร์ หลังจากเสร็จสิ้นการดำเนินการเลือกที่ตั้งทางภูมิศาสตร์ที่เลือกจะถูกส่งไปยังเซิร์ฟเวอร์ของนักพัฒนาและเครื่องมือเลือกตำแหน่งจะถูกปิด จากนั้นข้อความที่ส่งโดยนักพัฒนาอาจได้รับ
9) Media_id: หลังจากผู้ใช้คลิกปุ่มประเภท Media_id เซิร์ฟเวอร์ WeChat จะส่งวัสดุที่สอดคล้องกับรหัสวัสดุถาวรที่ผู้พัฒนากรอกไว้ให้กับผู้ใช้ ประเภทวัสดุถาวรอาจเป็นรูปภาพเสียงวิดีโอและข้อความกราฟิก โปรดทราบ: รหัสวัสดุถาวรจะต้องเป็นรหัสกฎหมายที่ได้รับหลังจากอัปโหลดอินเทอร์เฟซ "การจัดการวัสดุ/เพิ่มวัสดุถาวร"
10) View_limited: ข้าม URL ข้อความกราฟิกหลังจากผู้ใช้คลิกปุ่มประเภท View_limited ไคลเอ็นต์ WeChat จะเปิด URL ข้อความกราฟิกที่สอดคล้องกับรหัสวัสดุถาวรที่กรอกโดยนักพัฒนาในปุ่ม ประเภทวัสดุถาวรรองรับข้อความกราฟิกเท่านั้น โปรดทราบ: รหัสวัสดุถาวรจะต้องเป็นรหัสกฎหมายที่ได้รับหลังจากอัปโหลดอินเทอร์เฟซ "การจัดการวัสดุ/เพิ่มวัสดุถาวร"
หมายเหตุ: เหตุการณ์ทั้งหมดตั้งแต่ 3 ถึง 8 สนับสนุนผู้ใช้ WeChat ของ iPhone 5.4.1 หรือสูงกว่าและ Android 5.4 หรือสูงกว่า ผู้ใช้ WeChat เวอร์ชันเก่าจะไม่ตอบสนองหลังจากคลิกและนักพัฒนาไม่สามารถรับเหตุการณ์ได้ตามปกติ 9 และ 10 เป็นประเภทเหตุการณ์ที่จัดทำขึ้นเป็นพิเศษสำหรับบัญชีการสมัครสมาชิกภายใต้แพลตฟอร์มของบุคคลที่สามที่ไม่ได้รับการรับรองโดย WeChat (โดยเฉพาะพวกเขาไม่ได้รับการอนุมัติจากการรับรองคุณสมบัติ) พวกเขาไม่มีเหตุการณ์ผลักดันและความสามารถของพวกเขาค่อนข้าง จำกัด ไม่จำเป็นต้องใช้บัญชีสาธารณะประเภทอื่น
2. สร้าง/เคียวรี/ลบเมนู
การคลิกอย่างเป็นทางการและดูการสาธิตกิจกรรม
{"ปุ่ม": [{"type": "คลิก", "ชื่อ": "เพลงวันนี้", "key": "v1001_today_music"}, {"ชื่อ": "เมนู", "sub_button": [{"type": "ดู", "ชื่อ": "ค้นหา" "type": "miniprogram", "name": "wxa", "url": "http://mp.weixin.qq.com", "appid": "wx286b93c14bbf93aa", "pagepath": "หน้า" "คีย์": "v1001_good"}]}]}ประเภทอื่น ๆ (รวมถึง 9 และ 10)
{"ปุ่ม": [{"ชื่อ": "scancode_waitmsg", "ชื่อ": "scancode with prompt", "key": "selfmenu_0_0", "sub_button": []}, {"พิมพ์": "scancode_push", "ชื่อ": "scancode_push" "selfmenu_0_1", "sub_button": []}]}, {"ชื่อ": "ส่งรูปภาพ", "sub_button": [{"type": "pic_sysphoto", "ชื่อ": "รูปภาพและโพสต์รูปภาพ", "key": "selfmenu_1_0" "pic_photo_or_album", "ชื่อ": "ถ่ายภาพหรืออัลบั้มเพื่อโพสต์รูปภาพ", "key": "selfmenu_1_1", "sub_button": []}, {"type": "pic_weixin", "ชื่อ": "ภาพอัลบัม {"ชื่อ": "ส่งตำแหน่ง", "type": "location_select", "key": "selfmenu_2_0"}, {"type": "media_id", "ชื่อ": "รูปภาพ", "media_id": "media_id1"}, {"type": "view_limited"1. เริ่มห่อหุ้มคลาสเอนทิตีตามตัวอย่าง
ปุ่มเมนูคลาสพื้นฐานคลาส BasicButton.java
คลาสสาธารณะ BasicButton {ชื่อสตริงส่วนตัว; สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; - เมนู. java
เมนูคลาสสาธารณะ {สตริงคงสุดท้ายสาธารณะคลิก = "คลิก"; // คลิกเมนูสาธารณะสุดท้ายสตริงคงสุดท้ายมุมมอง = "ดู"; // url เมนูสาธารณะสตริงคงสุดท้ายสุดท้าย scancode_waitmsg = "scancode_waitmsg"; // สแกนรหัสเพื่อส่งสตริงคงที่สาธารณะสุดท้าย scancode_push = "scancode_push"; // สแกนรหัสเพื่อผลักดันเหตุการณ์สาธารณะสุดท้ายสตริงคงสุดท้าย pic_sysphoto = "pic_sysphoto"; // ระบบที่จะถ่ายภาพและโพสต์สตริงคงสุดท้ายสาธารณะ pic_photo_or_album = "pic_photo_or_album"; // ถ่ายภาพหรือโพสต์อัลบั้มภาพสาธารณะสตริงคงสุดท้าย pic_weixin = "pic_weixin"; // โพสต์ภาพถ่ายบน WeChat สาธารณะสุดท้ายสตริงคงที่ location_select = "location_select"; // ส่งตำแหน่ง BasicButton BasicButton []; Public BasicButton [] getButton () {ปุ่มส่งคืน; } โมฆะสาธารณะ setButton (ปุ่ม basicButton []) {this.button = ปุ่ม; - มุมมองประเภทคลาสคลาส viewbutton.java ประเภทอื่น ๆ สามารถบรรจุทีละหนึ่งตามนี้
คลาสสาธารณะ ViewButton ขยาย BasicButton {Private String type = menu.view; URL สตริงส่วนตัว สตริงสาธารณะ getType () {ประเภทกลับ; } โมฆะสาธารณะ setType (ประเภทสตริง) {this.type = type; } สตริงสาธารณะ getUrl () {return url; } โมฆะสาธารณะ setUrl (rl String) {this.url = url; -เมนูระดับแรกประกอบด้วยการห่อหุ้มของเมนูระดับที่สอง complexmenu.java
Public Class ComplexMenu ขยาย BasicButton {Private BasicButton [] sub_button; Public BasicButton [] getSub_button () {return sub_button; } โมฆะสาธารณะ setsub_button (BasicButton [] sub_button) {this.sub_button = sub_button; -2. บรรจุภัณฑ์ที่สมบูรณ์ประกอบเมนู
เมนูคงที่ส่วนตัว getMenu () {viewButton btn11 = ใหม่ viewButton (); btn11.setName ("ทดสอบ 11"); btn11.seturl ("http://www.qq.com"); clickbutton btn21 = new ClickButton (); btn21.setName ("ทดสอบ 21"); BTN21.SetKey ("21"); clickbutton btn22 = new ClickButton (); btn22.setName ("ทดสอบ 22"); BTN22.SetKey ("22"); // ระดับ 1 เมนู (ไม่มีเมนูรอง) ComplexMenu MainBtn1 = New ComplexMenu (); mainbtn1.setName ("ทดสอบ 1"); mainbtn1.setsub_button (ใหม่ BasicButton [] {btn11}); เมนู // ระดับ 1 (พร้อมเมนูรอง) ComplexMenu Mainbtn2 = New ComplexMenu (); mainbtn2.setName ("ทดสอบ 2"); Mainbtn2.setsub_button (ใหม่ BasicButton [] {btn21, btn22}); เมนูเมนู = เมนูใหม่ (); menu.setButton (ใหม่ BasicButton [] {MainBtn1, MainBtn2}); เมนูกลับ; -3. การสร้างเมนูที่กำหนดเอง
/ ** * สร้างเมนู * * @param เมนูเมนูรายการ * @param โทเค็นโทเค็นโทเค็น * @return {"errcode": 0, "errmsg": "ตกลง"} */ public resultState createMenu (เมนูเมนูสตริงโทเค็น) map.put ("access_token" โทเค็น); สตริง jSondata = jsonutil.tojson (เมนู) .toString (); สตริงผลลัพธ์ = httprequtil.httpsdefaultExecute (httprequtil.post_method, wechatconfig.menu_create_url, แผนที่, jsondata); return jsonutil.fromjson (ผลลัพธ์, resultstate.class); -4. คำถามของเมนูที่กำหนดเอง
อินสแตนซ์ที่ส่งคืน
สอดคล้องกันเพื่อสร้างอินเทอร์เฟซ JSON ที่ถูกต้องจะส่งคืนผลลัพธ์:
{"เมนู": {"ปุ่ม": [{"type": "คลิก", "ชื่อ": "เพลงวันนี้", "key": "v1001_today_music", "sub_button": []}, {"type": "คลิก", "ชื่อ": "ชื่อ": "เมนู", "sub_button": [{"ประเภท": "ดู", "ชื่อ": "ค้นหา", "url": "http://www.soso.com/", "sub_button": []}, {"type": "ดู", "ชื่อ": "วิดีโอ" "sub_button": []}, {"type": "คลิก", "ชื่อ": "Like us", "key": "v1001_good", "sub_button": []}]}]}}}}}}} / ** * รับเมนูที่กำหนดเอง * * token @param * @return */ สตริงสาธารณะ getMenu (โทเค็นสตริง) {treemap <สตริง, สตริง> map = ใหม่ treemap <สตริง, สตริง> (); map.put ("access_token" โทเค็น); สตริงผลลัพธ์ = httprequtil.httpsdefaultExecute (httprequtil.get_method, wechatconfig.menu_get_url, แผนที่, ""); ผลการกลับมา; -menuattr.java
/ ** * คุณสมบัติทั้งหมดของเมนู * @author Phil * */ เมนูระดับสาธารณะ Menuattr ขยาย BasicMenu {ประเภทสตริงส่วนตัว; URL สตริงส่วนตัว คีย์สตริงส่วนตัว สตริงส่วนตัว sub_button; Get/Set Method} คลาสเมนูที่ส่งคืน menureturn.java
/ ** * คลาสเมนูที่ส่งคืน * @author Phil * */ คลาสสาธารณะ Menureturn ขยาย BasicMenu {Menuattr ส่วนตัว [] sub_button; public menuattr [] getSub_button () {return sub_button; } โมฆะสาธารณะ setsub_button (menuattr [] subbutton) {sub_button = ปุ่มย่อย; -แปลงสตริงที่จัดรูปแบบ JSON เป็นวัตถุเมนู
/ ** * แปลงสตริงในรูปแบบ JSON เป็นวัตถุเมนู * @param json * @return */ รายการสาธารณะ <MenureTurn> ConvertMenu (String JSON) {รายการ <MenureTurn> รายการ = new ArrayList <MenureTurn> (); if (json! = null &&! "". เท่ากับ (json)) {jsonObject object = jsonObject.parseObject (json); jsonArray array = object.getJsonObject ("เมนู"). getjsonarray ("ปุ่ม"); สำหรับ (int i = 0; i <array.size (); i ++) {menureturn mr = menureturn ใหม่ (); MR = array.getObject (i, menureturn.class); list.add (MR); }} รายการส่งคืน; -หมายเหตุ: Fastjson ใช้ที่นี่
นี่คือวิธีการที่ต้องปรับปรุง โปรดให้คำแนะนำแก่ฉันหากคุณมีคนที่ดีกว่านี้
5. ลบเมนูที่กำหนดเอง
/ ** * ลบเมนูที่กำหนดเอง * * @param โทเค็น * @return */ บูลีนสาธารณะ deletemenu (โทเค็นสตริง) {Boolean falg = true; treemap <string, string> map = new treemap <string, string> (); map.put ("access_token" โทเค็น); สตริงผลลัพธ์ = httprequtil.httpsdefaultExecute (httprequtil.get_method, wechatconfig.menu_delte_url, แผนที่, ""); สถานะผลลัพธ์ = jsonutil.fromjson (ผลลัพธ์, resultState.class); if (state.getErcode ()! = 0 || state.getERRMSG ()! = "ตกลง") {false = false; } return false; -3. เหตุการณ์เมนูที่กำหนดเองพุช
หลังจากผู้ใช้คลิกที่เมนูที่กำหนดเอง WeChat จะส่งเหตุการณ์คลิกไปยังผู้พัฒนา โปรดทราบว่าเมนูคลิกจะปรากฏขึ้นเมนูย่อยและจะไม่สร้างรายงาน โปรดทราบว่าเหตุการณ์ทั้งหมดจากเหตุการณ์ที่สามถึงแปดรองรับผู้ใช้ WeChat ของ iPhone 5.4.1 หรือสูงกว่าและ Android 5.4 หรือสูงกว่า ผู้ใช้ WeChat เวอร์ชันเก่าจะไม่ตอบสนองหลังจากคลิกและนักพัฒนาไม่สามารถรับเหตุการณ์ได้ตามปกติ
1. วิเคราะห์แพ็กเก็ตข้อมูล XML ที่ผลักโดย WeChat
/*** การแยกวิเคราะห์คำขอจาก weChat (xml)* xml ตัวอย่าง* <xml> <tousername> <! [cdata [touser]]> </tousername> <fromusername> <! <msgtype> <! [cdata [event]]> </msgtype> <cent> <! [cdata [คลิก]]> </event> <eventkey> <! [cdata [eventkey]]> </eventkey> </xml> * @param request * @return {// จัดเก็บผลลัพธ์ที่แยกวิเคราะห์ในแผนที่ HashMap <String, String> MAP = ใหม่ HashMap <String, String> (); // รับสตรีมอินพุตจากคำขออินพุตอินพุทสตรีม = request.getInputStream (); // อ่านอินพุตสตรีม SaxReader reader = new SaxReader (); เอกสารเอกสาร = reader.read (inputStream); // รับองค์ประกอบองค์ประกอบรูท XML root = document.getRootElement (); // รับโหนดลูกทั้งหมดของรายการองค์ประกอบรูท <Element> ElementList = root.Elements (); // Traverse โหนดลูกทั้งหมดสำหรับ (องค์ประกอบ E: ElementList) MAP.PUT (E.GetName (), E.GetText ()); // ฟรี Resource InputStream.close (); inputStream = null; แผนที่กลับ; -2. ใช้ GET ของแผนที่ (คีย์) เพื่อรับค่า
ประเภทข้อความ msgtype เหตุการณ์เหตุการณ์
ประเภทเหตุการณ์เหตุการณ์คลิก
EventKey Event Key Value สอดคล้องกับค่าคีย์ในส่วนต่อประสานเมนูที่กำหนดเอง
หมายเหตุ: คีย์คือชื่อพารามิเตอร์
สิ่งที่แนบมา: wechatconfig.java
// สร้างเมนูสาธารณะสตริงสุดท้ายคงที่ menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create"; // สอบถามเมนูที่กำหนดเองสตริงสุดท้ายคงที่ menu_get_url = "https://api.weixin.qq.com/cgi-bin/menu/get"; // ลบเมนูที่กำหนดเองสตริงสุดท้ายคงที่ menu_delte_url = "https://api.weixin.qq.com/cgi-bin/menu/delete";
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น