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