參數(shù)名稱
http://www.miracleart.cn/wiki/835.html" target="_blank">width="346" valign= "top" style="word-break:break-all">? | 說明 |
#appId | 應(yīng)用ID 登入微信公眾號管理平臺可查詢 |
timestamp | ?必填,產(chǎn)生簽章的時間戳? |
nonceStr | 必填,產(chǎn)生簽名的隨機串? |
#signature | 必填,簽章,見附錄1? |
##package com.test;import java.io.IOException;import java.io.PrintWriter;導(dǎo)入java.util. Map; 導(dǎo)入javax.servlet.ServletException;#匯入javax.servlet.http.HttpServlet;導(dǎo)入javax .servlet.http.HttpServletRequest;導(dǎo)入javax.servlet.http.HttpServletResponse;導(dǎo)入com.test.util.JsapiTicketUtil;com.test.util . Sign;public?class#?WxJsAPIServlet?extends?HttpServlet?{ /**?????*?????public?/** ?????* Servlet 的銷毀。? ???????? #super(); ????} #/** ?????* servlet 的 doGet 方法。? ?????*?????*?當(dāng)表單的標籤值方法等於 get 時,請呼叫此方法。端送到伺服器的請求 ?????*?@param?response 伺服器傳送至客戶端的回應(yīng) ?????*?@throws ServletException ##?錯誤則@拋出IOException #?????*/ ##???}#/**&*/##??{ ????????super.destroy();?// 只要將「destroy」 string# 放入日誌 // // 將您的程式碼放在這裡 ????} ????/ **&*/????public?void?doGet(HttpServletRequest?請求,?HttpServletResponse?回應(yīng)) ????????System.out.println("wxJSAPI= ========= ========="); ????????String?jsapi_ticket?=JsapiTicketUtil.getJSApiTicket();??String?jsapi_ticket?=JsapiTicketUtil.getJSApiTicket();? ??,?map?=?Sign.sign(jsapi_ticket,?"http://www.vxzsk.com/weChat/wxJsAPIServlet");????????String?nonceStr?=?map.get("nonceStr");????????String?signature?=?map.get("signature");????.setAttribute("appId", appId);????????request.setAttribute("timestamp",?timestamp);????request.setAttribute("nonceStr", nonceStr);????????request.getRequestDispatcher("jsapi/jsapi.jsp ").forward(request,#response);##cue?????/**?????* Servlet 的doPost 方法。??????* ?????*?This?method?is?called?when?a?form?has?its?tag?value?method?equals?to?post.##?send?by?the?client?to?the?server ?????*?@param?response?the?response?send?by?the?server?to?the?client ?????*?IOException?if?an?error?occurred ?????* / ????public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response) ?????????this.doGet(request,?response); ???????} /** ?????* servlet 的初始化。? ?????* ?????*?若有錯誤則@拋出 ServletException #?????*/ ????public?void?init()?throws?ServletException?{ #??????? } 第44行是產(chǎn)生?jsapi_ticket的工具類,下面有貼出工具類別的程式碼。 第45行?Sign類別的sign方法,把表格中的最後三個參數(shù)封裝放到Map集合中了。其中參數(shù)就是請求的servlet位址並跳到呼叫微信jsapi的jsp介面。 第49行?appId替換成你自己的應(yīng)用id,如果不知道應(yīng)用id 可登陸微信公眾平臺管理中心查詢。 servlet對應(yīng)的web. | xml
##package com.test.util;/***?*?V型知識庫?www.vxzsk.com#?*/import java.util.UUID;導(dǎo)入java.util.Map;導(dǎo)入java.util.HashMap;導(dǎo)入java.util.Formatter;導(dǎo)入java.security.MessageDigest ; import java.security.NoSuchAlgorithmException;#import java.io.UnsupportedEncodingException;????public?class?Sign?{????public? static?Map #????String?string1; ????????String?signature?=?""; ????????//注意這裡參數(shù)名稱必須全部小寫,且必須小區(qū) ? " &noncestr="?+?nonce_str?+??????????????????"×tamp="?+?url;????????System.out.println(string1);????????嘗試????????{#????????????Message上#igest???????????crypt.reset ();????????????crypt.update (string1.getBytes("UTF-8"));#????????catch?(NoSuchAlgorithmException??race(); ????????} #????????catch?(UnsupportedEncodingException?e)????????{????????????ret.put("url",?url); ????????ret.put("jsapi_ticket", jsapi_ticket);????????ret.put("nonceStr",cnonce_str. ; ????????ret.put("簽名",?簽名);????????#return?ret;##?(final ?byte[]?哈希)?{????????格式化程式?格式化程式?=?new?Formatter();??????????{ ????????????formatter.format("%02x",?b); #?????????String?result?=?formatter.toString(); ????????formatter.close(); #??private?static?String?create_nonce_str ()?{????????return?UUID.randomUUID().toString();##????} #??return?Long.toString (System.currentTimeMillis()?/?1000); ????} ????public?static?void? main( Util .getJSApiTicket(); ????????//?注意?URL?使用動態(tài)取得,且無法?hardcode ????????String?/url是你要求的一個 action或controller位址,並且方法直接跳到使用jsapi的jsp介面????????Map ????????for?(Map.Entry?entry?:?ret.entrySet())?{ ?????????? ##????????}} #產(chǎn)生jsapi_ticket參數(shù)的工具類別JsapiTicketUtiltil代碼產(chǎn)生jsapi_ticket參數(shù)的工具類別Jsapi |
##package com.test.util;import java.io.BufferedReader;import java.io.IOException; 導(dǎo)入java.io.InputStreamReader;導(dǎo)入java.net.MalformedURLException;導(dǎo)入java.net.URL; ##導(dǎo)入java.net.URLConnection; import net.sf. json.JSONObject;import com.test.weixin.TestAcessToken; public class JsapiTicketUtil { ????/*** ?????*?模擬get請求 ?????*?@param?url ?????*?@param? ?????*/ ?????public?static?String?sendGet(String?url,?String?charset,?int?timeout) ??????{ ????????String result?=?""; ????????嘗試 ????????{ ??????????若??????????{ ????????????URLConnection conn = u.openConnection(); ????????????con?Reader?=?new?BufferedReader(new?InputStreamReader(conn.getInputStream) ( ),?字元集)); ????????????String?line=""; ?????????? null) ????????????{ ?????????????? ????????????in.close();??????????}?catch?(IOException?e)?{???????????}????????catch?(MalformedURLException?e)????????{ ??????????返回結(jié)果;????????} ????????與getAccessToken(){????????????String?appid="你在公有????????????String?url?="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+app TestAcessToken.sendGet(url, "utf-8", 10000); ????????????String?accessToken?=?(String)?JObject.fromObject(backData).?? ????????????return?accessToken; ?????} ????public? ????????//取得token ????????String?acess_token=?JsapiTicketUtil.getAccessToken( /ticket/ getticket?access_token="+acess_token+"&type=jsapi";?? ????????String?backData=TestAcessToken.sendGet(urlStr,?"utf-8. icket?=?(String)?JSONObject .fromObject(backData).get("ticket");?? ????????return??ticket;?? ????##????????String?jsapiTicket?=?JsapiTicketUtil.getJSApiTicket(); ????????S的} 上述程式碼中有一個取得access_token的方法,請讀者更換自己的參數(shù)即可 jsapi.jsp程式碼 |
## 字串路徑= request.getContextPath();字串basePath = request.getScheme()+"://"+request.getServerName()+":"+request .getServerPort ()+path+"/";%>HTML?PUBLIC?"-// HTML?PUBLIC?"-//W3C//DTD ?HTML?4.01?過渡//EN"> >????????viewport"?content="width=320.1,initial-scale= 1,minimum-scale=1,maximum-scale=1,user-scala #ble=no">????腳本>???????歡迎來到微信jsapi測試介面-V型知識庫 h3> center>??????? 時間戳:${?時間戳} ???????nonceStr:${?nonceStr} ???????簽章:${?簽章} ???????appId:${?appId} ??=「uploadImg();」/>??"?onclick="getLocation();"/>?????? |