@Servicepublic classWxJssdkService implements IWxJssdkService {private Logger logger = LoggerFactory.getLogger(this.getClass());
@Overridepublic MapgetJssdkConfig(String url) {
Map result = new Map();try{//生成签名的随机串
String nonceStr =create_nonce_str();//生成签名的时间戳
String timestamp =create_timestamp();//签名
String signature =createSignature(url, nonceStr, timestamp);
result.setErrCode("0");
result.put("appId", WeixinUtil.APPID);
result.put("timestamp", timestamp);
result.put("nonceStr", nonceStr);
result.put("signature", signature);
}catch(Exception e) {
e.printStackTrace();
logger.info("wrong:" +e.getMessage());
result.setErrCode("-1");
}returnresult;
}privateString getJsapiTicket() {
String url= "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + WeixinUtil.getAccessToken() + "&type=jsapi";try{
String rs= RequestUtil.doGet(url, null);
JSONObject obj_content= newJSONObject(rs);
String jsapi_ticket= obj_content.getString("ticket");returnjsapi_ticket;
}catch(Exception e) {
e.printStackTrace();
logger.info("获取微信jsapiTicket错误.");
}return null;
}privateString create_timestamp() {return Long.toString(System.currentTimeMillis() / 1000);
}privateString create_nonce_str() {returnUUID.randomUUID().toString();
}private static String byteToHex(final byte[] hash) {
Formatter formatter= newFormatter();for (byteb : hash) {
formatter.format("%02x", b);
}
String result=formatter.toString();
formatter.close();returnresult;
}/**
* 根据jsapi_ticket等参数进行SHA1加密
*
* @param url 当前页面url*/
publicString createSignature(String url, String nonceStr, String timestamp) {
String jsapiTicket=getJsapiTicket();
String signature= "jsapi_ticket=" +jsapiTicket;
signature+= "&noncestr=" +nonceStr;
signature+= "×tamp=" +timestamp;
signature+= "&url=" +url;
logger.info("jsapi_ticket:{}", jsapiTicket);
logger.info("noncestr:{}", nonceStr);
logger.info("timestamp:{}", timestamp);
logger.info("url:{}", url);
logger.info("signture before:{}", signature);try{
MessageDigest crypt= MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(signature.getBytes("UTF-8"));
signature=byteToHex(crypt.digest());
logger.info("signture after:" +signature);
}catch(Exception e) {
logger.error("Signature for SHA-1 is error:{}", e);
}returnsignature;
}
}