>  기사  >  위챗 애플릿  >  WeChat 개인화 메뉴 개발 모델에 대한 자세한 설명

WeChat 개인화 메뉴 개발 모델에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-03-22 16:15:061435검색

지난주에 위챗 맞춤 메뉴 개발 작업을 진행했는데 전체적으로 우울하네요.

먼저 몇 가지 인터페이스를 분석해 보겠습니다.

1: 쿼리 인터페이스는 두 개로 나뉘며, 하나는 개발 모드의 일반 쿼리 인터페이스로, 전달한 내용만 쿼리합니다. 인터페이스로 생성된 메뉴와 개인화된 메뉴(공식 계정의 다양한 사용자 그룹이 서로 다른 맞춤형 메뉴를 볼 수 있도록 허용), 그러나 WeChat 관리 플랫폼을 통해 추가한 메뉴는 얻을 수 없습니다. 모든 메뉴를 조회할 수 있는 인터페이스도 있는데 이 인터페이스는 플랫폼에 먼저 메뉴를 추가한 다음 백그라운드에서 이 인터페이스를 호출하면 메뉴를 가져올 수 있지만 이를 호출하면 json이 반환됩니다. 추가할 때와 인터페이스가 다릅니다. 형식이 다르고(즉, 그대로 json으로 다시 보내고 위챗으로 보내서 메뉴를 생성하면 생성할 수 없습니다.) 메뉴도 종류가 많습니다. WeChat 플랫폼에 추가되고 반환되는 json의 유형마다 형식이 모두 다르고 파싱하기가 매우 번거롭기 때문에 개인적으로 개발자 모드를 선택했기 때문에 일반 쿼리 인터페이스를 사용하는 것이 더 좋다고 생각합니다.

2: 인터페이스 생성; 이름에서 알 수 있듯이 이 인터페이스의 기능은 인터페이스를 생성하는 것이지만 이 인터페이스는 원래 기반으로 생성되지 않고 매번 모든 메뉴를 다시 생성합니다. 나머지 메뉴는 고정형식의 json으로 처리한 후 위챗으로 전송하기 때문에, 개별적으로 삭제하고 싶다면 삭제하고 싶은 메뉴를 삭제하고 나머지는 json으로 변경하면 됩니다. 수정하려는 경우에도 마찬가지입니다. 변경해야 하는 데이터를 교체한 다음 전체 메뉴를 json으로 변환하여 WeChat으로 보냅니다.

3: 삭제 인터페이스; 이 인터페이스는 모든 메뉴를 삭제하는 데 사용되지만, 호출한 후에는 다음 날까지 효과를 볼 수 없는 것 같고, 이 시간 동안에는 효과가 나타나지 않습니다. 당신은 여전히 ​​이전에 생성한 메뉴를 쿼리할 수 있습니다.

내 임무는 메뉴의 추가, 삭제, 수정 및 쿼리를 백엔드 관리에 통합하는 것입니다. 여기서는 WeChat 인터페이스에 대한 요청이 json을 반환하는 방법에 대해서만 설명하겠습니다. 내 접근 방식은 이 문자열을 구문 분석하고 특정 규칙에 따라 개체에 작성한 후 목록에 추가하고, 삭제하거나 수정할 때 목록을 WeChat에서 요구하는 형식으로 다시 json으로 변환하는 것입니다. 메뉴를 생성하려면 WeChat 인터페이스를 호출하세요. (추가, 삭제, 수정을 위해서는 생성 인터페이스가 호출됩니다.) 객체 부분의 내 속성은 id(쉬운 작업을 위해 목록의 아래 첨자를 id로 설정), name(메뉴 이름), type(메뉴 유형, WeChat 사용자 정의 메뉴가 10가지 유형이 있습니다), parent(상위 메뉴 이름)입니다. , SecendLvMenu(보조 메뉴 개수), url(링크 메뉴에 필요), key(푸시 기능 호출), mediaid(

자료 호출 시 madia_id를 설정해야 함), sort(정렬 번호).

다음은 json을 목록으로 변환하는 코드입니다. 여기의 json 패키지는 사용하기 매우 쉬운 Alibaba의 fastjson 패키지입니다.

public static List {

목록 menulist=new ArrayList();

obj=obj.getJSONObject("menu");

JSONObject a=new JSONObject( );

int num=0;

if(obj!=null){

//버튼의 json 배열 가져오기

JSONArray array= obj.getJSONArray(" 버튼");

if(array!=null){

for(int i=0;i

a= array.getJSONObject(i);

//유형 설명 없음은 2차 메뉴 유형이 있는 1차 메뉴입니다

if(a.get("type ")==null){

weixinMenu 메뉴=new weixinMenu();

menu.setId(num);

menu.setSort(num);

num++;

menu.setName(a.getString("name"));//아래 첨자를 설정하고 정렬 번호를 설정하여 목록에 저장합니다

//Get 1차 메뉴 아래 2차 메뉴

JSONArray sub=a.getJSONArray("sub_button");

//2차 메뉴 개수는 상한이므로. 5이면 숫자를 추가하면 판단하기 쉽습니다

menu.setSecendLvMenuNum(sub.size());

menulist.add(menu);

JSONObject b =new JSONObject();

for(int j =0;j

weixinMenu menu2=new weixinMenu();

b=sub.getJSONObject(j);

menu2 .setId(num);

menu2.setSort(num);

num++;

menu2 .setName(b.getString("name"));

menu2.setParent(a.getString("name"));//상위 메뉴는 지금 막 1단계 메뉴의 이름입니다

menu2.setType(b.getString("type"));

menu2.setUrl(b.getString("url"));

menu2.setKey(b .getString("key"));

menu2.setMediaId(b .getString("media_id"));

menulist.add(menu2);

}

}else{//그렇지 않으면 2차 메뉴가 없는 1차 메뉴입니다. 클릭하여 직접 점프하거나 해당 이벤트를 트리거하세요

weixinMenu menu=new weixinMenu();

menu.setId(num);

menu.setSort(num);

num++;

menu.setName(a.getString("name") );

menu.setParent(null);

menu.setSecendLvMenuNum( 0);

menu.setType(a.getString("type"));

menu.setUrl(a.getString("url"));

menu.setKey(a.getString("key"));

menu.setMediaId(a.getString("media_id"));

menulist.add(menu);

}

}

}

}

메뉴 목록 반환;

}

그런 다음 목록을 weixinJson으로 변환합니다. WeChat의 json을 업로드하려면 버튼 부분만 필요합니다.

public static JSONObject listToWxJson(List list){

JSONArray array=new JSONArray();

weixinMenu 메뉴=new weixinMenu();

int size=list.size();

for(int i=0;i

menu=list.get(i);

//2차 메뉴도 없고 상위 메뉴도 없으면 2차 유형의 1차 메뉴도 없습니다

if (menu.getSecendLvMenuNum( )==0&&menu.getParent()==null){

Map map=new HashMap();

map. put("name" , menu.getName());

map.put("type", menu.getType());

if(menu.getUrl()!=null ){

map.put("url", menu.getUrl());

}

if(menu.getKey()!=null){

map .put("key", menu.getKey());

}

if(menu.getMediaId()!=null){

map.put(" media_id", menu.getMediaId());

}

array.add(map);

}else if(menu.getParent() ==null){ 상위 항목이 없는 메뉴는 두 번째 레벨이 있는 첫 번째 레벨 메뉴입니다.

JSONObject obj=new JSONObject();

JSONArray sub=new JSONArray();

obj.put( "name",menu.getName());

weixinMenu submenu=new weixinMenu();

//전체 목록을 반복하고 이름 일치 사용 첫 번째 수준 메뉴에서 두 번째 수준 메뉴를 찾으려면

for(int j=0;j

submenu=list.get(j);

Map map=null ;

if((menu.getName()).equals(submenu.getParent())){

map=new HashMap< ;String, Object>();

map.put("name", submenu.getName());

map.put("type", submenu.getType());

if(submenu.getUrl() !=null){

map.put("url", submenu.getUrl());

}

if(submenu.getKey()!=null) {

map.put("key", submenu.getKey());

}

if( submenu.getMediaId()!=null){

map.put("media_id", submenu.getMediaId());

}

sub.add(map) ;

}

}

obj.put("sub_button",sub);

array.add(obj);

}

}

Map map=new HashMap();

map.put("button",array);

//마지막으로 지도를 json으로 직접 변환

return (JSONObject)JSONObject.toJSON(map);

}

이 세트는 기본적으로 고정되어 있습니다. , WeChat 메뉴를 목록으로 구문 분석할 수 있습니다. 작업이 완료된 후 json을 변환하면 후속 작업이 훨씬 쉬워집니다.

위 내용은 WeChat 개인화 메뉴 개발 모델에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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