1. Personalize a descrição do menu e o tipo de botão
1. Descrição do menu
1) Os menus personalizados incluem até 3 menus de primeiro nível, e cada menu de primeiro nível contém até 5 menus de segundo nível.
2) O menu de primeiro nível tem até 4 caracteres chineses, e o menu de segundo nível tem até 7 caracteres chineses. As partes extras serão substituídas por "...".
3) Depois de criar um menu personalizado, a estratégia de atualização do menu é que, quando o usuário insere a página de sessão oficial da conta ou a página de perfil oficial da conta, se ele achar que a última solicitação para puxar o menu foi há 5 minutos, ele puxará o menu. Se o menu for atualizado, o menu do cliente será atualizado. Durante o teste, você pode deixar de seguir a conta pública e segui -la novamente, e poderá ver o efeito após a criação.
2. A interface do menu personalizada pode implementar vários tipos de botões
1) Clique em: Depois que o usuário clicar no botão Digite de clique ao clicar no evento Push, o servidor WeChat empurrará a estrutura do evento de tipo de mensagem ao desenvolvedor através da interface da mensagem (consulte o guia da interface da mensagem) e traga o valor da chave preenchido pelo desenvolvedor no botão. O desenvolvedor pode interagir com o usuário através do valor da chave personalizado;
2) Visualizar: Jump URL depois que o usuário clicar no botão Visualizar tipo, o cliente WeChat abrirá o URL da página da web preenchido pelo desenvolvedor no botão, que pode ser combinado com a autorização da página da web para obter interface de informações básicas do usuário para obter informações básicas do usuário.
3) Scancode_push: Depois que o usuário clica no botão do evento Push Code Code, o cliente do WeChat chamará a ferramenta de varredura e exibirá o resultado da verificação depois de concluir a operação do código de varredura (se for um URL, ele entrará no URL) e o resultado da varredura será passado para o desenvolvedor e o desenvolvedor poderá enviar uma mensagem.
4) Scancode_waitmsg: Digitalize o código para pressionar o evento e a caixa de prompt "Mensagem Receber" aparece. Depois que o usuário clica no botão, o cliente WeChat chamará a ferramenta de digitalização. Depois de concluir a operação de varredura, o resultado do código de varredura é passado para o desenvolvedor. Ao mesmo tempo, a ferramenta de varredura está fechada e a caixa de prompt "Mensagem Receber" aparece e, em seguida, uma mensagem enviada pelo desenvolvedor pode ser recebida.
5) PIC_SYSPHOTO: Depois que o usuário clica no botão, o cliente WeChat ajustará a câmera do sistema. Depois de concluir a operação da foto, as fotos capturadas serão enviadas ao desenvolvedor e levarão o evento ao desenvolvedor. Ao mesmo tempo, a câmera do sistema será fechada e a mensagem enviada pelo desenvolvedor poderá ser recebida.
6) PIC_PHOTO_OR_ALBUM: Depois que o usuário clicar no botão, o cliente WeChat exibirá o seletor para o usuário selecionar "Take Photos" ou "Selecione FROM MOLEPELE POLELE". Depois que o usuário selecionar, ele passará pelos outros dois processos.
7) PIC_WEIXIN: Depois que o usuário clica no botão no remetente do álbum de fotos do WeChat, o cliente WeChat ajustará o álbum de fotos do WeChat. Depois de concluir a operação de seleção, a foto selecionada será enviada ao servidor do desenvolvedor e empurrará o evento para o desenvolvedor. Ao mesmo tempo, o álbum será fechado. Em seguida, a mensagem enviada pelo desenvolvedor pode ser recebida.
8) Location_Select: Depois que o usuário clica no botão quando o usuário clicar no botão, o cliente do WeChat chamará a ferramenta de seleção de geolocalização. Após concluir a operação de seleção, a localização geográfica selecionada será enviada ao servidor do desenvolvedor e a ferramenta de seleção de localização será fechada. Em seguida, a mensagem enviada pelo desenvolvedor pode ser recebida.
9) Media_Id: Depois que o usuário clica no botão Media_id Type, o servidor WeChat enviará o material correspondente ao ID do material permanente preenchido pelo desenvolvedor para o usuário. Os tipos de materiais permanentes podem ser imagens, áudio, vídeo e mensagens gráficas. Observação: o ID do material permanente deve ser o ID legal obtido após o upload da interface "Gerenciamento de material/Adicionar material permanente".
10) View_limited: salte o URL da mensagem gráfica depois que o usuário clica no botão View_limited Type, o cliente WeChat abrirá o URL da mensagem gráfica correspondente ao ID do material permanente preenchido pelo desenvolvedor no botão. O tipo de material permanente suporta apenas uma mensagem gráfica. Observação: o ID do material permanente deve ser o ID legal obtido após o upload da interface "Gerenciamento de material/Adicionar material permanente".
NOTA: Todos os eventos de 3 a 8 suportam apenas os usuários do WeChat do iPhone 5.4.1 ou acima e o Android 5.4 ou superior. Os usuários da versão antiga do WeChat não responderão após clicar, e os desenvolvedores não podem receber empurrões de eventos normalmente. 9 e 10 são tipos de eventos especialmente preparados para contas de assinatura em plataformas de terceiros que não foram certificadas pelo WeChat (especificamente, elas não são aprovadas pela certificação de qualificação). Eles não têm empurrão de evento e seus recursos são relativamente limitados. Outros tipos de contas públicas não precisam ser usadas.
2. Criar/consultar/excluir menus
Demoção oficial de clique e visualização do evento
{"Button": [{"Type": "Click", "Name": "Song de Today's Song", "Key": "V1001_Today_Music"}, {"Name": "Menu", "Sub_button": [{"Type": "View", "Nome": "Search", "Url": "Htp": [{"tipo": "View", "Nome": "", "Url": "Htp": [{"Type": "View", "Nome": "", "Url": "Htp "/ (" Type ":" View "," Nome ":" "," Url ":" Htp "/ {"Type": "," Nome ":" "," Url ":" Htp "/ {"" "Tipo": "Miniprograma", "Nome": "WXA", "URL": "http://mp.weixin.qq.com", "Appid": "WX286B93C14BBF93AA", "PagePath": "Pages/Lunar/Index"}, {"Type" "" "key": "v1001_good"}]}]}Outros tipos (incluindo 9 e 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": "send a picture", "sub_button": [ { "type": "pic_sysphoto", "name": "System photos and post pictures", "key": "selfmenu_1_0", "sub_button": [ ] }, { "type": "pic_photo_or_album", "nome": "tire fotos ou álbuns para postar fotos", "key": "selfmenu_1_1", "sub_button": []}, {"type": "pic_weixin", "name": "wechat fotos e post pós", "key" ":": "sloweixin", "name": "wechat fotos e post pictures", "key" ":": "Sellow", "sloweixin", "name": "wechat fotos e fotos", "key" ":": "Sellow", "sosftnununununu": "sospn1snun" "sunst:" Subtemon: "Subt. { "name": "send location", "type": "location_select", "key": "selfmenu_2_0" }, { "type": "media_id", "name": "picture", "media_id": "MEDIA_ID1" }, { "type": "view_limited", "name": "graphic message", "media_id": "MEDIA_ID2" } ] }1. Iniciar encapsulando a classe de entidade de acordo com o exemplo
Botão de menu Classe Base BasicButton.java
classe pública BasicButton {private String Name; public String getName () {Return Name; } public void setName (nome da string) {this.name = name; }} Menu.java
Menu da classe pública {public final static string click = "clique"; // Clique em Menu Public final Static String View = "View"; // menu url public final estático string scancode_waitmsg = "scancode_waitmsg"; // Digitalize o código para enviar um prompt Public final Static String scancode_push = "scancode_push"; // Digitalize o código para empurrar o evento Public Pictatic String Pic_sysphoto = "Pic_sysphoto"; // sistema para tirar fotos e publicar public final estático string pic_photo_or_album = "pic_photo_or_album"; // Tire uma foto ou publique um álbum de fotos public final static string pic_weixin = "pic_weixin"; // Publique uma foto no WeChat Public Final Static String Location_Select = "Location_Select"; // Envie o botão Private BasicButton []; public BasicButton [] getButton () {Botão de retorno; } public void setButton (botão BasicButton []) {this.Button = Button; }} Exibir o botão Tipo de botão ViewButton.java. Outros tipos podem ser embalados um por um de acordo com isso.
classe pública ViewButton estende o BasicButton {private string type = menu.View; URL privado de string; public String getType () {return type; } public void setType (string type) {this.type = type; } public string geturl () {return url; } public void Seturl (String url) {this.url = url; }}O menu de primeiro nível contém o encapsulamento do menu de segundo nível ComplexMenu.java
Public classe ComplexMenu estende o 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. Embalagem completa, monte o menu
Menu estático privado getMenu () {ViewButton btn11 = new ViewButton (); btn11.setName ("Teste 11"); btn11.seturl ("http://www.qq.com"); Clickbutton btn21 = new clickbutton (); BTN21.setName ("Teste 21"); BTN21.setKey ("21"); Clickbutton btn22 = new clickbutton (); BTN22.SetName ("Test 22"); BTN22.SetKey ("22"); // menu de nível 1 (sem menu secundário) complexmenu mainbtn1 = new complexmenu (); mainbtn1.setName ("Test 1"); MainBTN1.SetSub_Button (novo BasicButton [] {BTN11}); // menu de nível 1 (com menu secundário) complexmenu mainbtn2 = new complexmenu (); mainbtn2.setName ("Test 2"); MainBTN2.SetSub_Button (novo BasicButton [] {BTN21, BTN22}); Menu menu = novo menu (); MENU.SETBUTTON (novo BasicButton [] {Mainbtn1, Mainbtn2}); menu devolver; }3. Criação de menus personalizados
/ ** * Menu criado * * @Param Menu Item do menu * @param token Token de autorização * @return {"errcode": 0, "errmsg": "ok"} */ public ResultState CreateMenu (menu do menu, string token) {Treemap <string, string> map = new Treemap <string, string, (); map.put ("access_token", token); String jsondata = jsonutil.tojson (menu) .toString (); String resultado = httprequtil.httpsdefaultExecute (httprequtil.post_method, wechatconfig.menu_create_url, mapa, jsondata); return jsonutil.Fromjson (resultado, ResultState.class); }4. Consulta de menus personalizados
Instância retornada
Correspondente para criar uma interface, o JSON correto retorna o resultado:
{ "menu": { "button": [ { "type": "click", "name": "Today's Song", "key": "V1001_TODAY_MUSIC", "sub_button": [ ] }, { "type": "click", "name": "Singer Profile", "key": "V1001_TODAY_SINGER", "sub_button": [ ] }, { "name": "menu", "sub_button": [ { "type": "view", "name": "search", "url": "http://www.soso.com/", "sub_button": [ ] }, { "type": "view", "name": "video", "url": "http://v.qq.com/", "sub_button": []}, {"type": "clique", "nome": "como nós", "key": "v1001_good", "sub_button": []}]}]}} / ** * Obtenha menu personalizado * * @param token * @return */ public String getMenu (string token) {Treemap <string, string> map = new Treemap <string, string> (); map.put ("access_token", token); String resultado = httprequtil.httpsdefaultExecute (httprequtil.get_method, wechatconfig.menu_get_url, mapa, ""); resultado de retorno; }MenuAttr.java
/ ** * Todas as propriedades do menu * @author phil * */ public class menuAtTr estende Basicmenu {private string type; URL privado de string; chave de string privada; String privada Sub_button; Método Get/Set} A classe de menu retornada menureTurn.java
/ ** * Classe de menu retornada * @Author Phil * */ public classe MenureTurn estende Basicmenu {private menuAttr [] sub_button; public menuAttr [] getSub_button () {return sub_button; } public void setsub_button (menuAttr [] subbutão) {sub_button = subbutão; }}Converter strings formatados por JSON em objetos de menu
/ ** * Converta uma string no formato json em um objeto de menu * @param json * @return */ list public <MeneureTurn> convertmenu (String json) {list <MeneureTurn> list = new ArrayList <MenereTeturn> (); if (json! = null &&! "". Equals (json)) {JsonObject Object = jsonObject.parseObject (json); JsonArray Array = object.getjsonObject ("menu"). GetjsonArray ("botão"); for (int i = 0; i <Array.size (); i ++) {MenureTurn mr = new MenureTurn (); mr = array.getObject (i, menureTurn.class); list.add (MR); }} Lista de retorno; }Nota: Fastjson usado aqui
Aqui está um método que precisa ser melhorado. Por favor me dê alguns conselhos se você tiver algum melhor
5. Exclua o menu personalizado
/ ** * Exclua menu personalizado * * @param token * @return */ public boolean Deletemenu (token da string) {boolean falg = true; Treemap <String, String> map = novo Treemap <String, String> (); map.put ("access_token", token); String resultado = httprequtil.httpsdefaultExecute (httprequtil.get_method, wechatconfig.menu_delte_url, mapa, ""); ResultState state = jsonutil.Fromjson (resultado, ResultState.class); if (state.geterrcode ()! = 0 || state.geterrrsg ()! = "ok") {false = false; } retornar false; }3. Push de evento de menu personalizado
Depois que o usuário clica no menu personalizado, o WeChat empurrará o evento de clique no desenvolvedor. Observe que o menu de cliques aparece no submenu e não gera um relatório. Observe que todos os eventos do terceiro ao oitavo suportam apenas os usuários do WECHAT do iPhone 5.4.1 ou acima do Android 5.4 ou acima. Os usuários da versão antiga do WeChat não responderão após clicar, e os desenvolvedores não podem receber empurrões de eventos normalmente.
1. Analise o pacote de dados XML empurrado por WeChat
/*** Analisando solicitações de WeChat (xml)* xml Exemplo* <xml> <tousername> <! [CDATA [touser]]> </tousername> <nateName> <! [CDATA [FromUser]]> </username> <retTeTime> 12345798-1010 </senketMame> </sengeTime> <! <Sgtype> <! [CDATA [EVENT]]> </MSGTYPE> <Event> <! [CDATA [clique]]> </vention> <ventkey> <! [CDATA [EventKey]]> </EventKey> </xml> * @param request * @return * @Throws Exception */public STATY <Strat // armazenar o resultado analisado no hashmap mapa <string, string> map = new hashmap <string, string> (); // Obtenha o fluxo de entrada da solicitação inputStream inputStream = request.getInputStream (); // leia o leitor saxreader de fluxo de entrada = new saxReader (); Documento documento = leitor.read (inputStream); // obtenha o elemento raiz xml root = document.getrootelement (); // Obtenha todos os nós filhos da lista de elementos raiz <lement> elementList = root.Elements (); // atravessa todos os nós filhos para (elemento e: elementList) map.put (e.getName (), e.getText ()); // livre o recurso inputStream.close (); inputStream = nulo; mapa de retorno; }
2. Use a chave do mapa para obter valor
MSGTYPE TIPO DE MENSAGEM, EVENTO
Tipo de evento, clique
O valor da chave do evento EventKey corresponde ao valor da chave na interface do menu personalizado
Nota: a chave é o nome do parâmetro
Anexo: wechatconfig.java
// Crie um menu public static final string menus_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create"; // consulta o menu personalizado public static final string menus_get_url = "https://api.weixin.qq.com/cgi-bin/menu/get"; // exclua o menu personalizado public static final string menus_delte_url = "https://api.weixin.qq.com/cgi-bin/menu/delete";
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.