ホームページ  >  記事  >  WeChat アプレット  >  WeChatパーソナライズメニュー開発モデルの詳細説明

WeChatパーソナライズメニュー開発モデルの詳細説明

高洛峰
高洛峰オリジナル
2017-03-22 16:15:061434ブラウズ

ここ 1 週間、WeChat のカスタム メニューの開発に取り組んできました。全体的にはかなり憂鬱です。

まず、いくつかのインターフェイスを分析しましょう:

1: クエリ インターフェイス; クエリ インターフェイスは 2 つに分かれており、1 つは開発モードの通常のクエリ インターフェイスで、カスタマイズしたインターフェイスを追加することで作成したメニューとパーソナリティのみをクエリします。メニュー (公式アカウントのさまざまなユーザー グループがさまざまなカスタマイズされたメニューを表示できるようにします) を利用できますが、WeChat 管理プラットフォームを通じて追加したメニューを取得することはできません。すべてのメニューをクエリできるインターフェイスもあります。このインターフェイスは、最初にメニューをプラットフォームに追加してから、バックグラウンドでこのインターフェイスを呼び出すと、メニューを取得できますが、これを呼び出すことで JSON が返されます。追加時とインターフェースが異なります(つまり、WeChat にそのまま JSON に送り返すとメニューを作成できません)。WeChat プラットフォームにはさまざまな種類のメニューが追加されており、それぞれが異なります。返されるjsonの種類 形式がバラバラで解析するのが非常に面倒なので、開発者モードを選択している以上は通常のクエリインターフェースを使用した方が良いと個人的には思います。

2: インターフェイスの作成; このインターフェイスの機能は、名前が示すように、インターフェイスを作成することですが、このインターフェイスは元のベースで作成されるのではなく、呼び出されるたびにすべてのメニューを再作成します。残すべきメニューは固定形式のjsonに加工してWeChatに送信するので、個別に削除したい場合は削除したいメニューを削除して残りをjsonに変更するのも同様です。データが置き換えられ、メニュー全体が json に変換されて WeChat に送信されます。

3: インターフェイスの削除; このインターフェイスはすべてのメニューを削除するために使用されますが、呼び出し後はすぐに反映されないようですが、その間もクエリを実行できます。以前に作成したメニュー。

私のタスクは、メニューの追加、削除、変更、クエリをバックエンド管理に統合することです。ここでは、WeChat インターフェイスへのリクエストが JSON 文字列を返す方法についてのみ説明します。この文字列を解析し、特定のルールに従ってオブジェクトに書き込み、リストに追加、削除、または変更するときにリストを操作し、リストを WeChat で必要な形式の JSON に変換します。 WeChat インターフェイスを呼び出してメニューを作成します (追加、削除、または変更)。作成インターフェイスを呼び出します)。オブジェクト部分の属性は id (操作しやすいようにリストの添字を id に設定します)、name (メニュー名)、type (メニューの種類、WeChat カスタム メニューは 10 種類あります)、parent (親メニュー名) です。 、SecendLvMenu (セカンダリメニューの数)、url (リンクメニューに必要)、key (プッシュ関数の呼び出し)、mediaid (素材呼び出し時に

madia_id を設定する必要があります)、sort (ソート番号)。

以下は json を list に変換するコードです。ここでの json パッケージは Alibaba の fastjson パッケージで、とても使いやすいです。 =new ArrayList< weixinMenu>();

obj=obj.getJSONObject("menu");

JSONObject a=new JSONObject();

int num=0;

if(obj!=null){

//ボタンのjson配列を取得します

JSONArray array=obj.getJSONArray("button");

if(array!=null){

for(int i=0;i

a=array.getJSONObject(i);

//型の説明がない場合は、第 2 レベルのメニュー型を持つ第 1 レベルのメニューです

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

weixinMenu menu=new weixinMenu ();

menu.setId(num);

menu.setSort(num);

num++;

menu.setName(a.getString("name"));//添え字を設定し、ソート番号のストレージを設定 リストを入力

//第 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{//それ以外の場合は、第 1 レベルです第 2 レベルのメニューのないメニューをクリックして直接ジャンプするか、対応するイベントをトリガーします

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);

}

}

}

}

return menulist;

}

次に、リストを weixinJson に変換します。WeChat の JSON をアップロードするには、ボタン部分のみが必要です:

public static JSONObject listToWxJson(List list){

JSONArray array=new JSONArray() ;

weixinMenu menu=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){

Mapmap=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){親メニューがない場合は、第 2 レベルのメニューがあります

JSONObject obj =new JSONObject();

JSONArray sub =new JSONArray();

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

weixinMenu submenu=new weixinMenu();

//ループしますリスト全体を使用し、名前一致を使用して第 1 レベルのメニューを検索します。 セカンダリ メニュー

for(int j=0;j

submenu=list.get(j);

Map

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

map=new HashMap();

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 );

}

}

Mapmap=new HashMap();

map.put("button", array);

//最後にマップを直接jsonに変換します

return (JSONObject)JSONObject.toJSON(map);

}

このセットは基本的に修正されており、WeChatメニューはから戻った後にリストに解析できます。 WeChat メニューの操作が完了したら、json を変換し、その後の操作がはるかに簡単になります。

以上がWeChatパーソナライズメニュー開発モデルの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。