參數名稱
http://www.php.cn/wiki/835.html" target="_blank">width="346" valign= "top" style="word-break:break-all"> | 說明 |
#appId | 應用ID 登入微信公眾號管理平台可查詢 |
timestamp | 必填,產生簽章的時間戳 |
nonceStr | 必填,產生簽名的隨機串 |
#signature | 必填,簽章,見附錄1 |
##package com.test;import java.io.IOException;import java.io.PrintWriter;導入java.util. Map; 導入javax.servlet.ServletException;#匯入javax.servlet.http.HttpServlet;導入javax .servlet.http.HttpServletRequest;導入javax.servlet.http.HttpServletResponse;導入com.test.util.JsapiTicketUtil;com.test.util . Sign;publicclass# WxJsAPIServlet extends HttpServlet { /** *物件的建構子。 */ public/** * Servlet 的銷毀。 #super (); } #/** * servlet 的 doGet 方法。 * * 當表單的標籤值方法等於 get 時,請呼叫此方法。端送到伺服器的請求 * @param response 伺服器傳送至客戶端的回應 * @throws ServletException ## 錯誤則@拋出IOException # */ ## }#/**&*/## { super.destroy(); // 只要將「destroy」 string# 放入日誌 // // 將您的程式碼放在這裡 } / **&*/ public void doGet(HttpServletRequest 請求, HttpServletResponse 回應) 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行是產生 jsapi_ticket的工具類,下面有貼出工具類別的程式碼。 第45行 Sign類別的sign方法,把表格中的最後三個參數封裝放到Map集合中了。其中參數就是請求的servlet位址並跳到呼叫微信jsapi的jsp介面。 第49行 appId替換成你自己的應用id,如果不知道應用id 可登陸微信公眾平台管理中心查詢。 servlet對應的web. | xml
##package com.test.util;/*** * V型知識庫 www.vxzsk.com# */import java.util.UUID;導入java.util.Map;導入java.util.HashMap;導入java.util.Formatter;導入java.security.MessageDigest ; import java.security.NoSuchAlgorithmException;#import java.io.UnsupportedEncodingException; public class Sign { public static Map # String string1; String signature = ""; //注意這裡參數名稱必須全部小寫,且必須小區 " &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 使用動態取得,且無法 hardcode String /url是你要求的一個 action或controller位址,並且方法直接跳到使用jsapi的jsp介面 Map for (Map.Entry entry : ret.entrySet()) { ## }} #產生jsapi_ticket參數的工具類別JsapiTicketUtiltil代碼產生jsapi_ticket參數的工具類別Jsapi |
##package com.test.util;import java.io.BufferedReader;import java.io.IOException; 導入java.io.InputStreamReader;導入java.net.MalformedURLException;導入java.net.URL; ##導入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) 與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的方法,請讀者更換自己的參數即可 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();"/>
|