温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

微信开发之如果使用java获取签名signature

发布时间:2021-01-21 14:37:13 来源:亿速云 阅读:280 作者:小新 栏目:移动开发

这篇文章主要介绍了微信开发之如果使用java获取签名signature,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、前言

微信接口调用验证最终需要用到的三个参数noncestr、timestamp、signature:

微信开发之如果使用java获取签名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>

三、运行结果

微信开发之如果使用java获取签名signature

四、详细代码

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 +         "&timestamp=" + 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”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI