>  기사  >  위챗 애플릿  >  WeChat 개발 사용자 정의 메뉴--weixin-java-tools

WeChat 개발 사용자 정의 메뉴--weixin-java-tools

高洛峰
高洛峰원래의
2017-03-08 16:46:101986검색

1. 서문

위챗을 개발하는 과정에서 위챗 관련 메뉴의 활용도를 꼭 디자인해보겠습니다. 이번에는 weixin-java-tools를 활용한 메뉴 관리 방법을 소개해드리겠습니다

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 사진 앨범 발신자가 팝업되고 사용자가 버튼을 클릭하면 WeChat 클라이언트가 선택 작업을 완료한 후 WeChat 사진 앨범을 불러옵니다. 개발자의 서버와 이벤트가 개발자에게 푸시되며, 동시에 사진 앨범을 닫고 나중에 개발자로부터 메시지를 받을 수 있습니다.

8. location_select: 사용자가 팝업 지리적 위치 선택기 버튼을 클릭하면 WeChat 클라이언트가 선택 작업을 완료한 후 지리적 위치 선택 도구를 호출합니다. 개발자의 서버로 전송되는 동시에 위치 선택 도구를 시작하면 개발자로부터 메시지를 받을 수 있습니다.

9. media_id: 메시지를 보냅니다(문자 메시지 제외). 사용자가 media_id 유형 버튼을 클릭하면 WeChat 서버는 개발자가 입력한 영구 자료 ID에 해당하는 자료를 사용자에게 보냅니다. 영구 자료 유형은 그림, 오디오, 비디오, 그래픽 메시지일 수 있습니다. 참고: 영구 자료 ID는 "재료 관리/영구 자료 추가" 인터페이스를 통해 업로드한 후 얻은 법적 ID여야 합니다.

10. view_limited: 사용자가 view_limited 유형 버튼을 클릭하면 WeChat 클라이언트는 개발자가 입력한 영구 자료 ID에 해당하는 이미지 및 문자 메시지 URL을 엽니다. 버튼에서 영구 재질 유형은 그래픽 메시지만 지원합니다. 참고: 영구 자료 ID는 "재료 관리/영구 자료 추가" 인터페이스를 통해 업로드한 후 얻은 법적 ID여야 합니다.

 3~8까지의 모든 이벤트는 WeChat iPhone 5.4.1 이상만 지원하며, Android 5.4 이상을 사용하는 WeChat 사용자는 클릭 후 응답하지 않습니다. . , 개발자는 이벤트 푸시를 정상적으로 수신할 수 없습니다. 9번과 10번은 위챗 인증을 받지 못한 제3자 플랫폼의 구독 계정(구체적으로 자격 인증을 통과하지 못한 계정)을 위해 특별히 준비한 이벤트 유형으로, 이벤트 푸시 기능이 없고 기능이 상대적으로 제한되어 있습니다. 다른 유형의 공개 계정을 사용할 필요가 없습니다.

3. 호출 인터페이스 주소: http 요청 방법: POST(https 프로토콜을 사용하세요) https://api.weixin.qq.com/ cgi-bin/menu/create?access_token=ACCESS_TOKEN

4. 요청 예시

{
     "button":[
     {	
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜单",
           "sub_button":[
           {	
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"视频",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }

5.

参数 是否必须 说明
button 一级菜单数组,个数应为1~3个
sub_button 二级菜单数组,个数应为1~5个
type 菜单的响应动作类型
name 菜单标题,不超过16个字节,子菜单不超过40个字节
key click等点击类型必须 菜单KEY值,用于消息接口推送,不超过128字节
url view类型必须 网页链接,用户点击菜单可打开链接,不超过1024字节
media_id media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id

 

 

 

 

 

 

 

 

 

 

 

 

六、代码实现:

  

package com.weixin.menu;

import java.util.ArrayList;
import java.util.List;

import me.chanjar.weixin.common.bean.WxMenu;
import me.chanjar.weixin.common.bean.WxMenu.WxMenuButton;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.WxMpServiceImpl;

public class WeixinMenuService {

	public static void main(String[] args) {
		
		//创建菜单
		//创建一级菜单
		WxMenuButton button1=new WxMenuButton();
		button1.setType("click"); //点击事件按钮
		button1.setName("点击菜单");
		button1.setKey("key1"); //根据标志获取点击菜单
		
		//创建一个复合菜单
		WxMenuButton button2=new WxMenuButton();
		button2.setName("多级菜单");
		
		WxMenuButton button2_1=new WxMenuButton();
		button2_1.setType("click"); //点击事件按钮
		button2_1.setName("子菜单一");
		button2_1.setKey("key2"); //根据标志获取点击菜单
		
		WxMenuButton button2_2=new WxMenuButton();
		button2_2.setType("click"); //点击事件按钮
		button2_2.setName("子菜单二");
		button2_2.setKey("key3"); //根据标志获取点击菜单
		
		
		WxMenuButton button3=new WxMenuButton();
		button3.setName("url菜单");
		button3.setType("view");
		button3.setUrl("http://www.baidu.com");  //必须添加http
		
		
		List<WxMenuButton> subButtons=new ArrayList<WxMenuButton>();
		subButtons.add(button2_1);
		subButtons.add(button2_2);
		button2.setSubButtons(subButtons);
		
		List<WxMenuButton> buttons=new ArrayList<WxMenuButton>();
		buttons.add(button1);
		buttons.add(button2);
		buttons.add(button3);
		
		WxMenu menu=new WxMenu();
		menu.setButtons(buttons);
		
		
		//发送请求 创建菜单
		WxMpService service=new WxMpServiceImpl();	
		WxMpInMemoryConfigStorage wxConfigProvider=new WxMpInMemoryConfigStorage();
		wxConfigProvider.setAppId("wx60a8f1c3a95b0b9c");
		wxConfigProvider.setSecret("5b0e8613b538da5ac4bbc610998f10ba");
		service.setWxMpConfigStorage(wxConfigProvider);
		try {
			service.menuCreate(menu);
		} catch (WxErrorException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


	}

}

七、点击菜单事件推送

  7.1 消息格式

  

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[EVENTKEY]]></EventKey>
</xml>

  

  7.2 参数说明

  

参数 描述
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 消息类型,event
Event 事件类型,CLICK
EventKey 事件KEY值,与自定义菜单接口中KEY值对应

  

 

 

 

 

 

 

  7.3 消息处理

  在接收消息的post中判断消息类型 并做相关处理。

//获取消息流
		WxMpXmlMessage message=WxMpXmlMessage.fromXml(request.getInputStream());
		
		if(message.getMsgType().equals("event")){ //事件
			
			//判断event
			if(message.getEvent().equals("click") && message.getEventKey().equals("key1")){
				//do something
				
			}
			
			
		}

  

위 내용은 WeChat 개발 사용자 정의 메뉴--weixin-java-tools의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.