微信开发之使用java获取签名signature图文介绍

互联网 17-3-15
这篇文章主要为大家详细介绍了微信开发之使用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 +          "&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图文介绍的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:使用Java开发微信公众号接收和被动回复普通消息详细介绍

相关资讯