WechatDock_Enterprise.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. package com.cnd3b.utility.wechatdock;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.cnd3b.common.BaseClass;
  5. import com.cnd3b.common.data.db.DBConnect;
  6. import com.cnd3b.utility.WebRequest;
  7. import p2.pao.PaoRemote;
  8. import p2.pao.PaoSetRemote;
  9. import p2.util.P2Exception;
  10. import java.security.MessageDigest;
  11. import java.security.NoSuchAlgorithmException;
  12. import java.util.ArrayList;
  13. import java.util.Calendar;
  14. public class WechatDock_Enterprise extends BaseClass {
  15. /**
  16. * 参数连接符
  17. */
  18. public static final String QYWX_AND = "&";
  19. public static final String QYWX_EQUAL = "=";
  20. public static final String QYWX_QUERY = "?";
  21. public static final String QYWX_GET_JSAPITICKET_URL_PARAM_TICKET = "jsapi_ticket";
  22. public static final String QYWX_GET_JSAPITICKET_URL_PARAM_NONCESTR = "noncestr";
  23. public static final String QYWX_GET_JSAPITICKET_URL_PARAM_TIMESTAMP = "timestamp";
  24. public static final String QYWX_GET_JSAPITICKET_URL_PARAM_URL = "url";
  25. public static final String QYWX_GET_JSAPITICKET_RETURN_SIGNATURE = "signature";
  26. //企业ID
  27. public static String corpid = "ww6e401e63011f9f59";
  28. //应用的凭证密钥(通讯录)
  29. public static String corpsecret = "0UaJC_H6HUp4myFsJTxINeDHRAPj7Z4lYqmDMZFRmT0";
  30. //应用的凭证密钥(资料中心)
  31. public static String corpsecret1 = "uf8PZCPRPIB9pSLrgQJuK0z4kifrSIcH_VxqeyjYAt4";
  32. //应用的凭证密钥(培训学习)
  33. public static String corpsecret2 = "hBJRVc0VZ5hNk-3ItOrqcWAImWmimhQMZWhtOcX08yI";
  34. //企业应用agentid
  35. public static long agentid = 1000003;
  36. //有效期2小时,需定时刷新,重复获取将导致上次获取的失效
  37. private static String access_token = "";
  38. private static long access_token_timelimit = 0L;
  39. public static String getAccessToken() {
  40. long nowtime = Calendar.getInstance().getTimeInMillis();
  41. if (access_token_timelimit < nowtime) {
  42. String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret;
  43. String res = new WebRequest().doGet(url);
  44. JSONObject resobject = JSONObject.parseObject(res);
  45. System.err.println(resobject);
  46. if (resobject.containsKey("access_token")) {
  47. access_token = resobject.get("access_token").toString();
  48. access_token_timelimit = nowtime + 1000 * resobject.getIntValue("expires_in");
  49. }
  50. }
  51. return access_token;
  52. }
  53. /**
  54. * 重新获取一次token
  55. *
  56. * @return
  57. */
  58. public static String getAccessToken2() {
  59. long nowtime = Calendar.getInstance().getTimeInMillis();
  60. String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret;
  61. String res = new WebRequest().doGet(url);
  62. JSONObject resobject = JSONObject.parseObject(res);
  63. System.err.println(resobject);
  64. if (resobject.containsKey("access_token")) {
  65. access_token = resobject.getString("access_token");
  66. access_token_timelimit = nowtime + 1000 * resobject.getIntValue("expires_in");
  67. }
  68. return access_token;
  69. }
  70. // /**
  71. // * 获取小程序token
  72. // *
  73. // * @param type
  74. // * @return
  75. // */
  76. // public static String getMiniAppAccessToken(int type) {
  77. // String corpsecret = "";
  78. // Object access_token = "";
  79. // if (type == 1) {
  80. // corpsecret = corpsecret1;
  81. // } else {
  82. // corpsecret = corpsecret2;
  83. // }
  84. //
  85. // String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret;
  86. // String res = new WebRequest().doGet(url);
  87. // JSONObject resobject = JSONObject.parseObject(res);
  88. // System.err.println(resobject);
  89. // if (resobject.containsKey("access_token")) {
  90. // access_token = resobject.get("access_token");
  91. // }
  92. //
  93. // return access_token.toString();
  94. // }
  95. private static String access_token_zlzx = "";
  96. private static long access_token_timelimit_zlzx = 0L;
  97. /**
  98. * 资料中心token
  99. *
  100. * @return
  101. */
  102. public static String getAccessToken_zlzx() {
  103. long nowtime = Calendar.getInstance().getTimeInMillis();
  104. if (access_token_timelimit_zlzx < nowtime) {
  105. String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret1;
  106. String res = new WebRequest().doGet(url);
  107. JSONObject resobject = JSONObject.parseObject(res);
  108. System.err.println(resobject);
  109. if (resobject.containsKey("access_token")) {
  110. access_token_zlzx = resobject.get("access_token").toString();
  111. access_token_timelimit_zlzx = nowtime + 1000 * resobject.getIntValue("expires_in");
  112. }
  113. }
  114. return access_token_zlzx;
  115. }
  116. private static String access_token_pxxx = "";
  117. private static long access_token_timelimit_pxxx = 0L;
  118. /**
  119. * 培训学习token
  120. *
  121. * @return
  122. */
  123. public static String getAccessToken_pxxx() {
  124. long nowtime = Calendar.getInstance().getTimeInMillis();
  125. if (access_token_timelimit_pxxx < nowtime) {
  126. String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret2;
  127. String res = new WebRequest().doGet(url);
  128. JSONObject resobject = JSONObject.parseObject(res);
  129. System.err.println(resobject);
  130. if (resobject.containsKey("access_token")) {
  131. access_token_pxxx = resobject.get("access_token").toString();
  132. access_token_timelimit_pxxx = nowtime + 1000 * resobject.getIntValue("expires_in");
  133. }
  134. }
  135. return access_token_pxxx;
  136. }
  137. private static String ticket_zlzx = "";
  138. private static long ticket_timelimit_zlzx = 0L;
  139. /**
  140. * 资料中心ticket
  141. */
  142. public static String getTicket_zlzx() {
  143. long nowtime = Calendar.getInstance().getTimeInMillis();
  144. if (ticket_timelimit_zlzx < nowtime) {
  145. String url = "https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=" + getAccessToken_zlzx() + "&type=agent_config";
  146. String res = new WebRequest().doGet(url);
  147. JSONObject resobject = JSONObject.parseObject(res);
  148. System.err.println(resobject);
  149. if (resobject.containsKey("ticket")) {
  150. ticket_zlzx = resobject.get("ticket").toString();
  151. ticket_timelimit_zlzx = nowtime + 1000 * resobject.getIntValue("expires_in");
  152. }
  153. }
  154. return ticket_zlzx;
  155. }
  156. private static String ticket_pxxx = "";
  157. private static long ticket_timelimit_pxxx = 0L;
  158. /**
  159. * 培训学习ticket
  160. */
  161. public static String getTicket_pxxx() {
  162. long nowtime = Calendar.getInstance().getTimeInMillis();
  163. if (ticket_timelimit_pxxx < nowtime) {
  164. String url = "https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=" + getAccessToken_pxxx() + "&type=agent_config";
  165. String res = new WebRequest().doGet(url);
  166. JSONObject resobject = JSONObject.parseObject(res);
  167. System.err.println(resobject);
  168. if (resobject.containsKey("ticket")) {
  169. ticket_pxxx = resobject.get("ticket").toString();
  170. ticket_timelimit_pxxx = nowtime + 1000 * resobject.getIntValue("expires_in");
  171. }
  172. }
  173. return ticket_pxxx;
  174. }
  175. private static String ticket = "";
  176. private static long ticket_timelimit = 0L;
  177. public static String getTicket() {
  178. long nowtime = Calendar.getInstance().getTimeInMillis();
  179. if (ticket_timelimit < nowtime) {
  180. String url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=" + getAccessToken();
  181. String res = new WebRequest().doGet(url);
  182. JSONObject resobject = JSONObject.parseObject(res);
  183. System.err.println(resobject);
  184. if (resobject.containsKey("ticket")) {
  185. ticket = resobject.get("ticket").toString();
  186. ticket_timelimit = nowtime + 1000 * resobject.getIntValue("expires_in");
  187. }
  188. }
  189. return ticket;
  190. }
  191. public static JSONObject getSign(String ticket, String url) {
  192. String noncestr = getRandomString(16);
  193. String timestamp = (int) (System.currentTimeMillis() / 1000) + "";
  194. JSONObject rul = new JSONObject();
  195. String sign = "";
  196. sign += QYWX_GET_JSAPITICKET_URL_PARAM_TICKET + QYWX_EQUAL + ticket + QYWX_AND + QYWX_GET_JSAPITICKET_URL_PARAM_NONCESTR + QYWX_EQUAL + noncestr + QYWX_AND + QYWX_GET_JSAPITICKET_URL_PARAM_TIMESTAMP + QYWX_EQUAL + timestamp + QYWX_AND + QYWX_GET_JSAPITICKET_URL_PARAM_URL + QYWX_EQUAL + url;
  197. String signature = "";
  198. try {
  199. // 指定sha1算法
  200. MessageDigest digest = MessageDigest.getInstance("SHA-1");
  201. digest.update(sign.getBytes());
  202. // 获取字节数组
  203. byte messageDigest[] = digest.digest();
  204. // Create Hex String
  205. StringBuffer hexString = new StringBuffer();
  206. // 字节数组转换为 十六进制 数
  207. for (int i = 0; i < messageDigest.length; i++) {
  208. String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
  209. if (shaHex.length() < 2) {
  210. hexString.append(0);
  211. }
  212. hexString.append(shaHex);
  213. }
  214. signature = hexString.toString();
  215. } catch (NoSuchAlgorithmException e) {
  216. e.printStackTrace();
  217. }
  218. rul.put("signature", signature);
  219. rul.put("noncestr", noncestr);
  220. rul.put("timestamp", timestamp);
  221. rul.put("ticket", ticket);
  222. return rul;
  223. }
  224. /**
  225. * @param
  226. * @return 对应长度的随机字符串
  227. * @name 中文名称
  228. * @description 获取指定位数的随机字符串(包含小写字母 、 大写字母 、 数字, 0 < length)
  229. * @time 创建时间:2018年7月23日14:17:21
  230. * @author 朱浩
  231. * @history 修订历史(历次修订内容、修订人、修订时间等)
  232. */
  233. private static String getRandomString(int length) {
  234. // 随机字符串的随机字符库
  235. String KeyString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  236. StringBuffer sb = new StringBuffer();
  237. int len = KeyString.length();
  238. for (int i = 0; i < length; i++) {
  239. sb.append(KeyString.charAt((int) Math.round(Math.random() * (len - 1))));
  240. }
  241. return sb.toString();
  242. }
  243. }