微信创建菜单

package com.wanhua.weixin.model;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.json.JSONObject;
import org.junit.Test;

import com.alibaba.fastjson.JSON;
import com.google.gson.JsonArray;
import com.sun.corba.se.impl.oa.poa.AOMEntry;
import com.wanhua.weixin.util.WXConst;
import com.wanhua.weixin.util.WXHttpUtil;
import com.wanhua.weixin.util.WXMsgManager;

/**
 *
 * weixin菜单
 *
 * @author w_xfpenga
 *
 *         2014-11-27
 *
 */
public class Menu {

// 菜单标题,不超过16个字节,子菜单不超过40个字节
    public String name;

// 菜单的响应动作类型
    public String type;

// type非view时作为button的唯一标识
    public String key;

// type为view时用上
    public String url;

// 只能有二级菜单,不为空时只需要有name,而type/key/url都为空
    public List<Menu> sub_button;

/**
     * 创建Menu
     *
     * @Title: createMenu
     * @Description: 创建Menu
     * @param @return
     * @param @throws IOException 设定文件
     * @return string 返回类型
     * @throws
     */
    public static String createMenu() {
        String returnMsg = "";
        if (queryMenu().contains("errcode")) {
            returnMsg = inintMenu();
        }
        return returnMsg;

}

/**
     * 菜单创建的初始化
     *
     * @author w_xfpenga
     *
     *
     *         2014-12-27
     */
    public static String inintMenu() {

// 菜单一:待办列表
        Menu DoingMenu = new Menu();
        DoingMenu.name = "待办Todo";
        DoingMenu.type = "click";
        DoingMenu.key="01_DOING";
//        DoingMenu.url = "http://10.10.103.206:9080/WHMobile/apps/services/www/POCMobileOA/mobilewebapp/default/index.html";
//        DoingMenu.url ="http://10.13.18.152:10080/WHMobile/apps/services/preview/POCMobileOA/common/0/default/index.html";

// 菜单二:已办列表
        Menu doneMenu = new Menu();
        doneMenu.name = "已办Done";
        doneMenu.type = "view";
        doneMenu.url = "http://3a011670.ngrok.com/WHMobile/apps/services/preview/POCMobileOA/common/0/default/index.html";

// 菜单三:更多
        Menu moreMenu = new Menu();
        moreMenu.name = "更多More";

Menu loginMenu = new Menu();
        loginMenu.name = "身份验证Login";
        loginMenu.type = "click";
        loginMenu.key = "01_LOGIN";

Menu logoutMenu = new Menu();
        logoutMenu.name = "身份解绑Logout";
        logoutMenu.type = "click";
        logoutMenu.key = "02_LOGOUT";

Menu settingMenu = new Menu();
        settingMenu.name = "设置Setting";
        settingMenu.type = "click";
        settingMenu.key = "03_SETTING";

Menu helperMenu = new Menu();
        helperMenu.name = "帮助Help";
        helperMenu.type = "click";
        helperMenu.key = "04_HELPER";

List<Menu> moreList = new ArrayList<Menu>();
        moreList.add(loginMenu);
        moreList.add(logoutMenu);
        moreList.add(settingMenu);
        moreList.add(helperMenu);
        moreMenu.sub_button = moreList;

List<Menu> menuList = new ArrayList<Menu>();

menuList.add(DoingMenu);
        menuList.add(doneMenu);
        menuList.add(moreMenu);

Map menuMap = new HashMap<String, Object>();
        menuMap.put("button", menuList);

String menu = JSON.toJSONString(menuMap);

String action = WXConst.CREATE_MENU;

try {
            WXHttpUtil.MsgHttpsRequest(action, "POST", menu);
            return "createMenu 返回信息成功!!!";
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            return "createMenu 失败!!!";
        }

}

/**
     * 删除当前Menu
     *
     * @Title: deleteMenu
     * @Description: 删除当前Menu
     * @param @return 设定文件
     * @return String 返回类型
     * @throws
     */
    public static String deleteMenu() {
        String access_token = getAccess_token();
        String action = WXConst.DELETE_MENU + access_token;
        String returnMsg = "deleteMenu";
        try {
            return WXHttpUtil.getMenuUtils(action, returnMsg);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "菜单查询失败!!!";
        }
    }

/**
     * 查询当前Menu
     *
     * @Title: deleteMenu
     * @Description: 查询当前Menu
     * @param @return 设定文件
     * @return String 返回类型
     * @throws
     */
    public static String queryMenu() {
        String access_token = getAccess_token();
        String action = WXConst.QUERY_MENU + access_token;
        String returnMsg = "queryMenu";

try {
            return WXHttpUtil.getMenuUtils(action, returnMsg);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "菜单查询失败!!!";
        }

}
    
