|
@@ -2,13 +2,17 @@ package com.dgtly.wxportal.utils.qywxutils;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.dgtly.common.exception.BusinessException;
|
|
|
+import com.dgtly.common.utils.StringUtils;
|
|
|
import com.dgtly.wxportal.exception.QyWeixinException;
|
|
|
import com.dgtly.common.utils.http.HttpUtils;
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
+import org.apache.commons.lang.RandomStringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
|
|
|
/**
|
|
@@ -30,6 +34,17 @@ public class QyWxAccessTokenUtil {
|
|
|
*/
|
|
|
private long expires;
|
|
|
|
|
|
+ private String jsapiTicket;
|
|
|
+
|
|
|
+ private long jsapiCreateTime;
|
|
|
+
|
|
|
+ private long jsapiExpires;
|
|
|
+
|
|
|
+ private String jsapiAgentTicket;
|
|
|
+
|
|
|
+ private long jsapiAgentCreateTime;
|
|
|
+
|
|
|
+ private long jsapiAgentExpires;
|
|
|
|
|
|
@Value(value = "${qiyeweixin.corpid:none}")
|
|
|
private String corpid;
|
|
@@ -81,6 +96,84 @@ public class QyWxAccessTokenUtil {
|
|
|
return token;
|
|
|
}
|
|
|
|
|
|
+ public String getWXSign(String url, String agent) {
|
|
|
+ long timeStampSec = System.currentTimeMillis() / 1000;
|
|
|
+ String timestamp = String.format("%010d", timeStampSec);
|
|
|
+ String nonceStr = RandomStringUtils.randomAlphanumeric(8);
|
|
|
+ String[] urls = url.split("#");
|
|
|
+ String newUrl = urls[0];
|
|
|
+ JSONObject respJson = new JSONObject();
|
|
|
+ String ticket;
|
|
|
+ if("1".equals(agent)){
|
|
|
+ ticket = getWXJsapiTicketAgent();
|
|
|
+ }else{
|
|
|
+ ticket = getWXJsapiTicket();
|
|
|
+ }
|
|
|
+
|
|
|
+ String[] signArr = new String[]{"url=" + newUrl, "jsapi_ticket=" + ticket, "noncestr=" + nonceStr, "timestamp=" + timestamp};
|
|
|
+ Arrays.sort(signArr);
|
|
|
+ String signStr = StringUtils.join(signArr, "&");
|
|
|
+ String resSign = DigestUtils.sha1Hex(signStr);
|
|
|
+ respJson.put("appId", this.corpid);
|
|
|
+ respJson.put("timestamp", timestamp);
|
|
|
+ respJson.put("nonceStr", nonceStr);
|
|
|
+ respJson.put("signature", resSign);
|
|
|
+ if ("1".equals(agent)) {
|
|
|
+ respJson.put("agentId", this.agentId);
|
|
|
+ }
|
|
|
+
|
|
|
+ return respJson.toJSONString();
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getWXJsapiTicket() {
|
|
|
+
|
|
|
+ //token未过期使用缓存的token
|
|
|
+ long currentTiem = new Date().getTime();
|
|
|
+ log.info("jsapiTicket线程id{}", Thread.currentThread().getId());
|
|
|
+ log.info("jsapiTicket过期时间为{}", this.jsapiCreateTime + this.jsapiExpires * 1000);
|
|
|
+ log.info("jsapiTicket当前时间为{}", currentTiem);
|
|
|
+ if (this.jsapiTicket != null && (currentTiem - jsapiCreateTime) < (this.jsapiExpires - 10) * 1000) {
|
|
|
+ log.info("jsapiTicket{}", this.jsapiTicket);
|
|
|
+ return this.jsapiTicket;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String url = QyWxServiceUrl.JSAPI_TICKET_URL.getformatUrl(getAccessToken());
|
|
|
+ log.info("getWXJsapiTicket url ", url);
|
|
|
+ String resp = HttpUtils.sendSSLGet(url);
|
|
|
+ log.info("getWXJsapiTicket resp ", resp);
|
|
|
+ JSONObject resJson = JSONObject.parseObject(resp);
|
|
|
+ jsapiCreateTime = new Date().getTime();
|
|
|
+ jsapiExpires = resJson.getInteger("expires_in");
|
|
|
+ jsapiTicket = resJson.getString("ticket");
|
|
|
+ return jsapiTicket;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getWXJsapiTicketAgent() {
|
|
|
+
|
|
|
+ //token未过期使用缓存的token
|
|
|
+ long currentTiem = new Date().getTime();
|
|
|
+ log.info("agentTicket线程id{}", Thread.currentThread().getId());
|
|
|
+ log.info("agentTicket过期时间为{}", this.jsapiAgentTicket + this.jsapiAgentExpires * 1000);
|
|
|
+ log.info("agentTicket当前时间为{}", currentTiem);
|
|
|
+ if (this.jsapiAgentTicket != null && (currentTiem - jsapiAgentCreateTime) < (this.jsapiAgentExpires - 10) * 1000) {
|
|
|
+ log.info("agentTicket{}", this.jsapiAgentTicket);
|
|
|
+ return this.jsapiAgentTicket;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String url = QyWxServiceUrl.JSAPI_TICKET_AGENT_URL.getformatUrl(getAccessToken());
|
|
|
+ log.info("getAgentTicket url ", url);
|
|
|
+ String resp = HttpUtils.sendSSLGet(url);
|
|
|
+ log.info("getAgentTicket resp ", resp);
|
|
|
+ JSONObject resJson = JSONObject.parseObject(resp);
|
|
|
+ jsapiAgentCreateTime = new Date().getTime();
|
|
|
+ jsapiAgentExpires = resJson.getInteger("expires_in");
|
|
|
+ jsapiAgentTicket = resJson.getString("ticket");
|
|
|
+ return jsapiAgentTicket;
|
|
|
+ }
|
|
|
+
|
|
|
public String getCorpid() {
|
|
|
return corpid;
|
|
|
}
|