ホームページ > 記事 > WeChat アプレット > WeChatパーソナライズメニュー開発モデルの詳細説明
ここ 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 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){ Map 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 ); } } Map map.put("button", array); //最後にマップを直接jsonに変換します return (JSONObject)JSONObject.toJSON(map); } このセットは基本的に修正されており、WeChatメニューはから戻った後にリストに解析できます。 WeChat メニューの操作が完了したら、json を変換し、その後の操作がはるかに簡単になります。 以上がWeChatパーソナライズメニュー開発モデルの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。