整体代码如下:
package haust.vk.button;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import haust.vk.utils.GetAccesstoken;
import haust.vk.utils.UrlReq;
/**
* 按钮工具类 自定义也就是根据key来确定的 不再举例 和消息管理有重叠
* @author viakiba
*
*/
public class ButtonUtils {
/**
* 创建按钮
* 如果原来有按钮,可以在不删除的情况下更新按钮
*/
public static void createButton() {
// https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
String accesstoken = GetAccesstoken.getAccesstoken();
String json = getButJson();
//按钮类型不再解释
String loadJson = UrlReq.loadJson("https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+accesstoken, json);
Map map = JSON.parseObject(loadJson,Map.class);
Integer errcode =(Integer) map.get("errcode");
if(errcode == 0){
System.out.println("创建成功");
}else{
System.out.println("创建失败");
}
}
/**
* 查询接口 https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN
*/
public static void selectButton() {
// https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
String accesstoken = GetAccesstoken.getAccesstoken();
String json = getButJson();
//按钮类型不再解释
String loadJson = UrlReq.loadJson("https://api.weixin.qq.com/cgi-bin/menu/get?access_token="+accesstoken, json);
System.out.println(loadJson);
}
/**
* 删除按钮
*
*/
public static void deleteButton() {
// https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
String accesstoken = GetAccesstoken.getAccesstoken();
//按钮类型不再解释
String loadJson = UrlReq.loadJson("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token="+accesstoken);
Map map = JSON.parseObject(loadJson,Map.class);
System.out.println(loadJson);
Integer errcode =(Integer) map.get("errcode");
if(errcode == 0){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
}
/**
* 辅助文件 拿到一个json数据
* @return
*/
public static String getButJson(){
File file = new File("src/haust/vk/button/json.json");
StringBuffer sb = new StringBuffer();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
sb.append(tempString);
}
reader.close();
}catch(Exception e){
e.printStackTrace();
}
return sb.toString();
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
//createButton();
selectButton();
//deleteButton();
}
}
这里值得注意的是accesstoken ,有效期是两个小时,所以没有必要重复获取。而且新获取的会然原来获取的accesstoken 的失效。这样在高并发状态下会出问题的,所以根据微信的建议需要建立accesstoken 的中控。这样才能避免accesstoken 失效的问题。
部分工具类在源码中都可以拿到
代码下载:
http://download.csdn.net/detail/meryhuang/9688173