chenjiahe
2023-01-10 bcc2fa8323a61920c7d2a6139c38fc25b17baa7f
提交 | 用户 | age
5c5945 1 package com.hx.mp.util;
E 2
3 import net.sf.json.JSONArray;
4 import net.sf.json.JSONException;
5 import net.sf.json.JSONObject;
6 import org.apache.commons.io.IOUtils;
7
8 import java.io.OutputStream;
9 import java.net.HttpURLConnection;
10 import java.net.URL;
11
12 /**
13  * 企业微信客户工具
14  */
15 public class CorpMpClientUtil {
16
155ce4 17     /**
A 18      * 生成联系我按钮参数的链接(生成config_id)
5c5945 19      */
155ce4 20     public static final String CREATE_CONTACT_ID_URL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_contact_way?access_token=";
A 21     /**
22      * 获取企业客户详情链接
23      */
24     public static final String GET_CLIENT_DETAIL_URL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get";
25     /**
26      * 获取获取企业标签库链接
27      */
28     public static final String GET_CORP_TAG_LIST = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token=";
29     /**
30      * 添加客户联系人标签
31      */
32     public static final String ADD_TAG = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_corp_tag?access_token=";
33     /**
34      * 编辑企业客户标签
35      */
36     public static final String EDIT_TAG = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/edit_corp_tag?access_token=";
37     /**
38      * 删除客户联系人标签
39      */
40     public static final String DEL_TAG = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/del_corp_tag?access_token=";
41     /**
42      * 客户关联企业微信的标签url
43      */
44     public static final String RELATION_TAG = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag?access_token=";
5c5945 45
E 46
155ce4 47     /**
A 48      * 生成企业成员联系我的id-单人
49      *
50      * @param accessToken 企业的accessToken
51      * @param userId      企业成员的userId
52      * @param state       企业自定义的state参数,用于区分不同的添加渠道,在调用“获取外部联系人详情”时会返回该参数值,不超过30个字符
53      * @param remark      联系方式的备注信息,用于助记,不超过30个字符
54      * @return 返回
55      */
56     public static JSONObject createContactId(String accessToken, String userId, String state, String remark) {
57
58         String configId = null;
59         JSONObject data = new JSONObject();
60         data.put("type", 1);
61         data.put("scene", 1);
62         data.put("state", state);
63         data.put("remark", remark);
64         JSONArray userIds = new JSONArray();
65         userIds.add(userId);
66         data.put("user", userIds);
67
68         //请求,返回格式
5c5945 69        /*{
E 70            "errcode": 0,
71                "errmsg": "ok",
72                "config_id":"42b34949e138eb6e027c123cba77fAAA"  
73        }*/
74
155ce4 75         return HttpURLUtil(CREATE_CONTACT_ID_URL + accessToken, data.toString());
A 76     }
5c5945 77
155ce4 78     /**
A 79      * 获取企业客户详情信息
80      *
81      * @param accessToken    企业的accessToken
5c5945 82      * @param externalUserId 外部人员的userId
155ce4 83      * @return 返回
5c5945 84      */
155ce4 85     public static JSONObject getClientData(String accessToken, String externalUserId) {
5c5945 86
155ce4 87         return HttpURLUtil(GET_CLIENT_DETAIL_URL + "?access_token=" + accessToken + "&external_userid=" + externalUserId, null);
A 88     }
5c5945 89
155ce4 90     /**
A 91      * 企业可通过此接口获取企业客户标签详情
92      *
5c5945 93      * @param accessToken 企业的accessToken
155ce4 94      * @param tagId  标签id
A 95      * @param groupId 标签组id
96      * @return 返回
5c5945 97      */
155ce4 98     public static JSONObject getCorpTagList(String accessToken, JSONArray tagId, JSONArray groupId) {
A 99         JSONObject data = new JSONObject();
100         data.put("tag_id", tagId);
101         data.put("group_id", groupId);
102         return HttpURLUtil(GET_CORP_TAG_LIST + accessToken, data.toString());
103     }
5c5945 104
155ce4 105     /**
A 106      * 添加客户联系人标签,
107      * 如果要向指定的标签组下添加标签,需要填写group_id参数;如果要创建一个全新的标签组以及标签,
108      * 则需要通过group_name参数指定新标签组名称,如果填写的groupname已经存在,则会在此标签组下新建标签
109      *
110      * @param accessToken 企业的accessToken
111      * @param groupId     组id(组名称和组id必填一个)
112      * @param groupName   组名称 组名称和组id必填一个)
113      * @param groupOrder  组排序,不填默认企业微信生成规则
114      * @param tagArray    数组,格式:[{ "name": "TAG_NAME_1", "order": 1 }]
115      * @return 返回
116      */
117     public static JSONObject addTable(String accessToken, String groupId, String groupName, String groupOrder, JSONArray tagArray) {
118         JSONObject data = new JSONObject();
119         data.put("group_id", groupId);
120         data.put("group_name", groupName);
121         data.put("order", groupOrder);
122         data.put("tag", tagArray);
123         return HttpURLUtil(ADD_TAG + accessToken, data.toString());
124     }
125
126     /**
127      * 编辑企业客户标签,
128      * 注意:修改后的标签组不能和已有的标签组重名,标签也不能和同一标签组下的其他标签重名。
129      *
130      * @param accessToken 企业的accessToken
131      * @param id     标签或标签组的id
132      * @param name   新的标签或标签组名称,最长为30个字符
133      * @param order  标签/标签组的次序值。order值大的排序靠前。有效的值范围是[0, 2^32)
134      * @return 返回
135      */
136     public static JSONObject editTable(String accessToken, String id, String name, String order) {
137         JSONObject data = new JSONObject();
138         data.put("id", id);
139         data.put("name", name);
140         data.put("order", order);
141         return HttpURLUtil(EDIT_TAG + accessToken, data.toString());
142     }
143
144     /**
145      * 删除客户联系人标签
5c5945 146      * groupArr和tagArr不可同时为空。
E 147      * 如果一个标签组下所有的标签均被删除,则标签组会被自动删除。
155ce4 148      *
5c5945 149      * @param accessToken 企业的accessToken
155ce4 150      * @param groupArr    组id数组
A 151      * @param tagArr      标签id数组
152      * @return 返回
5c5945 153      */
155ce4 154     public static JSONObject delTable(String accessToken, JSONArray groupArr, JSONArray tagArr) {
A 155         JSONObject data = new JSONObject();
156         data.put("tag_id", tagArr);
157         data.put("group_id", groupArr);
158         return HttpURLUtil(DEL_TAG + accessToken, data.toString());
159     }
5c5945 160
E 161     /**
162      * 客户关联企业微信的标签
163      * 注意:请确保external_userid是userid的外部联系人。
164      * add_tag和remove_tag不可同时为空。
155ce4 165      *
A 166      * @param accessToken    企业的accessToken
167      * @param userId         企业成员的userid
5c5945 168      * @param externalUserId 外部联系人的id
155ce4 169      * @param addTag         新增的标签id(企业标签的id)数组
A 170      * @param removeTag      删除的标签id(企业标签的id)数组
171      * @return 返回
5c5945 172      */
155ce4 173     public static JSONObject relationTag(String accessToken, String userId, String externalUserId, JSONArray addTag, JSONArray removeTag) {
5c5945 174         JSONObject data = new JSONObject();
155ce4 175         data.put("userid", userId);
A 176         data.put("external_userid", externalUserId);
177         data.put("add_tag", addTag);
178         data.put("remove_tag", removeTag);
179         return HttpURLUtil(RELATION_TAG + accessToken, data.toString());
5c5945 180     }
E 181
182
155ce4 183     /**
A 184      * 请求http协议 获取信息工具
185      **/
5c5945 186     public static JSONObject HttpURLUtil(String url, String data) {
E 187         HttpURLConnection con = null;
188         URL u = null;
189         String wxMsgXml = null;
190         JSONObject obj = null;
191         try {
192             u = new URL(url);
193             con = (HttpURLConnection) u.openConnection();
194             con.setRequestMethod("POST");
195             con.setDoOutput(true);
196             con.setDoInput(true);
197             con.setUseCaches(false);
198             con.setReadTimeout(5000);
199             con.setRequestProperty("Charset", "UTF-8");
200             con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
201
202             if (data != null) {
203                 OutputStream os = con.getOutputStream();
204                 os.write(data.getBytes("utf-8"));
205             }
206
207             if (con.getResponseCode() != 200)
208                 throw new RuntimeException("请求url失败");
209             // 读取返回内容
210             wxMsgXml = IOUtils.toString(con.getInputStream(), "utf-8");
211             obj = JSONObject.fromObject(wxMsgXml);
212             // //System.out.println("HttpURLUtil:"+wxMsgXml);
213         } catch (Exception e) {
214             e.printStackTrace();
215             obj = new JSONObject();
216             try {
217                 obj.put("status", 1);
218                 obj.put("errMsg", e.getMessage());
219             } catch (JSONException e1) {
220                 e1.printStackTrace();
221             }
222         } finally {
223             if (con != null) {
224                 con.disconnect();
225             }
226         }
227         return obj;
228     }
3f9abe 229
W 230     /**生成企业成员联系我的id-单人
231      * @param accessToken 企业的accessToken
232      * @param userId 企业成员的userId
233      * @param scene 场景,1-在小程序中联系,2-通过二维码联系
234      * @param state 企业自定义的state参数,用于区分不同的添加渠道,在调用“获取外部联系人详情”时会返回该参数值,不超过30个字符
235      * @param remark 联系方式的备注信息,用于助记,不超过30个字符
236      * @return
237      */
238     public static JSONObject createContactId(String accessToken,String userId,int scene,String state,String remark){
239
240         String configId = null;
241         JSONObject data = new JSONObject();
242         data.put("type",1);
243         data.put("scene",scene);
244         data.put("state",state);
245         data.put("remark",remark);
246         JSONArray userIds = new JSONArray();
247         userIds.add(userId);
248         data.put("user",userIds);
249
250         //请求,返回格式
251        /*{
252            "errcode": 0,
253                "errmsg": "ok",
254                "config_id":"42b34949e138eb6e027c123cba77fAAA"  
255        }*/
256
257         return HttpURLUtil(CREATE_CONTACT_ID_URL+accessToken,data.toString());
258     }
5c5945 259 }