import net.sf.json.JSONObject;
import org.apache.commons.httpclient.util.HttpURLConnection;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.activation.MimetypesFileTypeMap;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @Package com.XXX.app
* @Description: ${todo}
* @Author: admin
* @Date: 2018/5/1410:44
*/
public class WeixinUtil {
private static final String SERVLET_POST = "POST" ;
private static final String SERVLET_GET = "GET" ;
private static final String SERVLET_DELETE = "DELETE" ;
private static final String SERVLET_PUT = "PUT" ;
//微信配置
private static final String APP_ID = "";
private static final String APP_SECRECT = "";
//上传文件配置
private static final String UPLOAD_FILE_SAVE_PATH = "";
private static final String UPLOAD_FILE_SAVE_PATHUPLOAD_FILE_SAVE_PATH = "";
/**
* 参数格式化
* @param paramMap
* @return
*/
private static String prepareParam(Map paramMap){
StringBuffer sb = new StringBuffer();
if(paramMap.isEmpty()){
return "" ;
}else{
for(String key: paramMap.keySet()){
String value = (String)paramMap.get(key);
if(sb.length()<1){
sb.append(key).append("=").append(value);
}else{
sb.append("&").append(key).append("=").append(value);
}
}
return sb.toString();
}
}
/**
* 上传图片
*
* @param urlStr
* @param textMap
* @param fileMap
* @return
*/
@SuppressWarnings({ "restriction", "rawtypes" })
public static String formUpload(String urlStr, Map textMap,
Map fileMap) {
String res = "";
HttpURLConnection conn = null;
String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(30000);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
conn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// text
if (textMap != null) {
StringBuffer strBuf = new StringBuffer();
Iterator iter = textMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
strBuf.append("\r\n").append("--").append(BOUNDARY).append(
"\r\n");
strBuf.append("Content-Disposition: form-data; name=\""
+ inputName + "\"\r\n\r\n");
strBuf.append(inputValue);
}
out.write(strBuf.toString().getBytes());
}
// file
if (fileMap != null) {
Iterator iter = fileMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
File file = new File(inputValue);
String filename = file.getName();
String contentType = new MimetypesFileTypeMap()
.getContentType(file);
if (filename.endsWith(".png")) {
contentType = "image/png";
}
if (contentType == null || contentType.equals("")) {
contentType = "application/octet-stream";
}
StringBuffer strBuf = new StringBuffer();
strBuf.append("\r\n").append("--").append(BOUNDARY).append(
"\r\n");
strBuf.append("Content-Disposition: form-data; name=\""
+ inputName + "\"; filename=\"" + filename
+ "\"\r\n");
strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
out.write(strBuf.toString().getBytes());
DataInputStream in = new DataInputStream(
new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
}
}
byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
out.write(endData);
out.flush();
out.close();
// 读取返回数据
StringBuffer strBuf = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
strBuf.append(line).append("\n");
}
res = strBuf.toString();
reader.close();
reader = null;
} catch (Exception e) {
System.out.println("发送POST请求出错。" + urlStr);
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
return res;
}
/**
* 上传图片
*
* @param urlStr
* @param textMap
* @param fileMap
* @return
*/
@SuppressWarnings({ "restriction", "rawtypes" })
public static String uploadFile(String urlStr, Map textMap,
MultipartFile mfile) {
String res = "";
HttpURLConnection conn = null;
String BOUNDARY = "---------------------------123821742118716"; //boundary就是request头和上传文件内容的分隔符
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(30000);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
conn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// text
if (textMap != null) {
StringBuffer strBuf = new StringBuffer();
Iterator iter = textMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
strBuf.append("\r\n").append("--").append(BOUNDARY).append(
"\r\n");
strBuf.append("Content-Disposition: form-data; name=\""
+ inputName + "\"\r\n\r\n");
strBuf.append(inputValue);
}
out.write(strBuf.toString().getBytes());
}
// file
if (mfile != null) {
String filename = mfile.getOriginalFilename();
String contentType = new MimetypesFileTypeMap()
.getContentType(mfile.getContentType());
System.out.println(contentType);
StringBuffer strBuf = new StringBuffer();
strBuf.append("\r\n").append("--").append(BOUNDARY).append(
"\r\n");
strBuf.append("Content-Disposition: form-data; name=\"media\"; filename=\"" + filename
+ "\"\r\n");
strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
out.write(strBuf.toString().getBytes());
DataInputStream in = new DataInputStream(mfile.getInputStream());
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
}
byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
out.write(endData);
out.flush();
out.close();
// 读取返回数据
StringBuffer strBuf = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
strBuf.append(line).append("\n");
}
res = strBuf.toString();
reader.close();
reader = null;
} catch (Exception e) {
System.out.println("发送POST请求出错。" + urlStr);
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
return res;
}
/**
* POST json格式输出
* @param sendurl
* @param data
* @return
*/
public static String sendInfo(String sendurl, String data) {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(sendurl);
StringEntity myEntity = new StringEntity(data,
ContentType.APPLICATION_JSON);// 构造请求数据
post.setEntity(myEntity);// 设置请求体
String responseContent = null; // 响应内容
CloseableHttpResponse response = null;
try {
response = client.execute(post);
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
responseContent = EntityUtils.toString(entity, "UTF-8");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (response != null)
response.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (client != null)
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return responseContent;
}
/**
* 模拟POST提交数据
* @param urlStr
* @param paramMap
* @throws Exception
*/
@SuppressWarnings("unused")
public static void doPost(String urlStr,Map paramMap ) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_POST);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += "/n"+line;
}
br.close();
}
/**
* 模拟 GET提交数据
* @param urlStr
* @param paramMap
* @return
* @throws Exception
*/
public static String doGet(String urlStr,Map paramMap ) throws Exception{
String paramStr = prepareParam(paramMap);
if(paramStr == null || paramStr.trim().length()<1){
}else{
urlStr +="?"+paramStr;
}
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_GET);
conn.setRequestProperty("Content-Type","text/html; charset=UTF-8");
conn.connect();
if(conn.getResponseCode() == 200){
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += line;
}
br.close();
return result;
}else{
/* Map map = new HashMap();
map.put("errcode", "40001");
map.put("errmsg", "接口响应失败");
JSONObject.fromObject(map);*/
String re = "{\"errcode\":200,\"errmsg\":\"接口响应失败\"}";
return re;
}
}
@SuppressWarnings("unused")
public static void doPut(String urlStr,Map paramMap) throws Exception{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod(SERVLET_PUT);
String paramStr = prepareParam(paramMap);
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(paramStr.toString().getBytes("utf-8"));
os.close();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line ;
String result ="";
while( (line =br.readLine()) != null ){
result += "/n"+line;
}
br.close();
}
public static void doDelete(String urlStr,Map paramMap) throws Exception{
String paramStr = prepareParam(paramMap);
if(paramStr == null || paramStr.trim().length()<1){
}else{
urlStr +="?"+paramStr;
}
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod(SERVLET_DELETE);
if(conn.getResponseCode() ==200){
System.out.println("成功");
}else{
System.out.println(conn.getResponseCode());
}
}
/**
* 根据APPID和APPSECRECT获取token
* @param appId
* @param appSecret
* @return
*/
@SuppressWarnings("unchecked")
public static Map getToken(String appId ,String appSecret,String code){
String url = "https://api.weixin.qq.com/sns/oauth2/access_token";
Map param = new HashMap();
Map back = new HashMap();
param.put("appid", appId);
param.put("secret", appSecret);
param.put("code", code);
param.put("grant_type", "authorization_code");
try {
String result = WeixinUtil.doGet(url,param);
if(result!=null && result!=""){
Map map = JSONObject.fromObject(result);
if(map.containsKey("errcode")){
String errcode = map.get("errcode").toString();
String errmsg = map.get("errmsg").toString();
back.put("errcode", errcode);
back.put("errmsg", errmsg);
back.put("token", "");
}else{
back = map;
back.put("errcode", "0");
}
}else{
back.put("errcode", "601");
back.put("errmsg", "接口响应失败");
back.put("token", "");
}
} catch (Exception e) {
back.put("errcode", "602");
back.put("errmsg", "程序异常");
back.put("token", "");
e.printStackTrace();
}
return back;
}
/**
* 根据APPID和APPSECRECT获取token
* @param appId
* @param appSecret
* @return
*
* {
* "access_token":"ACCESS_TOKEN",
* "expires_in":7200,
* "refresh_token":"REFRESH_TOKEN",
* "openid":"OPENID",
* "scope":"SCOPE"
* }
*
*
*/
@SuppressWarnings({ "unchecked", "unused" })
public static Map refresh_token(String appId,String refresh_token){
String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token";
Map param = new HashMap();
Map back = new HashMap();
param.put("appid", appId);
param.put("refresh_token", refresh_token);
param.put("grant_type", "refresh_token");
try {
String result = WeixinUtil.doGet(url,param);
if(result!=null && result!=""){
Map map = JSONObject.fromObject(result);
if(map.containsKey("errcode")){
String errcode = map.get("errcode").toString();
String errmsg = map.get("errmsg").toString();
back.put("errcode", errcode);
back.put("errmsg", errmsg);
back.put("token", "");
}else{
String access_token = map.get("access_token").toString();
//String expires_in = map.get("expires_in").toString();
back = map;
back.put("errcode", "0");
//back.put("token", access_token);
//back.put("expires_in", expires_in);
}
}else{
back.put("errcode", "601");
back.put("errmsg", "接口响应失败");
back.put("token", "");
}
} catch (Exception e) {
back.put("errcode", "602");
back.put("errmsg", "程序异常");
back.put("token", "");
e.printStackTrace();
}
return back;
}
/**
* 根据access_token和openid获取用户信息
* @param access_token
* @param openid
* @return
*/
@SuppressWarnings("unchecked")
public static Map snsuserinfo(String access_token ,String openid){
String url = "https://api.weixin.qq.com/sns/userinfo";
Map param = new HashMap();
Map back = new HashMap();
param.put("access_token", access_token);
param.put("openid", openid);
param.put("lang", "zh_CN");
try {
String result = WeixinUtil.doGet(url,param);
if(result!=null && result!=""){
Map map = JSONObject.fromObject(result);
if(map.containsKey("errcode")){
String errcode = map.get("errcode").toString();
String errmsg = map.get("errmsg").toString();
back.put("errcode", errcode);
back.put("errmsg", errmsg);
back.put("token", "");
}else{
back = map;
back.put("errcode", "0");
}
}else{
back.put("errcode", "601");
back.put("errmsg", "接口响应失败");
back.put("token", "");
}
} catch (Exception e) {
back.put("errcode", "602");
back.put("errmsg", "程序异常");
back.put("token", "");
e.printStackTrace();
}
return back;
}
/**
* 根据APPID和APPSECRECT获取token
* @param appId
* @param appSecret
* @return
*/
@SuppressWarnings("unchecked")
public static Map getToken(){
String url = "https://api.weixin.qq.com/cgi-bin/token";
Map param = new HashMap();
Map back = new HashMap();
param.put("appid", APP_ID);
param.put("secret", APP_SECRECT);
param.put("grant_type", "client_credential");
try {
String result = WeixinUtil.doGet(url,param);
if(result!=null && result!=""){
Map map = JSONObject.fromObject(result);
if(map.containsKey("errcode")){
String errcode = map.get("errcode").toString();
String errmsg = map.get("errmsg").toString();
back.put("errcode", errcode);
back.put("errmsg", errmsg);
back.put("token", "");
}else{
String access_token = map.get("access_token").toString();
//String expires_in = map.get("expires_in").toString();
back.put("errcode", "0");
back.put("token", access_token);
//back.put("expires_in", expires_in);
}
}else{
back.put("errcode", "601");
back.put("errmsg", "接口相应失败");
back.put("token", "");
}
} catch (Exception e) {
back.put("errcode", "602");
back.put("errmsg", "程序异常");
back.put("token", "");
e.printStackTrace();
}
return back;
}
/**
* 根据APPID和APPSECRECT获取token
* @param appId
* @param appSecret
* @return
*/
@SuppressWarnings("unchecked")
public static Map getticket(String access_token,String type){
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
Map param = new HashMap();
Map back = new HashMap();
param.put("access_token", access_token);
param.put("type", type);
try {
String result = WeixinUtil.doGet(url,param);
if(result!=null && result!=""){
Map map = JSONObject.fromObject(result);
back = map;
}else{
back.put("errcode", "601");
back.put("errmsg", "接口相应失败");
back.put("ticket", "");
}
} catch (Exception e) {
back.put("errcode", "602");
back.put("errmsg", "程序异常");
back.put("token", "");
e.printStackTrace();
}
return back;
}
/**
* 获取素材总数
* @param token
* @return
*/
@SuppressWarnings("unchecked")
public static Map get_materialcount(String token){
String url = "https://api.weixin.qq.com/cgi-bin/material/get_materialcount";
Map param = new HashMap();
Map back = new HashMap();
param.put("access_token", token);
try {
String result = WeixinUtil.doGet(url,param);
if(result!=null && result!=""){
back = JSONObject.fromObject(result);
}else{
back.put("errcode", "601");
back.put("errmsg", "接口响应失败");
back.put("token", "");
}
} catch (Exception e) {
back.put("errcode", "602");
back.put("errmsg", "程序异常");
back.put("token", "");
e.printStackTrace();
}
return back;
}
/**
* 获取素材列表
* @param token
* @param param 参数示例 {"type":"news","offset":0,"count":20}
* @return
*/
@SuppressWarnings("unchecked")
public static Map batchget_material(String token,String json){
String url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token="+token;
//String json = param.toString();
Map map = new HashMap();
try {
String result = sendInfo(url, json);
map = JSONObject.fromObject(result);
} catch (Exception e) {
map.put("errcode", "602");
map.put("errmsg", "程序异常");
map.put("token", "");
e.printStackTrace();
}
return map;
}
/**
* 添加素材
* @param token
* @param filepath
* @param type
* @return
*/
@SuppressWarnings("unchecked")
public static Map add_material(String token,MultipartFile file, String type){
Map back = new HashMap();
String urlStr = "http://api.weixin.qq.com/cgi-bin/material/add_material?access_token="+token;
Map textMap = new HashMap();
textMap.put("type", type);
String ret = uploadFile(urlStr, textMap, file);
back = JSONObject.fromObject(ret);
return back;
}
/**
* 删除图文素材
* @param token
* @param param
* @return
*/
@SuppressWarnings("unchecked")
public static Map delMaterail(String token, Map param){
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/material/del_material?access_token="+token;
String json = JSONObject.fromObject(param).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
/**
* 添加图文素材
* @param token
* @param param
* @return
*/
@SuppressWarnings("unchecked")
public static Map add_news(String token, Map param){
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token="+token;
String json = JSONObject.fromObject(param).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
/**
* 下载微信图片素材
* @param url
* @param data
* @return
*/
public static String downImage(String url, String data) {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(url);
StringEntity myEntity = new StringEntity(data,
ContentType.APPLICATION_JSON);// 构造请求数据
post.setEntity(myEntity);// 设置请求体
String responseContent = null; // 响应内容
String extension = ".jpg";
CloseableHttpResponse response = null;
try {
response = client.execute(post);
if (response.getStatusLine().getStatusCode() == 200) {
System.out.println(response.getEntity().toString());
HttpEntity entity = response.getEntity();
System.out.println(entity.getContent());
BufferedImage bi = ImageIO.read(entity.getContent());
String key = UUID.randomUUID().toString();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");
String save_path = sdf.format(new Date());
String filepath=UPLOAD_FILE_SAVE_PATHUPLOAD_FILE_SAVE_PATH + "logo/"+save_path;
StringBuffer filePath = new StringBuffer(filepath);
File dir = new File(filePath.toString());//文件保存路径
if(!dir.exists()){
dir.mkdirs();
}
//新文件名
filePath.append(key).append(extension);
System.out.println(filePath);
File out = new File(filePath.toString());
ImageIO.write(bi, "jpg", out);
responseContent = "logo/"+save_path+key+extension;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (response != null)
response.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (client != null)
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return responseContent;
}
@SuppressWarnings("unchecked")
public static Map getfiles(String url){
Map back = new HashMap();
Map param = new HashMap();
String ret;
try {
ret = WeixinUtil.doGet(url,param);
back = JSONObject.fromObject(ret);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return back;
}
/**
* 获取用户列表
* @param token
* @param next
* @return
*/
@SuppressWarnings("unchecked")
public static Map userlist(String token,String next){
Map paramMap = new HashMap();
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/user/get";
try {
paramMap.put("access_token", token);
if(next!=null){
paramMap.put("next_openid", next);
}
String res = WeixinUtil.doGet(urlStr, paramMap);
back = JSONObject.fromObject(res);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return back;
}
/**
* 获取用户信息
* @param token
* @param openid
* @return
*/
@SuppressWarnings("unchecked")
public static Map userinfo(String token,String openid){
Map paramMap = new HashMap();
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/user/info";
try {
paramMap.put("access_token", token);
paramMap.put("lang", "zh_CN");
if(openid!=null){
paramMap.put("openid", openid);
}
String res = WeixinUtil.doGet(urlStr, paramMap);
back = JSONObject.fromObject(res);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return back;
}
/**
* 创建分组
* POST数据格式:json
* POST数据例子:{"group":{"name":"test"}}
* @param token
* @param param
* @return
*/
@SuppressWarnings("unchecked")
public static Map groupscreate(String token, String value){
Map back = new HashMap();
Map groups = new HashMap();
Map group = new HashMap();
group.put("name", value);
groups.put("group", group);
String urlStr = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token="+token;
String json = JSONObject.fromObject(groups).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
/**
* 修改分组
* POST数据格式:json
* POST数据例子:{"group":{"name":"test"}}
* @param token
* @param param
* @return {"errcode":0,"errmsg":"ok"}
*/
@SuppressWarnings("unchecked")
public static Map groupsupdate(String token, Integer id, String value){
Map back = new HashMap();
Map groups = new HashMap();
Map group = new HashMap();
group.put("name", value);
group.put("id", id);
groups.put("group", group);
String urlStr = "https://api.weixin.qq.com/cgi-bin/groups/update?access_token="+token;
String json = JSONObject.fromObject(groups).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
/**
* 删除分组
* POST数据格式:json
* POST数据例子:{"group":{"id":106}}
* @param token
* @param param
* @return {"errcode":0,"errmsg":"ok"}
*/
@SuppressWarnings("unchecked")
public static Map groupsdelete(String token,Integer id){
Map back = new HashMap();
Map groups = new HashMap();
Map group = new HashMap();
group.put("id", id);
groups.put("group", group);
String urlStr = "https://api.weixin.qq.com/cgi-bin/groups/delete?access_token="+token;
String json = JSONObject.fromObject(groups).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
/**
* 查询所有分组
* @param token
* @return {"groups": [{ "id": 0, "name": "未分组","count": 72596},...]}
*/
@SuppressWarnings("unchecked")
public static Map groupsget(String token){
Map back = new HashMap();
Map param = new HashMap();
param.put("access_token", token);
String urlStr = "https://api.weixin.qq.com/cgi-bin/groups/get";
String ret;
try {
ret = doGet(urlStr, param);
back = JSONObject.fromObject(ret);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return back;
}
/**
* 下载素材图片
* @param media_id
* @param token
* @return
*/
public static String downmedia(String media_id,String token){
String key = null;
//String extension = ".jpg";
String url = "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token="+token;
String json = "{\"media_id\":\""+media_id+"\"}";
key = downImage(url, json);
return key;
}
public static String downqrcode(String media_id,String ticket){
String key = null;
//String extension = ".jpg";
String url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="+ticket;
String json = "{\"media_id\":\""+media_id+"\"}";
key = downImage(url, json);
return key;
}
/**
* 查询用户所在分组
* @param token
* @param openid
* POST数据格式:json
* POST数据例子:{"openid":"od8XIjsmk6QdVTETa9jLtGWA6KBc"}
* @return
*/
@SuppressWarnings("unchecked")
public static Map groupsgetid(String token,String openid){
Map back = new HashMap();
Map groups = new HashMap();
groups.put("openid", openid);
String urlStr = "https://api.weixin.qq.com/cgi-bin/groups/getid?access_token="+token;
String json = JSONObject.fromObject(groups).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
/**
* 移动用户分组
* POST数据格式:json
* POST数据例子:{"openid":"oDF3iYx0ro3_7jD4HFRDfrjdCM58","to_groupid":108}
* @param token
* @param openid
* @param grouid
* @return {"errcode": 0, "errmsg": "ok"}
*/
@SuppressWarnings("unchecked")
public static Map groupsmemeberupdate(String token,String openid,Integer grouid){
Map back = new HashMap();
Map groups = new HashMap();
groups.put("openid", openid);
groups.put("to_groupid", grouid);
String urlStr = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token="+token;
String json = JSONObject.fromObject(groups).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
/**
* 批量移动用户分组
* POST数据格式:json
* POST数据例子:{"openid_list":["oDF3iYx0ro3_7jD4HFRDfrjdCM58","oDF3iY9FGSSRHom3B-0w5j4jlEyY"],"to_groupid":108}
* @param token
* @param param
* @return {"errcode": 0, "errmsg": "ok"}
*/
@SuppressWarnings("unchecked")
public static Map groupsmemeberbatchupdate(String token,Map param){
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/groups/members/batchupdate?access_token="+token;
String json = JSONObject.fromObject(param).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
/**
*
* @param token
* @param param
* @return
*/
@SuppressWarnings("unchecked")
public static Map sendall(String token,Map param){
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token="+token;
String json = JSONObject.fromObject(param).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
@SuppressWarnings("unchecked")
public static Map send(String token,Map param){
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token="+token;
String json = JSONObject.fromObject(param).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
@SuppressWarnings("unchecked")
public static Map preview(String token,Map param){
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token="+token;
String json = JSONObject.fromObject(param).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
@SuppressWarnings("unchecked")
public static Map messdelete(String token,Map param){
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token="+token;
String json = JSONObject.fromObject(param).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
public static Map sign(String jsapi_ticket, String url) {
Map ret = new HashMap();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +
"&url=" + url;
//System.out.println(string1);
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
public static void testsend(String[] args){
String token = "UPTPwZDO--BMDWGhbaCuo6WZKkukZVRRCdFiZLhp0xvkaTT2QWbzv8im_f5r1EWwVyks6bVjPiUoBN1RAnPHkhG8ECHkQRNVRthcVTK4afQ";
String media_id = "Pbz69tsaX-ApsEx-phLYrshzVklx4CXbdQGKSYX8Wf4";
Map params = new HashMap();
//String touser = "olDxquNH-rq1G8ICKCwrbkAOe2aA";
Map mpnews = new HashMap();
List touser = new ArrayList();
touser.add("olDxquNH-rq1G8ICKCwrbkAOe2aA");
touser.add("olDxquEEPUh5D8NZfMmhBo9jRl8A");
touser.add("olDxquJJ_IRQ8k4v_Pm6QRLZ_mlA");
mpnews.put("media_id", media_id);
params.put("touser", touser);
params.put("mpnews", mpnews);
params.put("msgtype", "mpnews");
Map back = send(token,params);
System.out.println(back);
}
public static void testsendall(String[] args){
String token = "VImhFxajkULI3av18oZ_klHb1uHRHES5qbgo20GG2bwATAd34wROSqDlp5dDuuvIZsK5qCI6ZbEqILCGlOMnijsNNIbR9JpVBxw_LDZJ5Uw";
String media_id = "Pbz69tsaX-ApsEx-phLYrshzVklx4CXbdQGKSYX8Wf4";
Map params = new HashMap();
Map mpnews = new HashMap();
Map filter = new HashMap();
filter.put("is_to_all", false);
filter.put("group_id", "101");
mpnews.put("media_id", media_id);
params.put("filter", filter);
params.put("mpnews", mpnews);
params.put("msgtype", "mpnews");
Map back = sendall(token,params);
System.out.println(back);
}
public static void testpreview(String[] args){
String token = "VImhFxajkULI3av18oZ_klHb1uHRHES5qbgo20GG2bwATAd34wROSqDlp5dDuuvIZsK5qCI6ZbEqILCGlOMnijsNNIbR9JpVBxw_LDZJ5Uw";
String media_id = "Pbz69tsaX-ApsEx-phLYrshzVklx4CXbdQGKSYX8Wf4";
Map params = new HashMap();
String touser = "olDxquNH-rq1G8ICKCwrbkAOe2aA";
Map mpnews = new HashMap();
mpnews.put("media_id", media_id);
params.put("touser", touser);
params.put("mpnews", mpnews);
params.put("msgtype", "mpnews");
Map back = preview(token,params);
System.out.println(back);
}
//创建菜单
@SuppressWarnings("unchecked")
public static Map createmenu(String token,Map param){
Map back = new HashMap();
String urlStr = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+token;
String json = JSONObject.fromObject(param).toString();
String ret = sendInfo(urlStr, json);
back = JSONObject.fromObject(ret);
return back;
}
//main方法测试
public static void main(String[] args){
//第一步:根据APPID和APPSECRECT获取token
String token = getToken().get("token").toString();
//第二步:执行相关方法
Map back = WeixinUtil.groupsmemeberupdate(token,"orBxRuGoYCdu6x35Q81e9Potg7vM",111);
System.out.println(back);
}
}