1. Настройте описание меню и тип кнопки
1. Описание меню
1) Пользовательские меню включают до 3 меню первого уровня, и каждое меню первого уровня содержит до 5 меню второго уровня.
2) Меню первого уровня имеет до 4 китайских иероглифов, а меню второго уровня имеет до 7 китайских иероглиф. Дополнительные детали будут заменены на "...".
3) После создания пользовательского меню стратегия обновления меню заключается в том, что когда пользователь входит на официальную страницу сессии учетной записи или на официальной странице профиля учетной записи, если он обнаружит, что последний запрос на вытягивание меню составила 5 минут назад, он вытащит меню. Если меню обновлено, меню клиента будет обновлено. Во время теста вы можете попытаться отменить срок службы общественного счета и снова следовать за ним, и вы можете увидеть эффект после создания.
2. Индивидуальный интерфейс меню может реализовать несколько типов кнопок
1) Нажмите: после того, как пользователь нажимает кнопку «Тип щелчка при нажатии на событие push, сервер 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 появит селектор для пользователя, чтобы выбрать «Take Photo» или «Выберите из альбома мобильного телефона». После выбора пользователя он пройдет через два других процесса.
7) PIC_WEIXIN: После того, как пользователь нажимает кнопку на кнопке на фотоальбоме WeChat, клиент WeChat настраивает фотоальбом WeChat. После завершения операции выбора выбранная фотография будет отправлена на сервер разработчика и разместить событие разработчику. В то же время альбом будет закрыт. Затем может быть получено сообщение, отправленное разработчиком.
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": "click", "name": "сегодняшняя песня", "ключ": "v1001_today_music"}, {"name": "menu", "sub_button": [{"type": "View", "name": "search", "url": "http://ww.sosososos". «Тип»: «Минипрограмма», «Имя»: «WXA», «URL»: «http://mp.wexin.qq.com», «Appid»: «Wx286b93c14bbf93aa», «PagePath»: «Page/Lunar/Index»}, {»:« Нажмите »:« Нажмите »:« Нажмите »:« Нажмите »:« Нажмите »:« Наз »:« Наз »:« Наз »:»: «Наз. "Key": "v1001_good"}]}]}Другие типы (включая 9 и 10)
{ "button": [ { "name": "Scancode_waitmsg", "name": "Scancode with prompt", "key": "selfmenu_0_0", "sub_button": [ ] }, { "type": "scancode_push", "name": "Scancode_push", "name": "Scancode push event", "key": "Selfmenu_0_1", "sub_button": []}]}, {"name": "Отправить изображение", "sub_button": [{"type": "pic_sysphoto", "name": "Системные фотографии и фотографии", "ключ": "selfmenu_1_0", "sub_button": [], "", ",", ",", ",", ",", ",", "". «PIC_PHOTO_OR_ALBUM», «Имя»: «Сделайте фотографии или альбомы для публикации фотографий», «Key»: «Selfmenu_1_1», «sub_button»: []}, {«Тип»: «PIC_WEIXIN», «Имя»: «Wechat Album Photos и Post Pictures», «Key»: «Selfmen {"name": "Отправить местоположение", "type": "location_select", "key": "selfmenu_2_0"}, {"type": "media_id", "name": "picture", "media_id": "media_id1"}, {"type": "view_limited", "name": "graphibic": "Media_id"} "}"} "}"} "?1. Начните инкапсулировать класс сущностей в соответствии с примером
Меню кнопки базового класса Basicbutton.java
Public Class Basicbutton {Private String name; public String getName () {return name; } public void setName (string name) {this.name = name; }} Меню. Ява
Меню открытого класса {public final Static String click = "click"; // щелкните меню публичное окончательное статическое static view = "view"; // меню URL Public Final Static String Scancode_waitmsg = "scancode_waitmsg"; // сканировать код с помощью быстрого публичного окончательного статического строки scancode_push = "scancode_push"; // Сканируйте код, чтобы выдвинуть события публичной конечной статической строки pic_sysphoto = "pic_sysphoto"; // Система, чтобы сфотографироваться, и публиковать публичную окончательную статическую строку PIC_POTO_OR_ALBUM = "PIC_PHOTO_OR_ALBUM"; // Сделайте фото или опубликуйте фотоальбом Public Final Static String PIC_WEIXIN = "PIC_WEIXIN"; // опубликовать фото на WeChat Public Final Static String Location_select = "location_select"; // Отправить местоположение частной базовой кнопки [] []; public basicbutton [] getbutton () {return кнопка; } public void setButton (basicbutton [] кнопка) {this.button = button; }} Просмотр кнопки кнопки класса Viewbutton.java. Другие типы могут быть упакованы один за другим в соответствии с этим.
Public Class ViewButton расширяет BasicButton {Private String Type = menu.View; частная строковая URL; public String getType () {return Type; } public void settype (type string) {this.type = type; } public String getUrl () {return url; } public void seturl (string url) {this.url = url; }}Меню первого уровня содержит инкапсуляцию меню второго уровня.
Public Class Complexmenu расширяет Basicbutton {private Basicbutton [] sub_button; public basicbutton [] getsub_button () {return sub_button; } public void setsub_button (basicbutton [] sub_button) {this.sub_button = sub_button; }}2. Полная упаковка, соберите меню
частное статическое меню getMenu () {viewbutton btn11 = new ViewButton (); btn11.setname ("тест 11"); btn11.seturl ("http://www.qq.com"); Clickbutton btn21 = new Clickbutton (); btn21.setname ("test 21"); btn21.setkey ("21"); Clickbutton btn22 = new clickbutton (); btn22.setname ("тест 22"); btn22.setkey ("22"); // меню уровня 1 (без вторичного меню) ComplexMenu mainbtn1 = new Complexmenu (); mainbtn1.setname ("test 1"); mainbtn1.setsub_button (new basicbutton [] {btn11}); // меню 1 -го уровня (с вторичным меню) Complexmenu mainbtn2 = new Complexmenu (); mainbtn2.setname ("test 2"); mainbtn2.setsub_button (new basicbutton [] {btn21, btn22}); Меню меню = новое меню (); menu.setbutton (new basicbutton [] {mainbtn1, mainbtn2}); возвращение меню; }3. Создание пользовательских меню
/ ** * Создано меню * * @param Меню Меню. map.put ("access_token", token); String jsondata = jsonutil.tojson (меню) .toString (); String result = httprequtil.httpsdefaultexecute (httprequtil.post_method, wechatconfig.menu_create_url, map, jsondata); return jsonutil.fromjson (result, resultState.class); }4. Запрос пользовательских меню
Возвращенный экземпляр
Соответствует созданию интерфейса, правильный JSON возвращает результат:
{«Меню»: {«Кнопка»: [{"type": "click", "name": "сегодняшняя песня", "Key": "v1001_today_music", "sub_button": []}, {"type": "click", "name": «Профиль певца», «key»: «v1001_today_singer», «key»: «v1001_today_singer»: {"name": "Menu", "sub_button": [{"type": "view", "name": "search", "url": "http://www.soso.com/", "sub_button": []}, {"type": "view", "name": "video", "url": "http:"/qu ",", "name": ",", "," url ":" http: ". "sub_button": []}, {"type": "click", "name": "как мы", "ключ": "v1001_good", "sub_button": []}]}]}}}}}}}}}}}}}}}}}}}}}}} / ** * Получить пользовательское меню * * @param token * @return */ public String getMenu (string token) {treeMap <string, string> map = new treeMap <string, string> (); map.put ("access_token", token); String result = httprequtil.httpsdefaultexecute (httprequtil.get_method, wechatconfig.menu_get_url, map, ""); результат возврата; }Menuattr.java
/ ** * Все свойства меню * @author phil * */ public class menuattr Extens Basicmenu {private String type; частная строковая URL; частный ключ строки; Приватная строка sub_button; GET/SET Метод} Вернувшиеся меню класса MenureTurn.java
/ ** * Возвращенный класс меню * @author Phil * */ public class menureurn Extens Basicmenu {private menuattr [] sub_button; public menuattr [] getsub_button () {return sub_button; } public void setSub_button (menuattr [] subbutton) {sub_button = subbutton; }}Преобразовать строки, форматированные JSON, в объекты меню
/ ** * Преобразовать строку в формате JSON в объект меню * @param JSON * @return */ public list <menureTurn> ConvertMenu (String json) {list <menureTurn> list = new arraylist <menureTurn> (); if (json! = null &&! "". Equals (json)) {jsonObject object = jsonObject.parseObject (json); Jsonarray array = object.getjsonobject ("меню"). Getjsonarray ("button"); for (int i = 0; i <array.size (); i ++) {menureTurn mr = new menureTurn (); mr = array.getObject (i, menureTurn.class); list.add (mr); }} return List; }Примечание: Fastjson использовал здесь
Вот метод, который необходимо улучшить. Пожалуйста, дайте мне несколько советов, если у вас есть лучшие
5. Удалить пользовательское меню
/ ** * Удалить пользовательское меню * * @param token * @return */ public boolean deletemenu (token string) {boolean falg = true; TreeMap <String, String> Map = New TreeMap <String, String> (); map.put ("access_token", token); String result = httprequtil.httpsdefaultexecute (httprequtil.get_method, wechatconfig.menu_delte_url, map, ""); ResultState State = jsonutil.fromjson (result, resultState.class); if (state.geterrcode ()! = 0 || state.geterrmsg ()! = "ok") {false = false; } вернуть false; }3. Пользовательский меню толчок
После того, как пользователь нажимает на пользовательское меню, WeChat подтолкнет событие Click для разработчика. Обратите внимание, что меню щелчка появляется в подменю и не будет генерировать отчет. Обратите внимание, что все события от третьего до восьмого только поддерживают пользователей WeChat на iPhone 5.4.1 или выше, а также Android 5.4 или выше. Пользователи старой версии WeChat не отвечают после щелчка, и разработчики не могут получать события нормально.
1. Проанализируйте пакет данных XML, нажатый WeChat
/*** Запросы на анализ от weChat (xml)* xml Пример* <xml> <tousername> <! [Cdata [touser]]]> </tousername> <facusername> <! [Cdata [fromUser]]> </fromusername> <Совершенство> 123456789 </createtime <ssgtype> <! [Cdata [event]]>> </msgtype> <coment> <! [Cdata [click]]> </event> <eventkeeke> <! [Cdata [evenceKey]]] </eventKey> </xml> * @param Question * @return * @throws excection */public static <string> parsexmlpsmerv) // Храните анализовый результат в HashMap Map <String, String> Map = new HashMap <String, String> (); // Получить поток ввода из запроса inputStream inputStream = request.getInputStream (); // Читать входной поток SaxReader Reader = new SaxReader (); Document Document = reader.read (inputStream); // Получить элемент элемента xml root root = document.getRootelement (); // Получить все дочерние узлы списка элементов корневых элементов <element> elementlist = root.elements (); // Переносить все дочерние узлы для (элемент e: elementlist) map.put (e.getName (), e.getText ()); // бесплатно ресурс inputstream.close (); inputStream = null; карта возврата; }
2. Используйте карту get (ключ), чтобы получить значение
Тип сообщения MSGTYPE, событие
Тип события, нажмите
Значение ключа событий EventKey соответствует значению ключа в интерфейсе пользовательского меню
Примечание: ключ - это имя параметра
Приложение: WeChatConfig.java
// Создать меню Public Static Final String Menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create"; // Запросить пользовательское меню Public Static Final String Menu_get_url = "https://api.weixin.qq.com/cgi-bin/menu/get"; // Удалить пользовательское меню public static final String menu_delte_url = "https://api.weixin.qq.com/cgi-bin/menu/delete";
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.