1.メニューの説明とボタンの種類をカスタマイズします
1。メニューの説明
1)カスタムメニューには、最大3つの第1レベルのメニューが含まれ、各第1レベルのメニューには最大5つのセカンドレベルのメニューが含まれています。
2)第1レベルのメニューには最大4匹の漢字があり、セカンドレベルのメニューには最大7つの漢字があります。余分な部品は「...」に置き換えられます。
3)カスタムメニューを作成した後、メニューの更新戦略は、ユーザーが公式アカウントセッションページまたは公式アカウントプロファイルページを入力すると、メニューを引く最後のリクエストが5分前であることがわかった場合、メニューをプルすることです。メニューが更新されると、クライアントのメニューが更新されます。テスト中、パブリックアカウントを解除して再度フォローしようとすることができます。また、作成後に効果を確認できます。
2。カスタムメニューインターフェイスは、複数のタイプのボタンを実装できます
1)クリック:ユーザーが[タイプタイプ]ボタンをクリックすると、[プッシュイベント]をクリックすると、WeChatサーバーはメッセージインターフェイスを介してメッセージタイプイベントの構造を開発者にプッシュし(メッセージインターフェイスガイドを参照)、ボタン内の開発者が入力します。開発者は、カスタマイズされたキー値を介してユーザーと対話できます。
2)ビュー:ジャンプURLユーザーが[タイプタイプ]ボタンをクリックすると、WeChatクライアントが[ボタン内の開発者が入力したWebページのURLを開きます。これをWebページの承認と組み合わせて、ユーザーの基本情報インターフェイスを取得してユーザーの基本情報を取得します。
3)scancode_push:ユーザーがスキャンコードプッシュイベントのボタンをクリックすると、WeChatクライアントはスキャンツールを呼び出し、スキャンコード操作を完了した後にスキャン結果を表示します(URLの場合、URLを入力します)、スキャン結果は開発者に渡され、開発者はメッセージを送信できます。
4)scancode_waitmsg:イベントをプッシュするコードをスキャンし、「メッセージ受信」プロンプトボックスがポップアップします。ユーザーがボタンをクリックすると、WeChatクライアントがスキャンツールを呼び出します。スキャン操作を完了した後、スキャンコードの結果が開発者に渡されます。同時に、スキャンツールが閉じられ、「メッセージ受信」プロンプトボックスがポップアップし、開発者から送信されたメッセージが受信される場合があります。
5)pic_sysphoto:ユーザーがボタンをクリックすると、WeChatクライアントがシステムカメラを調整します。写真操作を完了した後、キャプチャされた写真が開発者に送信され、イベントを開発者にプッシュします。同時に、システムカメラは閉じられ、開発者から送信されたメッセージが受信される場合があります。
6)pic_photo_or_album:ユーザーがボタンをクリックすると、WeChatクライアントがセレクターをポップアップして、ユーザーが「写真を撮る」または「携帯電話アルバムから選択」を選択します。ユーザーが選択した後、彼は他の2つのプロセスを通過します。
7)pic_weixin:ユーザーがWeChatフォトアルバム送信者のボタンをクリックすると、WeChatクライアントはWeChatフォトアルバムを調整します。選択操作を完了すると、選択した写真が開発者のサーバーに送信され、イベントを開発者にプッシュします。同時に、アルバムは閉じられます。次に、開発者から送信されたメッセージが受信される場合があります。
8)location_select:ユーザーがボタンをクリックするとボタンをクリックすると、WeChatクライアントはジオロケーション選択ツールを呼び出します。選択操作を完了すると、選択した地理的位置が開発者のサーバーに送信され、位置選択ツールが閉じられます。次に、開発者から送信されたメッセージが受信される場合があります。
9)MEDIA_ID:ユーザーがMedia_IDタイプボタンをクリックすると、WeChatサーバーは、開発者が埋め尽くした永続的な素材IDに対応する素材をユーザーに送信します。永続的な素材の種類は、写真、オーディオ、ビデオ、グラフィックメッセージです。注:永久資料IDは、「材料管理/永続的な材料の追加」インターフェイスをアップロードした後に取得した法的IDでなければなりません。
10)view_limited:グラフィックメッセージURLをジャンプして、ユーザーがView_limitedタイプボタンをクリックすると、WeChatクライアントは、ボタンの開発者が埋める永続的なマテリアルIDに対応するグラフィックメッセージURLを開きます。永続的な材料タイプは、グラフィックメッセージのみをサポートします。注:永久資料IDは、「材料管理/永続的な材料の追加」インターフェイスをアップロードした後に取得した法的IDでなければなりません。
注:3〜8のすべてのイベントは、iPhone 5.4.1以降のWeChatユーザー、およびAndroid 5.4以降のみをサポートしています。 WeChatの古いバージョンのユーザーは、クリックした後に応答しません。開発者は正常にイベントのプッシュを受信できません。 9および10は、WeChatによって認定されていないサードパーティプラットフォームの下でサブスクリプションアカウント用に特別に準備されたイベントタイプです(特に、資格認証によって承認されていません)。イベントのプッシュがなく、能力は比較的限られています。他のタイプのパブリックアカウントを使用する必要はありません。
2。メニューを作成/クエリ/削除します
公式クリックしてイベントデモを表示します
{"button":[{"type": "click"、 "name": "Today's Song"、 "key": "v1001_today_music"}、{"name": "menu"、 "sub_button":[{"type": "view"、 "name": "search"、 "" "Type": "miniprogram"、 "name": "wxa"、 "url": "http://mp.weixin.qq.com"、 "appid": "wx286b93c14bbf93aa"、 "pagepath": "pages/lunar/index}、 "key": "v1001_good"}]}]}他のタイプ(9および10を含む)
{"button":[{"name": "scancode_waitmsg"、 "name": "scancode with prompt"、 "key": "selfmenu_0_0"、 "sub_button":[]}、{"type": "scancode_push"、 "name": "scancode_push"、 "" scancode _push ":" "" "" "" "" "" "" "" scancode_push "" "selfmenu_0_1"、 "sub_button":[]}]}、{"name": "picture"、 "sub_button":[{"type": "pic_sysphoto"、 "name": "system photos and" key ":" selfmenu_1_0 "、" sub_button ":" ":": "": ""タイプ ": 「pic_photo_or_album "、" name ":"写真やアルバムを撮影して写真を投稿して写真を投稿します "、" key ":" selfmenu_1_1 "、" sub_button ":[]}、{" type ":" pic_weixin "、" wechatアルバム写真と投稿写真 "]、" "" ""} {"name": "send location"、 "type": "location_select"、 "key": "selfmenu_2_0"}、{"type": "media_id"、 "name": "picture"、 "media_id": "media_id1"}、{"type": "view_limite1.例に従ってエンティティクラスのカプセル化を開始します
メニューボタンベースクラスBasicButton.java
パブリッククラスBasicButton {private String name; public string getName(){return name; } public void setName(string name){this.name = name; }}メニュー
パブリッククラスメニュー{public final static string click = "click"; // [メニュー]パブリック最終的な静的文字列ビュー= "View"をクリックします。 // urlメニューpublic final static string scancode_waitmsg = "scancode_waitmsg"; //コードをスキャンして、迅速なパブリックスタイト文字列scancode_push = "scancode_push"; //コードをスキャンしてイベントパブリック最終的な静的文字列pic_sysphoto = "pic_sysphoto"; //写真を撮って公開最終的な静的文字列pic_photo_or_album = "pic_photo_or_album"; //写真を撮るか、フォトアルバムパブリック最終的な静的文字列pic_weixin = "pic_weixin"; // WeChat Public Final Static String location_Select = "Location_Select"に写真を投稿します。 //場所をprivate BasicButton []ボタンを送信します。 public BasicButton [] getButton(){return button; } public void setButton(BasicButton [] button){this.button = button; }} [タイプ]ボタンクラスViewButton.java。これによれば、他のタイプは1つずつパッケージ化できます。
Public Class ViewButtonはBasicButton {private string type = menu.view;プライベート文字列URL; 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; }}第1レベルのメニューには、セカンドレベルのメニューcomplexmenu.javaのカプセル化が含まれています
Public Class ComplexMenuは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。パッケージを完成させ、メニューを組み立てます
private staticメニューgetMenu(){viewbutton btn11 = new ViewButton(); btn11.setname( "テスト11"); btn11.seturl( "http://www.qq.com"); clickbutton btn21 = new ClickButton(); btn21.setname( "テスト21"); btn21.setkey( "21"); clickbutton btn22 = new ClickButton(); btn22.setname( "テスト22"); btn22.setkey( "22"); //レベル1メニュー(セカンダリメニューなし)complexMenu mainbtn1 = new ComplexMenu(); mainbtn1.setname( "テスト1"); mainbtn1.setsub_button(new BasicButton [] {btn11}); //レベル1メニュー(セカンダリメニュー付き)complexMenu mainbtn2 = new ComplexMenu(); mainbtn2.setname( "テスト2"); mainbtn2.setsub_button(new BasicButton [] {btn21、btn22});メニューメニュー= new Menu(); menu.setbutton(new BasicButton [] {mainbtn1、mainbtn2});メニューを返します。 }3。カスタムメニューの作成
/ ** *作成されたメニュー * * @paramメニューメニュー項目 * @paramトークン認証token * @return {"errcode":0、 "errmsg"} */ public resultState createmenu(メニューメニュー、文字列>マップ=新しいtreemap <文字列、文字列>(); map.put( "Access_token"、token); string jsondata = jsonutil.tojson(メニュー).toString();文字列result = httprequtil.httpsDefaultExecute(httprequtil.post_method、wechatconfig.menu_create_url、map、jsondata); jsonutil.fromjson(result、resultstate.class)を返します。 }4。カスタムメニューのクエリ
返されたインスタンス
インターフェイスを作成するために対応すると、正しいJSONが結果を返します。
{"menu":{"button":[{"type": "click"、 "name": "Today's song"、 "key": "v1001_today_music"、 "sub_button":[]}、{"type": "click"、 "name": "singer profile"、 "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "name": "menu"、 "sub_button":[{"type": "view"、 "name": "search"、 "url": "http://www.soso.com/"、 "sub_button":[]}、{"type": "view"、 "name": "htp:" "sub_button":[]}、{"type": "click"、 "name": "like us"、 "key": "v1001_good"、 "sub_button":[]}]}}} / ** *カスタムメニューを取得 * * @param token * @return */ public string getmenu(string token){treemap <string、string> map = new treemap <string、string>(); map.put( "Access_token"、token); string result = httprequtil.httpsdefaultexecute(httprequtil.get_method、wechatconfig.menu_get_url、map、 "");返品結果; }menuattr.java
/ ** *メニューのすべてのプロパティ * @author phil * */ public class menuattr basicmenu {private string type;プライベート文字列URL;プライベート文字列キー。プライベートストリングsub_button;メソッドを取得/設定}返されたメニュークラスmenureturn.java
/ ** *返されたメニュークラス * @author phil * */ public class menureturnはbasicmenu {private menuattr [] sub_button; public menuattr [] getsub_button(){return sub_button; } public void setsub_button(menuattr [] subbutton){sub_button = subbutton; }}JSON形式の文字列をメニューオブジェクトに変換します
/ ** * json形式の文字列をメニューオブジェクトに変換 * @param json * @return */ public list <menureturn> convertmenu(string json){list <menureturn> list = new arraylist <menureturn>(); if(json!= null &&! ""。equals(json)){jsonobject object = jsonobject.parseobject(json); jsonarray array = object.getjsonobject( "メニュー")。getjsonarray( "button"); for(int i = 0; i <array.size(); i ++){menureturn mr = new menureturn(); mr = array.getObject(i、menureturn.class); list.add(MR); }} return list; }注: FastJsonはここで使用されています
改善する必要がある方法は次のとおりです。あなたがもっと良いものを持っているなら、私にいくつかのアドバイスをください
5.カスタムメニューを削除します
/ ** *削除カスタムメニュー * * @param token * @return */ public boolean deletemenu(string token){boolean falg = true; treemap <string、string> map = new treemap <string、string>(); map.put( "Access_token"、token);文字列result = httprequtil.httpsDefaultExecute(httprequtil.get_method、wechatconfig.menu_delte_url、map、 ""); resultState state = jsonutil.fromjson(result、resultState.class); if(state.geterrcode()!= 0 || state.geterrmsg()!= "ok"){false = false; } falseを返します。 }3.カスタムメニューイベントプッシュ
ユーザーがカスタムメニューをクリックすると、WeChatはクリックイベントを開発者にプッシュします。クリックメニューがサブメニューをポップアップし、レポートを生成しないことに注意してください。 3番目から8番目のイベントは、iPhone 5.4.1以降のWeChatユーザー、およびAndroid 5.4以降のWeChatユーザーをサポートすることに注意してください。 WeChatの古いバージョンのユーザーは、クリックした後に応答しません。開発者は正常にイベントのプッシュを受信できません。
1. WeChatによってプッシュされたXMLデータパケットを分析します
/*** wechat(xml)* xml exampleからの解析要求* <xml> <tousername> <![cdata [touser]]> </tousername> <fromusername> <! <msgtype> <![cdata [event]]> </msgtype> <event> <![cdata [click]> </event> <eventkey> <![cdata [eventkey]]> </eventkey> </xml> * @param request * @return * @return * @return * @return * //解析結果をHashmap Map <String、String> Map = new Hashmap <String、String>(); //リクエストから入力ストリームを取得しますinputstream inputstream = request.getInputStream(); //入力ストリームsaxreader reader = new saxreader()を読む; document document = reader.read(inputstream); // XMLルート要素を取得しますroot = document.getRootelement(); //ルート要素リストのすべての子ノードを取得<lement> elementList = root.Elements(); //(要素E:ElementList)Map.put(e.getName()、e.getText())のすべての子ノードをトラバースします。 //リソース入力stream.close()を無料で無料inputstream = null;マップを返します。 }
2。マップのGET(key)を使用して値を取得します
msgtypeメッセージタイプ、イベント
イベントイベントタイプ、クリックします
イベントキーイベントキー値は、カスタムメニューインターフェイスのキー値に対応しています
注:キーはパラメーター名です
添付ファイル:wechatconfig.java
//メニューの作成public static final string menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create"; //カスタムメニューのクエリpublic static final string menu_get_url = "https://api.weixin.qq.com/cgi-bin/menu/get"; //カスタムメニューの削除public static final string menu_delte_url = "https://api.weixin.qq.com/cgi-bin/menu/delete";
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。