1 package com.foxinmy.weixin4j.qy.jssdk;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import com.alibaba.fastjson.JSONObject;
7 import com.foxinmy.weixin4j.exception.WeixinException;
8 import com.foxinmy.weixin4j.model.Token;
9 import com.foxinmy.weixin4j.token.TokenManager;
10 import com.foxinmy.weixin4j.util.DateUtil;
11 import com.foxinmy.weixin4j.util.DigestUtil;
12 import com.foxinmy.weixin4j.util.MapUtil;
13 import com.foxinmy.weixin4j.util.RandomUtil;
14
15
16
17
18
19
20
21
22
23 public class JSSDKContactConfigurator {
24 private final TokenManager ticketTokenManager;
25 private JSSDKContactParameter contactParameter;
26
27
28
29
30
31
32 public JSSDKContactConfigurator(TokenManager ticketTokenManager) {
33 this.ticketTokenManager = ticketTokenManager;
34 this.contactParameter = new JSSDKContactParameter();
35 }
36
37
38
39
40
41
42
43 public JSSDKContactConfigurator partyIds(Integer... partyIds) {
44 contactParameter.putPartyIds(partyIds);
45 return this;
46 }
47
48
49
50
51
52
53
54 public JSSDKContactConfigurator tagIds(Integer... tagIds) {
55 contactParameter.putTagIds(tagIds);
56 return this;
57 }
58
59
60
61
62
63
64
65 public JSSDKContactConfigurator userIds(String... userIds) {
66 contactParameter.putUserIds(userIds);
67 return this;
68 }
69
70
71
72
73
74
75 public JSSDKContactConfigurator singleMode() {
76 contactParameter.setMode("single");
77 return this;
78 }
79
80
81
82
83
84
85 public JSSDKContactConfigurator multiMode() {
86 contactParameter.setMode("multi");
87 return this;
88 }
89
90
91
92
93
94
95 public JSSDKContactConfigurator limitDepartment() {
96 contactParameter.putLimitType("department");
97 return this;
98 }
99
100
101
102
103
104
105 public JSSDKContactConfigurator limitTag() {
106 contactParameter.putLimitType("tag");
107 return this;
108 }
109
110
111
112
113
114
115 public JSSDKContactConfigurator limitUser() {
116 contactParameter.putLimitType("user");
117 return this;
118 }
119
120
121
122
123
124
125
126 public JSSDKContactConfigurator selectedDepartmentIds(
127 Integer... selectedDepartmentIds) {
128 contactParameter.putSelectedDepartmentIds(selectedDepartmentIds);
129 return this;
130 }
131
132
133
134
135
136
137
138 public JSSDKContactConfigurator selectedTagIds(Integer... selectedTagIds) {
139 contactParameter.putSelectedTagIds(selectedTagIds);
140 return this;
141 }
142
143
144
145
146
147
148
149 public JSSDKContactConfigurator selectedUserIds(String... selectedUserIds) {
150 contactParameter.putSelectedUserIds(selectedUserIds);
151 return this;
152 }
153
154
155
156
157
158
159
160
161
162 public String toJSONConfig(String url) throws WeixinException {
163 return toJSONConfig(url, contactParameter);
164 }
165
166
167
168
169
170
171
172
173
174
175
176 public String toJSONConfig(String url, JSSDKContactParameter parameter)
177 throws WeixinException {
178 Map<String, String> signMap = new HashMap<String, String>();
179 String timestamp = DateUtil.timestamp2string();
180 String noncestr = RandomUtil.generateString(24);
181 Token token = this.ticketTokenManager.getCache();
182 signMap.put("timestamp", timestamp);
183 signMap.put("nonceStr", noncestr);
184 signMap.put("group_ticket", token.getAccessToken());
185 signMap.put("url", url);
186 String sign = DigestUtil.SHA1(MapUtil
187 .toJoinString(signMap, false, true));
188 JSONObject config = new JSONObject();
189 config.put("signature", sign);
190 config.put("groupId", token.getExtra().get("group_id"));
191 config.put("timestamp", timestamp);
192 config.put("noncestr", noncestr);
193 config.put("params", parameter);
194 return config.toJSONString();
195 }
196 }