E1ED922C1E9526DD63272D7EC5C6CB77
2020-09-23 5c59454c8a12b1a19846c23c99cff612db037e4f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
package com.hx.mp.util;
 
import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import org.apache.commons.io.IOUtils;
 
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.MessageFormat;
 
/**
 * 企业微信客户工具
 */
public class CorpMpClientUtil {
 
   /**生成联系我按钮参数的链接(生成config_id)*/
   public static final String CREATE_CONTACT_ID_URL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_contact_way?access_token=";
   /**获取企业客户详情链接*/
   public static final String GET_CLIENT_DETAIL_URL = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get";
   /**添加客户联系人标签*/
   public static final String ADD_TAG = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_corp_tag?access_token=";
   /**删除客户联系人标签*/
   public static final String DEL_TAG = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/del_corp_tag?access_token=";
   /**客户关联企业微信的标签url*/
   public static final String RELATION_TAG = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag?access_token=";
 
 
    /**生成企业成员联系我的id-单人
     * @param accessToken 企业的accessToken
     * @param userId 企业成员的userId
     * @param state 企业自定义的state参数,用于区分不同的添加渠道,在调用“获取外部联系人详情”时会返回该参数值,不超过30个字符
     * @param remark 联系方式的备注信息,用于助记,不超过30个字符
     * @return
     */
   public static JSONObject createContactId(String accessToken,String userId,String state,String remark){
 
       String configId = null;
       JSONObject data = new JSONObject();
       data.put("type",1);
       data.put("scene",1);
       data.put("state",state);
       data.put("remark",remark);
       JSONArray userIds = new JSONArray();
       userIds.add(userId);
       data.put("user",userIds);
 
       //请求,返回格式
       /*{
           "errcode": 0,
               "errmsg": "ok",
               "config_id":"42b34949e138eb6e027c123cba77fAAA"  
       }*/
 
       return HttpURLUtil(CREATE_CONTACT_ID_URL+accessToken,data.toString());
   }
 
    /**获取企业客户详情信息
     * @param accessToken 企业的accessToken
     * @param externalUserId 外部人员的userId
     * @return
     */
   public static JSONObject getClientData(String accessToken,String externalUserId){
 
       return HttpURLUtil(GET_CLIENT_DETAIL_URL+"?access_token="+accessToken+"&external_userid="+externalUserId,null);
   }
 
    /** 添加客户联系人标签,
     *如果要向指定的标签组下添加标签,需要填写group_id参数;如果要创建一个全新的标签组以及标签,
     *则需要通过group_name参数指定新标签组名称,如果填写的groupname已经存在,则会在此标签组下新建标签
     * @param accessToken 企业的accessToken
     * @param groupId 组id(组名称和组id必填一个)
     * @param groupName 组名称 组名称和组id必填一个)
     * @param groupOrder 组排序,不填默认企业微信生成规则
     * @param tagArray 数组,格式:[{ "name": "TAG_NAME_1", "order": 1 }]
     * @return
     */
   public static JSONObject addTable(String accessToken,String groupId,String groupName,String groupOrder,JSONArray tagArray){
       JSONObject data = new JSONObject();
       data.put("group_id",groupId);
       data.put("group_name",groupName);
       data.put("order",groupOrder);
       data.put("tag",tagArray);
       return HttpURLUtil(ADD_TAG+accessToken,data.toString());
   }
 
    /**删除客户联系人标签
     * groupArr和tagArr不可同时为空。
     * 如果一个标签组下所有的标签均被删除,则标签组会被自动删除。
     * @param accessToken 企业的accessToken
     * @param groupArr 组id数组
     * @param tagArr 标签id数组
     * @return
     */
   public static JSONObject delTable(String accessToken,JSONArray groupArr,String tagArr){
       JSONObject data = new JSONObject();
       data.put("tag_id",tagArr);
       data.put("group_id",groupArr);
       return HttpURLUtil(DEL_TAG+accessToken,data.toString());
   }
 
    /**
     * 客户关联企业微信的标签
     * 注意:请确保external_userid是userid的外部联系人。
     * add_tag和remove_tag不可同时为空。
     * @param accessToken 企业的accessToken
     * @param userId 企业成员的userid
     * @param externalUserId 外部联系人的id
     * @param addTag 新增的标签id(企业标签的id)数组
     * @param removeTag 删除的标签id(企业标签的id)数组
     * @return
     */
    public static JSONObject relationTag(String accessToken,String userId,String externalUserId
            ,JSONArray addTag,JSONArray removeTag){
        JSONObject data = new JSONObject();
        data.put("userid",userId);
        data.put("external_userid",externalUserId);
        data.put("add_tag",addTag);
        data.put("remove_tag",removeTag);
        return HttpURLUtil(RELATION_TAG+accessToken,data.toString());
    }
 
 
    /** 请求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;
    }
}