微信接口开发

最近在做微信接口开发。记下留着回顾

管理门户采用springMVC+mybatis,数据库用的MySQL

普通订阅号没有上传媒体文件权限。

自定义菜单:

@Controller
public class MenuService {
    private static final Logger log = LoggerFactory.getLogger(MenuService.class);

    @Autowired
    MenuDAO menuDAO;

    public void newMenu() {

        String access_token = TokenUtil.getAccessToken(Config.getProperty("appid"), Config.getProperty("appsecret")).getToken();
        System.out.println("access_token:" + access_token);
        if (null != access_token) {
            int result = MenuService.createMenu(getMenu(), access_token);
            System.out.println("result:" + result);
            if (result == 0) {
                log.info("自定义菜单创建成功!");
                System.out.println("自定义菜单创建成功!");
            } else {
                log.info("菜单创建失败,错误码" + result);
                System.out.println("自定义菜单创建失败!");
            }
        }
    }

    public Menu getMenu() {
        Map<Integer, List<DefMenu>> selfmenuInfo = getSelfmenuInfo();
        if (selfmenuInfo == null || selfmenuInfo.size() == 0) {
            return null;
        } else {
            Menu menu = new Menu();

            Button[] menuButtons = new Button[selfmenuInfo.size()];
            for (int s = 0; s < selfmenuInfo.size(); s++) {
                List<DefMenu> menuSelected = selfmenuInfo.get(s);

                if (menuSelected != null && menuSelected.size() > 0) {
                    DefMenu selectedMain = menuSelected.get(0);
                    List<DefMenu> menuList = menuDAO.getIdFromParentId(selectedMain.getId());
                    if (menuList.size() == 0) {
                        if ("click".equals(selectedMain.getType())) {
                            CommonButton btn = new CommonButton();
                            btn.setKey(selectedMain.getKeyId());
                            btn.setName(selectedMain.getName());
                            btn.setType(selectedMain.getType());
                            menuButtons[s] = btn;
                        } else {
                            ViewButton btn = new ViewButton();
                            btn.setUrl(selectedMain.getUrlTo());
                            btn.setName(selectedMain.getName());
                            btn.setType(selectedMain.getType());
                            menuButtons[s] = btn;
                        }
                    } else {
                        Button[] buttons = new Button[menuList.size()];
                        ComplexButton mainBtn = new ComplexButton();
                        mainBtn.setName(selectedMain.getName());
                        if (menuList.size() > 0) {
                            for (int i = 0; i < menuList.size(); i++) {
                                DefMenu selected = menuList.get(i);
                                if ("click".equals(selected.getType())) {
                                    CommonButton btn = new CommonButton();
                                    btn.setKey(selected.getKeyId());
                                    btn.setName(selected.getName());
                                    btn.setType(selected.getType());
                                    buttons[i] = btn;
                                } else {
                                    ViewButton btn = new ViewButton();
                                    btn.setUrl(selected.getUrlTo());
                                    btn.setName(selected.getName());
                                    btn.setType(selected.getType());
                                    buttons[i] = btn;
                                }
                            }
                        }
                        mainBtn.setSub_button(buttons);
                        menuButtons[s] = mainBtn;
                    }
                }
            }

            menu.setButton(menuButtons);
            return menu;
        }
    }

    /**
     * 创建菜单
     * 
     * @param menu
     *            菜单实例
     * @param accessToken
     *            有效的access_token
     * @return
     */
    public static int createMenu(Menu menu, String accessToken) {
        int result = 0;
        System.out.println("1234567");

        // 拼装创建菜单的url
        String url = WechatInterfacesUrl.MENU_CREATE_URL.replace("ACCESS_TOKEN", accessToken);
        System.out.println("url:" + url);
        // 将菜单对象转换成json字符串
        String jsonMenu = JSONObject.fromObject(menu).toString();

        System.out.println("jsonMenu:" + jsonMenu);
        // 调用接口创建菜单
        JSONObject jsonObject = HttpUtils.httpsRequest(url, "POST", jsonMenu);
        System.out.println("jsonObjectmenu:" + jsonObject);

        if (null != jsonObject) {
            if (0 != jsonObject.getInt("errcode")) {
                result = jsonObject.getInt("errcode");
                log.error("创建菜单失败 errcode:" + jsonObject.getInt("errcode") + ",errmsg:" + jsonObject.getString("errmsg"));
            }
        }

        return result;
    }

    private Map<Integer, List<DefMenu>> getSelfmenuInfo() {
        Map<Integer, List<DefMenu>> menuSelected = new HashMap<Integer, List<DefMenu>>();

        try {
            List<DefMenu> list = menuDAO.getMenuListsByButtonTypeShow();

            List<DefMenu> menuSelected1 = new ArrayList<DefMenu>();
            List<DefMenu> menuSelected2 = new ArrayList<DefMenu>();
            List<DefMenu> menuSelected3 = new ArrayList<DefMenu>();
            if (list.size() == 1) {
                menuSelected1.add(list.get(0));
            } else if (list.size() == 2) {
                menuSelected1.add(list.get(0));
                menuSelected2.add(list.get(1));
            } else if (list.size() == 3) {
                menuSelected1.add(list.get(0));
                menuSelected2.add(list.get(1));
                menuSelected3.add(list.get(2));
            }

            if (menuSelected1.size() > 0)
                menuSelected.put(0, menuSelected1);
            if (menuSelected2.size() > 0)
                menuSelected.put(1, menuSelected2);
            if (menuSelected3.size() > 0)
                menuSelected.put(2, menuSelected3);

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        System.out.println("menuSelected:" + menuSelected);

        return menuSelected;
    }
}

  首次关注时根据openid去获得关注者信息

public static UserInfo getUserInfo(String openid) {
        UserInfo userInfo = new UserInfo();
        String access_token = TokenUtil.getAccessToken(Config.getProperty("appid"), Config.getProperty("appsecret")).getToken();
        if (!"".equals(access_token)) {
            // 拼装接口url
            String url = WechatInterfacesUrl.USER_INFO_URL.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);
            // 将对象转换成json字符串
            // 调用接口创建菜单
            JSONObject jsonObject = HttpUtils.httpsRequest(url, "GET", null);
            System.out.println("jsonObject:" + jsonObject);

            if (null != jsonObject) {
                try {
                    userInfo = (UserInfo) JSONObject.toBean(jsonObject, UserInfo.class);

                } catch (JSONException e) {
                    userInfo = null;
                    log.error("获取用户信息失败 errcode:" + jsonObject.getInt("errcode") + ",errmsg:" + jsonObject.getString("errmsg"));
                }
            }
        }
        return userInfo;
    }

  回复媒体文件需要先上传到微信服务器,得到mediaId

用户注册绑定openid和手机号,添加文本关键字<a href="http://www.baidu.com/">点击此处注册</a>,可以在连接后面加上openid让页面去解析绑定,方法

if (respMes.contains("<a")) {
                                int index1 = respMes.indexOf("href");
                                int index2 = respMes.indexOf("\">", index1);

                                String urlStr = respMes.substring(index1, index2);

                                String newUrl = urlStr + "?openid=" + open_id;
                                respMessage = respMes.replace(urlStr, newUrl);

  没什么要记的了基本功能已经实现,正在加业务处理

posted @ 2015-05-07 22:47  荣耀海布里  阅读(225)  评论(0编辑  收藏  举报