timestamp: , //必填,生成簽名的時間戳 nonceStr: '', // 必填,生成簽名的隨機串 signature: '',// 必填,簽名,見附錄1
wx.config({ debug: true, // 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印。 appId: '', // 必填,企業號的惟一標識,此處填寫企業號corpid timestamp: , // 必填,生成簽名的時間戳 nonceStr: '', // 必填,生成簽名的隨機串 signature: '',// 必填,簽名,見附錄1 jsApiList: [] // 必填,須要使用的JS接口列表,全部JS接口列表見附錄2 });
weixin-java-tools
WxJsapiSignaturejava
package me.chanjar.weixin.common.bean; import java.io.Serializable; /** * jspai signature * 說明:這裏借用Chanjar 開源企業號開發的方法。http://www.oschina.net/p/weixin-java-tools */ public class WxJsapiSignature implements Serializable { private String noncestr; private String jsapiTicket; private long timestamp; private String url; private String signature; public String getSignature() { return signature; } public void setSignature(String signature) { this.signature = signature; } public String getNoncestr() { return noncestr; } public void setNoncestr(String noncestr) { this.noncestr = noncestr; } public String getJsapiTicket() { return jsapiTicket; } public void setJsapiTicket(String jsapiTicket) { this.jsapiTicket = jsapiTicket; } public long getTimestamp() { return timestamp; } public void setTimestamp(long timestamp) { this.timestamp = timestamp; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } }
package me.chanjar.weixin.common.util; /* *說明:這裏借用Chanjar 開源企業號開發的方法。http://www.oschina.net/p/weixin-java-tools */ public class RandomUtils { private static final String RANDOM_STR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; private static final java.util.Random RANDOM = new java.util.Random(); public static String getRandomStr() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 16; i++) { sb.append(RANDOM_STR.charAt(RANDOM.nextInt(RANDOM_STR.length()))); } return sb.toString(); } }
/*** * 用於得到調用微信js api 接口生成簽名準備 * 說明:這裏借用Chanjar 開源企業號開發的方法。http://www.oschina.net/p/weixin-java-tools * ***/ public WxJsapiSignature createJsapiSignature(String url) throws WxErrorException { long timestamp = System.currentTimeMillis() / 1000; String noncestr = RandomUtils.getRandomStr(); String jsapiTicket = getJsapiTicket(false); try { String signature = SHA1.genWithAmple( "jsapi_ticket=" + jsapiTicket, "noncestr=" + noncestr, "timestamp=" + timestamp, "url=" + url ); WxJsapiSignature jsapiSignature = new WxJsapiSignature(); jsapiSignature.setTimestamp(timestamp); jsapiSignature.setNoncestr(noncestr); jsapiSignature.setUrl(url); jsapiSignature.setSignature(signature); return jsapiSignature; } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } }
/*** * 用於得到調用微信js api 接口生成簽名準備 * 說明:這裏借用Chanjar 開源企業號開發的方法。http://www.oschina.net/p/weixin-java-tools * ***/ public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { if (forceRefresh) { wxCpConfigStorage.expireJsapiTicket();// wxCpConfigStorage 這個類,主要用於存儲一些重要的須要被共享或者同步更新的參數。expireJsapiTicket()這個方法就是將參數的有效期時間更新爲0或者負數 } if (wxCpConfigStorage.isJsapiTicketExpired()) { synchronized (globalJsapiTicketRefreshLock) {//申明一個對象用於同步鎖用。 protected final Object globalJsapiTicketRefreshLock = new Object(); if (wxCpConfigStorage.isJsapiTicketExpired()) { String url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket"; String responseContent = execute(new SimpleGetRequestExecutor(), url, null); JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent)));//返回數據json化 JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); String jsapiTicket = tmpJsonObject.get("ticket").getAsString(); int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); wxCpConfigStorage.updateJsapiTicket(jsapiTicket, expiresInSeconds); } } } return wxCpConfigStorage.getJsapiTicket(); }
備註:這裏纔有spring框架,也能夠不用。
ajax
/** * 微信js-api 用於得到jsticket * * js url 是用於生成調用js api的簽名的url */ @RequestMapping(value = "/wechat.do") public void JsApiGet(@RequestParam String url,HttpServletResponse response) {// 用於ajax 請求的時候得到相關數據,url 爲須要生成簽名的。 // 異構的時候返回jsticket Writelog.writetolog("進來wechat.do:"+url); if (null != url && !url.equals("")) {// 若是獲取加密的URL 不爲空 try { Writelog.writetolog("jsurl:"+url);// 獲取鏈接的url WxJsapiSignature wxjssignature = wxserv .createJsapiSignature(url);// 根據添加的url 生成signature Gson gson=new Gson();//實例化 Gson 對象,借用Google 的json jar包 String signatureString=gson.toJson(wxjssignature); Writelog.writetolog("signatureString:"+signatureString);// 獲取鏈接的url PrintWriter out = response.getWriter();//輸出數據到response裏面 out.write(signatureString); //返回 json 化的對象的數據 } catch (WxErrorException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }