鍍金池/ 教程/ Java/ Java 微信公眾平臺(tái)開(kāi)發(fā)(十)--微信自定義菜單的創(chuàng)建實(shí)現(xiàn)
Java 微信公眾平臺(tái)開(kāi)發(fā)(八)--多媒體消息回復(fù)
Java 微信公眾平臺(tái)開(kāi)發(fā)(四)--回復(fù)消息的分類(lèi)及實(shí)體的創(chuàng)建
Mybatis 工具 Generator
Java 微信公眾平臺(tái)開(kāi)發(fā)(十一)--開(kāi)發(fā)中微信公眾平臺(tái)/開(kāi)放平臺(tái)/商戶平臺(tái)的關(guān)聯(lián)
微信開(kāi)發(fā)準(zhǔn)備(二)--springmvc+mybatis 項(xiàng)目結(jié)構(gòu)的搭建
 Java 微信公眾平臺(tái)開(kāi)發(fā)(十二)--微信用戶信息的獲取
Java 微信公眾平臺(tái)開(kāi)發(fā)(十五)--微信 JSSDK 的使用
微信開(kāi)發(fā)準(zhǔn)備(三)--框架以及工具的基本使用
Java 微信公眾平臺(tái)開(kāi)發(fā)(十三)--微信 JSSDK 中 Config 配置
Java 微信公眾平臺(tái)開(kāi)發(fā)(一)--接入微信公眾平臺(tái)
Java 微信公眾平臺(tái)開(kāi)發(fā)(十四)【番外篇】--微信 web 開(kāi)發(fā)者工具使用
Java 微信公眾平臺(tái)開(kāi)發(fā)【番外篇】(七)--公眾平臺(tái)測(cè)試帳號(hào)的申請(qǐng)
微信開(kāi)發(fā)準(zhǔn)備(一)--Maven 倉(cāng)庫(kù)管理新建 WEB 項(xiàng)目
Java 微信公眾平臺(tái)開(kāi)發(fā)(三)--接收消息的分類(lèi)及實(shí)體的創(chuàng)建
Java 微信公眾平臺(tái)開(kāi)發(fā)(九)--關(guān)鍵字回復(fù)以及客服接口實(shí)現(xiàn)(該公眾號(hào)暫時(shí)無(wú)法提供服務(wù)解決方案)
微信開(kāi)發(fā)準(zhǔn)備(四)--nat123 內(nèi)網(wǎng)地址公網(wǎng)映射實(shí)現(xiàn)
Java 微信公眾平臺(tái)開(kāi)發(fā)(五)--文本及圖文消息回復(fù)的實(shí)現(xiàn)
Java 微信公眾平臺(tái)開(kāi)發(fā)(十)--微信自定義菜單的創(chuàng)建實(shí)現(xiàn)
Java 微信公眾平臺(tái)開(kāi)發(fā)(六)--微信開(kāi)發(fā)中的 token 獲取
Java 微信公眾平臺(tái)開(kāi)發(fā)(二)--微信服務(wù)器 post 消息體的接收

Java 微信公眾平臺(tái)開(kāi)發(fā)(十)--微信自定義菜單的創(chuàng)建實(shí)現(xiàn)

自定義菜單這個(gè)功能在我們普通的編輯模式下是可以直接在后臺(tái)編輯的,但是一旦我們進(jìn)入開(kāi)發(fā)模式之后我們的自定義菜單就需要自己用代碼實(shí)現(xiàn),所以對(duì)于剛開(kāi)始接觸的人來(lái)說(shuō)可能存在一定的疑惑,這里我說(shuō)下平時(shí)我們?cè)陂_(kāi)發(fā)模式下常用的兩種自定義菜單的實(shí)現(xiàn)方式:①不用寫(xiě)實(shí)現(xiàn)代碼,直接用網(wǎng)頁(yè)測(cè)試工具 Post json 字符串生成菜單;②就是在我們的開(kāi)發(fā)中用代碼實(shí)現(xiàn)菜單生成!(參考文檔:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html )在自定義菜單中菜單的類(lèi)型分為兩種,一種為 view 的視圖菜單,點(diǎn)擊之后直接跳轉(zhuǎn)到 url 頁(yè)面;還有一種是 click 類(lèi)型的點(diǎn)擊型,后端通過(guò)點(diǎn)擊事件類(lèi)型給與不同的相應(yīng);后面新增了各種特色功能的菜單其本質(zhì)都還是 Click 類(lèi)型的菜單,所以生成的規(guī)則都是一樣的,其生成菜單的方式都是向微信服務(wù)器 post json 字符串生成菜單,下面講述菜單生成的方法和規(guī)則!

(一)使用網(wǎng)頁(yè)調(diào)試工具生成菜單

我們通過(guò)連接(https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95&form=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3%20/menu/create)進(jìn)入到網(wǎng)頁(yè)調(diào)試工具,如下圖

http://wiki.jikexueyuan.com/project/java-wechat/images/33.png" alt="" />

在這里我們生成菜單的時(shí)候只需要我們賬號(hào)的有效 token 和 json 字符串即可,這里的 json 字符串可以參照文檔中的案例做出修改得到,我這里給出的一個(gè)案例如下:

