1. はじめに
通常、WeChat を開発する過程で、WeChat 関連のメニューの使用を設計します。今回は、weixin-java-tools を使用してメニューを管理する方法を紹介します
2.分類
1. クリック: クリックプッシュイベント ユーザーがクリックタイプボタンをクリックした後、WeChat サーバーはメッセージインターフェース (メッセージインターフェースガイドを参照) を通じてメッセージタイプイベント構造を開発者にプッシュし、キー値をもたらします。開発者がボタンに入力すると、開発者はカスタマイズされたキー値を通じてユーザーと対話できます
2. 表示: URL に移動 ユーザーが表示タイプ ボタンをクリックすると、WeChat クライアントは開発者が入力した Web ページ URL を開きます。ユーザーの基本情報を取得するためのインターフェイスを組み合わせることで、ユーザーの基本情報の取得を許可する Web ページと比較できるボタンに表示されます。
3. scancode_push: ユーザーがスキャン コード プッシュ イベントのボタンをクリックすると、WeChat クライアントはスキャン コード操作を完了した後、スキャン ツールをアクティブ化します (URL の場合は URL)。が入力されます)、スキャンされたコードは次のようになります。結果は開発者に渡され、開発者はメッセージを送信できます。
4. scancode_waitmsg: コードをスキャンしてイベントをプッシュし、「メッセージ受信」プロンプト ボックスをポップアップします。ユーザーがボタンをクリックすると、コード スキャン操作が完了すると、WeChat クライアントがスキャン ツールを起動します。コードスキャンが開発者に送信され、同時にスキャンツールをしまうと、「メッセージ受信中」プロンプトボックスが表示され、開発者からメッセージを受け取ることがあります。
5. pic_sysphoto: ユーザーがボタンをクリックすると、システムがポップアップし、写真操作が完了すると、撮影された写真が開発者に送信されます。イベントは開発者にプッシュされ、同時に閉じられます。その後、システム カメラは開発者からメッセージを受信する場合があります。
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 までのすべてのイベントは WeChat iPhone 5.4.1 以降、Android 5.4 以降のみをサポートしていることに注意してください。古いバージョンの WeChat ユーザーはクリックしても応答せず、開発者はイベント プッシュを正常に受信できません。 。 9 と 10 は、WeChat によって認定されていないサードパーティ プラットフォームのサブスクリプション アカウント (具体的には、資格認定に合格しなかったアカウント) のために特別に用意されたイベント タイプであり、イベント プッシュがなく、その機能は比較的限定されています。他の種類の公開アカウント 使用する必要はありません。
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" }] }] }
参数 | 是否必须 | 说明 |
---|---|---|
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 中国語 Web サイトの他の関連記事を参照してください。