$(function(){ var url = window.location.href; //Ajax注入權限驗證 $.ajax({ url:"${basePath }JSSDK/ticket.do", dataType: 'json', data: {"url" : url}, complete: function(xmlHttPRequest, textStatus){ }, error: function(xmlhttpRequest, textStatus, errorThrown){ alert("發生錯誤:"+errorThrown); }, success: function(res){ var appId = res.appId; var noncestr = res.noncestr; var jsapi_ticket = res.jsapi_ticket; var timestamp = res.timestamp; var signature = res.signature; wx.config({ debug: true, //開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。 appId: appId, //必填,公眾號的唯一標識 timestamp: timestamp, // 必填,生成簽名的時間戳 nonceStr: noncestr, //必填,生成簽名的隨機串 signature: signature,// 必填,簽名,見附錄1 jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ', 'onMenuShareWeibo','onMenuShareQZone','chooseImage', 'uploadImage','downloadImage','startRecord','stopRecord', 'onVoiceRecordEnd','playVoice','pauseVoice','stopVoice'] //必填,需要使用的JS接口列表,所有JS接口列表 見附錄2 }); } });});${appId} 是公眾號配置里獲得。
${jsapi_ticket}進入后臺頁面訪問接口獲得。
url 當前web頁的地址。
jsApiList 需要使用的JS接口列表。
后臺代碼入下(主要獲取jsapi_ticket以便生成簽名signature,傳遞給前臺):
@RequestMapping(value = "/ticket.do") public void getSignature(HttpServletRequest request, HttpServletResponse response, Model model){ String weburl = request.getParameter("url"); Long timestamp = System.currentTimeMillis()/1000; int noncestr = new Random().nextInt(); accessTokenUtil accessTokenUtil = new AccessTokenUtil(); String accessToken = accessTokenUtil.getAccessToken(); //獲取jsapi_ticket String jsapi_ticket = null; try { String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi"; String responseText = HttpUtil.get(url); jsapi_ticket = null; JSONObject object = JSONObject.fromObject(responseText); if (object.containsKey("ticket")) { jsapi_ticket = object.getString("ticket"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //生成signature List<String> nameList = new ArrayList<String>(); nameList.add("noncestr"); nameList.add("timestamp"); nameList.add("url"); nameList.add("jsapi_ticket"); Map<String, Object> valueMap = new HashMap<String, Object>(); valueMap.put("noncestr", noncestr); valueMap.put("timestamp", timestamp); valueMap.put("url", weburl); valueMap.put("jsapi_ticket", jsapi_ticket); Collections.sort(nameList); String origin = ""; for (int i = 0; i < nameList.size(); i++) { origin += nameList.get(i) + "=" + valueMap.get(nameList.get(i)).toString() + "&"; } origin = origin.substring(0, origin.length() - 1); String signature = sha1(origin); Map<String, Object> map = new HashMap<String, Object>(); map.put("jsapi_ticket", jsapi_ticket); map.put("appId", WXAccount.appid); map.put("signature", signature.toLowerCase()); map.put("timestamp", timestamp.toString()); map.put("noncestr", String.valueOf(noncestr)); response.setContentType("application/json; charset=utf-8"); PrintWriter writer = null; try { writer = response.getWriter(); JSONObject responSEObject = JSONObject.fromObject(map); writer.print(responseObject); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ writer.flush(); writer.close(); } }注意:變量timestamp、noncestr 必須作為String型傳遞給后臺,否則 IOS將一直報錯 config:fail
部分摘自微信開發者文檔......
新聞熱點
疑難解答