微信接口开发
最近在做微信接口开发。记下留着回顾
管理门户采用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);
没什么要记的了基本功能已经实现,正在加业务处理