您好,登錄后才能下訂單哦!
這篇文章主要介紹了微信開發之如果使用java獲取簽名signature,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
一、前言
微信接口調用驗證最終需要用到的三個參數noncestr、timestamp、signature:
接下來將會給出獲取這三個參數的詳細代碼
本文的環境eclipse + maven
本文使用到的技術HttpClient、Json字符串轉map、sha1加密
二、需要用到的jar包
maven依賴的包有:
1、HttpClient包依賴
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.3</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.1</version> </dependency>
2、json轉map相關包依賴
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>xom</groupId> <artifactId>xom</artifactId> <version>1.2.5</version> </dependency>
三、運行結果
四、詳細代碼
package com.luo.util; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import net.sf.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; public class HttpXmlClient { public static String post(String url, Map<String, String> params) { DefaultHttpClient httpclient = new DefaultHttpClient(); String body = null; HttpPost post = postForm(url, params); body = invoke(httpclient, post); httpclient.getConnectionManager().shutdown(); return body; } public static String get(String url) { DefaultHttpClient httpclient = new DefaultHttpClient(); String body = null; HttpGet get = new HttpGet(url); body = invoke(httpclient, get); httpclient.getConnectionManager().shutdown(); return body; } private static String invoke(DefaultHttpClient httpclient, HttpUriRequest httpost) { HttpResponse response = sendRequest(httpclient, httpost); String body = paseResponse(response); return body; } private static String paseResponse(HttpResponse response) { HttpEntity entity = response.getEntity(); String charset = EntityUtils.getContentCharSet(entity); String body = null; try { body = EntityUtils.toString(entity); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return body; } private static HttpResponse sendRequest(DefaultHttpClient httpclient, HttpUriRequest httpost) { HttpResponse response = null; try { response = httpclient.execute(httpost); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return response; } private static HttpPost postForm(String url, Map<String, String> params) { HttpPost httpost = new HttpPost(url); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); Set<String> keySet = params.keySet(); for (String key : keySet) { nvps.add(new BasicNameValuePair(key, params.get(key))); } try { httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return httpost; } public static void main(String[] args) { //獲取access_token Map<String, String> params = new HashMap<String, String>(); params.put("corpid","wx5f24fa0db1819ea2"); params.put("corpsecret","uQtWzF0bQtl2KRHX0amekjpq8L0aO96LSpSNfctOBLRbuYPO4DUBhMn0_v2jHS-9"); String xml = HttpXmlClient.post("https://qyapi.weixin.qq.com/cgi-bin/gettoken",params); JSONObject jsonMap = JSONObject.fromObject(xml); Map<String, String> map = new HashMap<String, String>(); Iterator<String> it = jsonMap.keys(); while(it.hasNext()) { String key = (String) it.next(); String u = jsonMap.get(key).toString(); map.put(key, u); } String access_token = map.get("access_token"); System.out.println("access_token=" + access_token); //獲取ticket params.put("access_token",access_token); xml = HttpXmlClient.post("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket",params); jsonMap = JSONObject.fromObject(xml); map = new HashMap<String, String>(); it = jsonMap.keys(); while(it.hasNext()) { String key = (String) it.next(); String u = jsonMap.get(key).toString(); map.put(key, u); } String jsapi_ticket = map.get("ticket"); System.out.println("jsapi_ticket=" + jsapi_ticket); //獲取簽名signature String noncestr = UUID.randomUUID().toString(); String timestamp = Long.toString(System.currentTimeMillis() / 1000); String url="http://mp.weixin.qq.com"; String str = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url; //sha1加密 String signature = SHA1(str); System.out.println("noncestr=" + noncestr); System.out.println("timestamp=" + timestamp); System.out.println("signature=" + signature); //最終獲得調用微信js接口驗證需要的三個參數noncestr、timestamp、signature } /** * @author:羅國輝 * @date: 2015年12月17日 上午9:24:43 * @description: SHA、SHA1加密 * @parameter: str:待加密字符串 * @return: 加密串 **/ public static String SHA1(String str) { try { MessageDigest digest = java.security.MessageDigest .getInstance("SHA-1"); //如果是SHA加密只需要將"SHA-1"改成"SHA"即可 digest.update(str.getBytes()); byte messageDigest[] = digest.digest(); // Create Hex String StringBuffer hexStr = new StringBuffer(); // 字節數組轉換為 十六進制 數 for (int i = 0; i < messageDigest.length; i++) { String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); if (shaHex.length() < 2) { hexStr.append(0); } hexStr.append(shaHex); } return hexStr.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } }
感謝你能夠認真閱讀完這篇文章,希望小編分享的“微信開發之如果使用java獲取簽名signature”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。