    /**
     * 获取accessToken
     * @return
     */
    public static String getAccess_token() {

String url = WXConst.URL_GET_TOKEN;
        String accessToken = null;
        try {
            URL urlGet = new URL(url);
            HttpURLConnection http = (HttpURLConnection) urlGet
                    .openConnection();

http.setRequestMethod("GET"); // 必须是get方式请求
            http.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded");
            http.setDoOutput(true);
            http.setDoInput(true);
            System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
            System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒

http.connect();

InputStream is = http.getInputStream();
            int size = is.available();
            byte[] jsonBytes = new byte[size];
            is.read(jsonBytes);
            String message = new String(jsonBytes, "UTF-8");

JSONObject demoJson = new JSONObject(message);
            accessToken = demoJson.getString("access_token");

System.out.println(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return accessToken;
    }
    
    @Test
    public void testManu(){
        createMenu();
        //deleteMenu();
    }

}

时间: 2024-07-29 14:53:29

微信创建菜单的相关文章

微信创建菜单操作

1.介绍微信菜单的格式: 1 { 2 "button":[ 3 { 4 "type":"click", 5 "name":"今日歌曲", 6 "key":"V1001_TODAY_MUSIC" 7 }, 8 { 9 "name":"菜单", 10 "sub_button":[ 11 { 12 "ty

微信创建菜单报must use utf-8 charset hint:错误

errcode=65318, errmsg=must use utf-8 charset hint: [BIlxtA0785vr23] 错误提示:must use utf-8 charse 仔细检查httpclient 发现都是utf-8的设置, 后经过排查发现,根本就不是UTF-8等编码的原因, 而是,这个JSON里面的type不能是大写,要是小写的 "view",不得不吐槽 微信的这个错误提示,好坑的.

微信公众平台自定义菜单开发——创建菜单

自己从不会到最后做出来,所以好东西必须分享,所以我就给大家写一下过程 1.首先必须是成为微信的开发者,这样才有AppId 和AppSecret 2步就是获取access_token 在你的浏览器上输入https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET (注意连接中得appid=APPID&secret=APPSECRET 分别是你自己在微信

PHP CURL获取微信公众平台的ACCESS TOKEN以及创建菜单的方法

//使用curl模块,必须在php.in 里面将curl模块开启.<?php header("Content-type: text/html; charset=utf-8"); define("app_id","xxx");//APP_ID define("app_secret","xxxx");//APP_SECRET //获取access token 的方法 function get_access

微信公众平台开发(三)——二维码、创建菜单

一.二维码 目前有2种类型的二维码:点击查看在线文档 1.临时二维码,是有过期时间的,最长可以设置为在二维码生成后的7天(即604800秒)后过期,但能够生成较多数量.临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景2.永久二维码,是无过期时间的,但数量较少(目前为最多10万个).永久二维码主要用于适用于帐号绑定.用户来源统计等场景.永久二维码时最大值为100000(目前参数只支持1--100000). 下面的代码是获取永久二维码的事例: /** * 获取永久二维码需要的ticket

Force.com微信开发系列(四)申请Access Token及自定义菜单之创建菜单

在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒内失效,重复获取将导致上次获取的Token失效,本文将首先介绍如何获取Access Token,再介绍如何通过Access Token来在微信内添加自定义菜单(注意,开发者需要申请测试账号来测试自定义菜单,如何申请请参照前文). 申请Access Token 获取Access Token接口的网址如下: https://api.weixin.qq.com/c

微信开发(三)创建菜单

div#cpmenu {height:200px;float:left;} div#cpcontent {height:200px;width:150px;float:left;} 文章作者:松阳 原文链接:http://blog.csdn.net/fansongy/article/details/43406073 Overview 如果选择了为微信制定开发版,就不能使用功能中的自定义菜单工具,需要使用代码手动添加 .这篇文章主要介绍如何通过http请求添加自定义菜单. 原理与工具 如果希望添加

手把手教会你微信公众平台自定义菜单开发——创建菜单

一如既往的,关于微信公众平台的开发,不算出自大牛的代码,但是简单易懂适合刚入门的朋友. 首先先介绍一下逻辑,因为发现很多朋友都不能看懂微信官方的文档,当然啦,这跟你是否认真看有关的,认真看总能看懂的,废话不说了.此时,我当你已经有一个已经申请到自定义菜单开发权限的微信服务号.首先,你要在后台开发模式下面找到你的AppId 还有 AppSecret并且记下来,然后通过这两个官方发放给你的ID去获取一个ACCESS_TOKEN[官方解释是:第三方访问api资源的票据],稍后会通过这个ACCESS_T

微信接口(一)创建菜单&amp;自动回复

刚划拉完微信.做一个笔记这里的数据是写死的,还有一份是通过查询数据库进行自动回复,自定义菜单设置的.不过因为使用到数据库,最好在网站后台吧微信平台开发集成进去.所以代码较多就先不放了.有问题的地方请留言,我也学习一下. <?php/* * @author:dou *///token值(令牌),与公众平台设置一致define("TOKEN", "dou"); $wechatObj = new wechatCallbackapiTest();if (!isset(