{
    "button": [
        {
            "name": "博客", 
            "type": "view", 
            "url": "http://www.cuiyongzhi.com"
        }, 
        {
            "name": "菜單", 
            "sub_button": [
                {
                    "key": "text", 
                    "name": "回復(fù)圖文", 
                    "type": "click"
                }, 
                {
                    "name": "博客", 
                    "type": "view", 
                    "url": "http://www.cuiyongzhi.com"
                }
            ]
        }, 
        {
            "key": "text", 
            "name": "回復(fù)圖文", 
            "type": "click"
        }
    ]
}

我們填入響應(yīng)的 token,點(diǎn)擊檢查問(wèn)題如果返回結(jié)果 Ok 就可以了,如下:

http://wiki.jikexueyuan.com/project/java-wechat/images/34.png" alt="" />

到這里我們采用 web 測(cè)試工具生成菜單的方式就完成了,下面接著介紹用代碼生成菜單!

(二)采用代碼實(shí)現(xiàn)菜單的生成

前面我們有說(shuō)道在菜單中有 view 和 click 兩種類(lèi)型的事件,這里我們首先在代碼中建立兩種類(lèi)型對(duì)應(yīng)的 java 實(shí)體,view 類(lèi)型建立實(shí)體 ViewButton.java 如下:

package com.cuiyongzhi.wechat.menu;

/**
 * ClassName: ViewButton
 * @Description: 視圖型菜單事件
 * @author dapengniao
 * @date 2016 年 3 月 14 日 下午 5:31:38
 */
public class ViewButton {
    private String type;
    private String name;
    private String url;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

}

同樣的建立 click 的實(shí)體 ClickButton.java 如下:


/**
 * ClassName: ClickButton
 * @Description: 點(diǎn)擊型菜單事件
 * @author dapengniao
 * @date 2016 年 3 月 14 日 下午 5:31:50
 */
public class ClickButton {
    private String type;
    private String name;
    private String key;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

}

這里創(chuàng)建兩個(gè)實(shí)體也是為了方便我們?cè)谧远x菜單中對(duì) json 的封裝,在這里我用代碼的形式封裝了上面給出的同樣的 json 格式,并調(diào)用生成自定義菜單的接口發(fā)送到微信服務(wù)器,簡(jiǎn)單代碼如下:

package com.cuiyongzhi.wechat.menu;

import com.alibaba.fastjson.JSONObject;
import com.cuiyongzhi.wechat.util.HttpUtils;

import net.sf.json.JSONArray;

public class MenuMain {

    public static void main(String[] args) {

        ClickButton cbt=new ClickButton();
        cbt.setKey("image");
        cbt.setName("回復(fù)圖片");
        cbt.setType("click");

        ViewButton vbt=new ViewButton();
        vbt.setUrl("http://www.cuiyongzhi.com");
        vbt.setName("博客");
        vbt.setType("view");

        JSONArray sub_button=new JSONArray();
        sub_button.add(cbt);
        sub_button.add(vbt);

        JSONObject buttonOne=new JSONObject();
        buttonOne.put("name", "菜單");
        buttonOne.put("sub_button", sub_button);

        JSONArray button=new JSONArray();
        button.add(vbt);
        button.add(buttonOne);
        button.add(cbt);

        JSONObject menujson=new JSONObject();
        menujson.put("button", button);
        System.out.println(menujson);
        //這里為請(qǐng)求接口的 url   +號(hào)后面的是 token,這里就不做過(guò)多對(duì) token 獲取的方法解釋
        String url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+"upeDW-2pWrHgLx3fGqgsvAvf-HkQBA--5uHOo9OW16uNdL9zNPnnuIN01UDFXh_5d-QdcnBxux9tXigFwm1z0SInbdkXEKa1pMhTqaZVxK7sCPj7421YQGI0v3evwiwiWALjAHASWH";

        try{
            String rs=HttpUtils.sendPostBuffer(url, menujson.toJSONString());
            System.out.println(rs);
        }catch(Exception e){
            System.out.println("請(qǐng)求錯(cuò)誤!");
        }

    }

}

上面代碼的基本流程就是調(diào)用 view 和 click 兩個(gè)實(shí)體封裝 json 字符串 menujson,最后調(diào)用發(fā)送方法將 json 發(fā)送給騰訊服務(wù)器,但是這里需要用到賬號(hào)生成的 token,我這里是直接寫(xiě)死的(token 的獲取方式可以參見(jiàn) http://www.cuiyongzhi.com/?id=44 ),最終運(yùn)行返回結(jié)果 ok 即可,如下:

http://wiki.jikexueyuan.com/project/java-wechat/images/35.png" alt="" />

自定義菜單的功能實(shí)現(xiàn)基本就是這些,下一篇將講述【微信公眾平臺(tái)(map.weixin.qq.com)/開(kāi)放平臺(tái)(open.weixin.qq.com)/商戶平臺(tái)(pay.weixin.qq.com)之間的關(guān)聯(lián)關(guān)系】希望可以對(duì)你給出幫助,感謝你的翻閱,如有疑問(wèn)可以留言討論!