|
package com.ekexiu.portal.service;
import java.security.MessageDigest;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import org.jfw.apt.web.annotation.Path;
import org.jfw.apt.web.annotation.operate.Get;
import org.jfw.util.StringUtil;
import org.jfw.util.reflect.TypeReference;
import com.ekexiu.portal.util.HttpUtil;
@Path("/weixin")
public class WeixinService {
private String jsApiTicket = null;
private String jsApiOauthUrl = "https://api.weixin.qq.com/cgi-bin/token";
private String jsApiTicketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
private String jsApiAppId = "wx9803e86056ddbdd5";
private String jsApiAppSecret = "64b88e58a7adef91068b9eb364891dcb";
private String jsApiToken = null;
private long delayTime=7200L;
public long getDelayTime() {
return delayTime;
}
public void setDelayTime(long delayTime) {
this.delayTime = delayTime;
}
public String getJsApiTicket() {
return jsApiTicket;
}
public void setJsApiTicket(String jsApiTicket) {
this.jsApiTicket = jsApiTicket;
}
public String getJsApiOauthUrl() {
return jsApiOauthUrl;
}
public void setJsApiOauthUrl(String jsApiOauthUrl) {
this.jsApiOauthUrl = jsApiOauthUrl;
}
public String getJsApiTicketUrl() {
return jsApiTicketUrl;
}
public void setJsApiTicketUrl(String jsApiTicketUrl) {
this.jsApiTicketUrl = jsApiTicketUrl;
}
public String getJsApiAppId() {
return jsApiAppId;
}
public void setJsApiAppId(String jsApiAppId) {
this.jsApiAppId = jsApiAppId;
}
public String getJsApiAppSecret() {
return jsApiAppSecret;
}
public void setJsApiAppSecret(String jsApiAppSecret) {
this.jsApiAppSecret = jsApiAppSecret;
}
public String getJsApiToken() {
return jsApiToken;
}
public void setJsApiToken(String jsApiToken) {
this.jsApiToken = jsApiToken;
}
private void refreshToken() {
try {
String url = jsApiOauthUrl + "?grant_type=client_credential&appid=" + jsApiAppId + "&secret=" + jsApiAppSecret;
Map<String, Object> map = HttpUtil.loadJsonObject(url, (new TypeReference<Map<String, Object>>() {
}).getType());
this.jsApiToken = (String) map.get("access_token");
if (this.jsApiToken.length() == 0)
this.jsApiToken = null;
} catch (Exception e) {
this.jsApiToken = null;
}
}
private void refreshJsApiTicket() {
jsApiTicket = null;
if (this.jsApiToken != null) {
try {
String url = jsApiTicketUrl + "?type=jsapi&access_token=" + this.jsApiToken + "&secret=" + jsApiAppSecret;
Map<String, Object> map = HttpUtil.loadJsonObject(url, (new TypeReference<Map<String, Object>>() {
}).getType());
this.jsApiTicket = (String) map.get("ticket");
if (this.jsApiTicket.length() == 0)
this.jsApiTicket = null;
} catch (Exception e) {
this.jsApiToken = null;
}
}
}
//定时任务,2小时执行一次
public void refresh() {
this.refreshToken();
this.refreshJsApiTicket();
}
@Get
@Path("/jsapiTicket")
public Map<String, String> jsSDK_Sign(String url) throws Exception {
if (this.jsApiTicket == null)
return null;
String noncestr = StringUtil.buildUUID();
String timestamp = "" + System.currentTimeMillis();
String string1 = "jsapi_ticket=" + this.jsApiTicket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url;
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
String signature = byteToHex(crypt.digest());
Map<String, String> jssdk = new HashMap<String, String>();
jssdk.put("appId", this.jsApiAppId);
jssdk.put("timestamp", timestamp);
jssdk.put("nonceStr", noncestr);
jssdk.put("signature", signature);
return jssdk;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash) {
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
}
|