package com.hx.mp.util; import com.hx.exception.TipsException; import com.hx.util.StringUtils; import net.sf.json.JSONException; import net.sf.json.JSONObject; import org.apache.commons.io.IOUtils; import org.apache.poi.util.SystemOutLogger; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.text.MessageFormat; /** * 企业微信工具类 */ public class CorpMpUtil { /**链接-获取应用accessToken*/ public static final String URL_GET_ACCESS_TOKEN = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}"; /**链接-获取session信息*/ public static final String URL_CODE_2_SESSION = "https://qyapi.weixin.qq.com/cgi-bin/miniprogram/jscode2session?access_token={0}&js_code={1}&grant_type=authorization_code"; /**链接-添加标签*/ public static final String URL_ADD_LABEL = "https://qyapi.weixin.qq.com/cgi-bin/tag/create?access_token={0}"; /**链接-添加部门*/ public static final String URL_ADD_DEPARTMENT = "https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token={0}"; /**链接-修改部门*/ public static final String URL_UPDATE_DEPARTMENT = "https://qyapi.weixin.qq.com/cgi-bin/department/update?access_token={0}"; /**链接-删除部门*/ public static final String URL_DELETE_DEPARTMENT = "https://qyapi.weixin.qq.com/cgi-bin/department/delete?access_token={0}&id={1}"; /**链接-添加成员*/ public static final String URL_ADD_USER = "https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token={0}"; /**链接-更新成员*/ public static final String URL_UPDATE_USER = "https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token={0}"; /**链接-删除成员*/ public static final String URL_DELETE_USER = "https://qyapi.weixin.qq.com/cgi-bin/user/delete?access_token={0}&userid={1}"; /**链接-成员详情*/ public static final String URL_INFO_USER = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={0}&userid={1}"; /**发送消息*/ public static final String URL_MESSAGE_SEND = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="; /** * 添加工作人员 * @param at 访问at * @param userId 用户id * @param name 名称 * @param depId 部门id * @param position 职位 * @param tel 电话 * @param email 邮箱 * @return 返回 */ public static int addUser(String at, String userId, String name, int depId , String position,String tel,String email) { if(StringUtils.isEmpty(tel)&&StringUtils.isEmpty(email)){ throw new TipsException("添加企业微信手机号和邮箱不能都为空!"); } JSONObject obj = new JSONObject(); obj.put("userid", userId); obj.put("name", name); obj.put("department", depId); obj.put("position", position); obj.put("mobile", tel); obj.put("email", email); obj = HttpURLUtil(MessageFormat.format(URL_ADD_USER, at), obj.toString()); if(obj != null) { return obj.optInt("errcode", -1); } return -1; } /** * 更新工作人员 * @param at 访问at * @param userId 用户id * @param name 名称 * @param depId 部门id * @param position 职位 * @param tel 电话 * @param email 邮箱 * @return 返回 */ public static int updateUser(String at, String userId, String name, int depId , String position,String tel,String email) { JSONObject obj = new JSONObject(); obj.put("userid", userId); obj.put("name", name); obj.put("department", depId); obj.put("position", position); obj.put("mobile", tel); obj.put("email", email); obj = HttpURLUtil(MessageFormat.format(URL_UPDATE_USER, at), obj.toString()); if(obj != null && obj.optInt("errcode", -1) == 0) { return obj.optInt("errcode", -1); } return -1; } /** * 删除工作人员 * @param at 访问at * @param userId 用户id * @return 返回 */ public static int deleteUser(String at, String userId) { JSONObject obj = new JSONObject(); obj.put("userid", userId); obj = HttpURLUtil(MessageFormat.format(URL_DELETE_USER, at,userId), obj.toString()); if(obj != null) { return obj.optInt("errcode", -1); } return -1; } /** * 工作人员判断是否存在企业微信 * @param at 访问at * @param userId 用户id * @return 返回 */ public static int infoUser(String at, String userId) { JSONObject obj = new JSONObject(); obj.put("userid", userId); obj = HttpURLUtil(MessageFormat.format(URL_INFO_USER, at,userId), obj.toString()); System.out.println("userId:"+userId); System.out.println("obj:"+obj.toString()); if(obj != null) { return obj.optInt("errcode", -1); } return -1; } /** * 添加部门 * @param name 部门名称 * @return id */ public static int addDepartment(String at, String name, int parentId) { JSONObject obj = new JSONObject(); obj.put("name", name); obj.put("parentid", parentId); obj = HttpURLUtil(MessageFormat.format(URL_ADD_DEPARTMENT, at), obj.toString()); if(obj != null && obj.optInt("errcode", -1) == 0) { return obj.optInt("id", -1); } return -1; } /** * 更新部门 * @param name 部门名称 * @param deaprtId 部门id * @param parentid 父类部门id,可以为空 * @return 状态,0成功 */ public static int updateDepartment(String at, String name, int deaprtId,int parentid) { JSONObject obj = new JSONObject(); obj.put("name", name); obj.put("id", deaprtId); obj.put("parentid", parentid); obj = HttpURLUtil(MessageFormat.format(URL_UPDATE_DEPARTMENT, at), obj.toString()); return obj.optInt("errcode", -1); } /**删除部门 * 删除的部门不能是根部门且没有成员 * @param deaprtId 部门id * @return 状态,0成功 */ public static int deleteDepartment(String at,int deaprtId) { JSONObject obj = new JSONObject(); obj.put("id", deaprtId); obj = HttpURLUtil(MessageFormat.format(URL_DELETE_DEPARTMENT,at,deaprtId), obj.toString()); System.out.println("删除部门:"+obj.toString()); return obj.optInt("errcode", -1); } /**发送企业应用消息 * @param accessToken 企业accessToken * @param data 发送数据结构 * @return */ public static JSONObject messageSend(String accessToken,String data){ return HttpURLUtil(URL_MESSAGE_SEND+accessToken,data); } /**添加用户标签,标签名称不能重复 * @param at 访问at * @param label 标签名称 * @return 返回 -1失败,0成功,1已存在 */ public static int addLabel(String at, String label) { String url = MessageFormat.format(URL_ADD_LABEL, at); JSONObject obj = new JSONObject(); obj.put("tagname", label); obj = HttpURLUtil(url, obj.toString()); System.out.println("obj....:"+obj.toString()); if(obj != null ) { int errcode = obj.optInt("errcode", -1); if( errcode== 0){ //上传成功 return obj.optInt("tagid", -1); }if(errcode == 40071){ //标签已经存在 return 1; } } return -1; } /** * 获取应用accessToken * @param corpId 企业id * @param appSecret 应用密钥 * @return * @throws Exception */ public static JSONObject getApplicationAccessToken(String corpId, String appSecret) { String url = MessageFormat.format(URL_GET_ACCESS_TOKEN, corpId, appSecret); JSONObject obj = HttpURLUtil(url, null); return obj; } /** * 使用临时登录凭证code获取 session_key、用户userId以及用户所在企业的corpId等信息 * @param accessToken 访问token * @param code 临时code * @return */ public static JSONObject code2Session(String accessToken, String code) { String url = MessageFormat.format(URL_CODE_2_SESSION, accessToken, code); JSONObject obj = HttpURLUtil(url, null); return obj; } /** 请求http协议 获取信息工具 **/ public static JSONObject HttpURLUtil(String url, String data) { HttpURLConnection con = null; URL u = null; String wxMsgXml = null; JSONObject obj = null; try { u = new URL(url); con = (HttpURLConnection) u.openConnection(); con.setRequestMethod("POST"); con.setDoOutput(true); con.setDoInput(true); con.setUseCaches(false); con.setReadTimeout(5000); con.setRequestProperty("Charset", "UTF-8"); con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); if (data != null) { OutputStream os = con.getOutputStream(); os.write(data.getBytes("utf-8")); } if (con.getResponseCode() != 200) throw new RuntimeException("请求url失败"); // 读取返回内容 wxMsgXml = IOUtils.toString(con.getInputStream(), "utf-8"); obj = JSONObject.fromObject(wxMsgXml); // //System.out.println("HttpURLUtil:"+wxMsgXml); } catch (Exception e) { e.printStackTrace(); obj = new JSONObject(); try { obj.put("status", 1); obj.put("errMsg", e.getMessage()); } catch (JSONException e1) { e1.printStackTrace(); } } finally { if (con != null) { con.disconnect(); } } return obj; } }