java中nonce_java如何获取微信timestamp,nonceStr,signature参数
java如何獲取微信timestamp,nonceStr,signature參數
發布時間:2021-01-18 11:46:12
來源:億速云
閱讀:57
作者:小新
這篇文章主要介紹java如何獲取微信timestamp,nonceStr,signature參數,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
用java代碼來實現獲取timestamp,nonceStr,signature這三個參數
Sign代碼:package?com.test.util;
import?java.util.UUID;
import?java.util.Map;
import?java.util.HashMap;
import?java.util.Formatter;
import?java.security.MessageDigest;
import?java.security.NoSuchAlgorithmException;
import?java.io.UnsupportedEncodingException;
public?class?Sign?{
public?static?void?main(String[]?args)?{
String?jsapi_ticket?=JsapiTicketUtil.getJSApiTicket();;
//?注意?URL?一定要動態獲取,不能?hardcode
String?url?=?"http://www.vxzsk.com/xx/x.do";//url是你請求的一個action或者controller地址,并且方法直接跳轉到使用jsapi的jsp界面
Map?ret?=?sign(jsapi_ticket,?url);
for?(Map.Entry?entry?:?ret.entrySet())?{
System.out.println(entry.getKey()?+?",?"?+?entry.getValue());
}
};
public?static?Map?sign(String?jsapi_ticket,?String?url)?{
Map?ret?=?new?HashMap();
String?nonce_str?=?create_nonce_str();
String?timestamp?=?create_timestamp();
String?string1;
String?signature?=?"";
//注意這里參數名必須全部小寫,且必須有序
string1?=?"jsapi_ticket="?+?jsapi_ticket?+
"&noncestr="?+?nonce_str?+
"×tamp="?+?timestamp?+
"&url="?+?url;
System.out.println(string1);
try
{
MessageDigest?crypt?=?MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature?=?byteToHex(crypt.digest());
}
catch?(NoSuchAlgorithmException?e)
{
e.printStackTrace();
}
catch?(UnsupportedEncodingException?e)
{
e.printStackTrace();
}
ret.put("url",?url);
ret.put("jsapi_ticket",?jsapi_ticket);
ret.put("nonceStr",?nonce_str);
ret.put("timestamp",?timestamp);
ret.put("signature",?signature);
return?ret;
}
private?static?String?byteToHex(final?byte[]?hash)?{
Formatter?formatter?=?new?Formatter();
for?(byte?b?:?hash)
{
formatter.format("%02x",?b);
}
String?result?=?formatter.toString();
formatter.close();
return?result;
}
private?static?String?create_nonce_str()?{
return?UUID.randomUUID().toString();
}
private?static?String?create_timestamp()?{
return?Long.toString(System.currentTimeMillis()?/?1000);
}
}
第16行main方法中的一個變量url就是你請求的一個action或者controller地址,并且方法直接跳轉到使用jsapi的jsp界面
獲取jsapi_ticket工具類代碼:package?com.test.util;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.net.MalformedURLException;
import?java.net.URL;
import?java.net.URLConnection;
import?net.sf.json.JSONObject;
import?com.test.weixin.TestAcessToken;
/***
*?@author?V型知識庫??www.vxzsk.com
*
*/
public?class?JsapiTicketUtil?{
/***
*?模擬get請求
*?@param?url
*?@param?charset
*?@param?timeout
*?@return
*/
public?static?String?sendGet(String?url,?String?charset,?int?timeout)
{
String?result?=?"";
try
{
URL?u?=?new?URL(url);
try
{
URLConnection?conn?=?u.openConnection();
conn.connect();
conn.setConnectTimeout(timeout);
BufferedReader?in?=?new?BufferedReader(new?InputStreamReader(conn.getInputStream(),?charset));
String?line="";
while?((line?=?in.readLine())?!=?null)
{
result?=?result?+?line;
}
in.close();
}?catch?(IOException?e)?{
return?result;
}
}
catch?(MalformedURLException?e)
{
return?result;
}
return?result;
}
public?static?String?getAccessToken(){
String?appid="你公眾號基本設置里的應用id";//應用ID
String?appSecret="你公眾號基本設置里的應用密鑰";//(應用密鑰)
String?url?="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appSecret+"";
String?backData=TestAcessToken.sendGet(url,?"utf-8",?10000);
String?accessToken?=?(String)?JSONObject.fromObject(backData).get("access_token");
return?accessToken;
}
public?static?String?getJSApiTicket(){
//獲取token
String?acess_token=?JsapiTicketUtil.getAccessToken();
String?urlStr?=?"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+acess_token+"&type=jsapi";
String?backData=TestAcessToken.sendGet(urlStr,?"utf-8",?10000);
String?ticket?=?(String)?JSONObject.fromObject(backData).get("ticket");
return??ticket;
}
public?static?void?main(String[]?args)?{
String?jsapiTicket?=?JsapiTicketUtil.getJSApiTicket();
System.out.println("調用微信jsapi的憑證票為:"+jsapiTicket);
}
}
讀者可直接把代碼復制到myeclipse或者Eclipse中運行main方法即可,但是在這里提示讀者JsapiTicketUtil中獲取acces_token方法中需要讀者自行填寫自己的appid和appsecret。
以上是“java如何獲取微信timestamp,nonceStr,signature參數”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
總結
以上是生活随笔為你收集整理的java中nonce_java如何获取微信timestamp,nonceStr,signature参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flutter的按钮如何变为不可选中_F
- 下一篇: 软件开发实训需要用到的算法和结构_软件开