站内搜索

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

这篇文章主要为大家详细介绍了微信开发之使用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图文介绍的详细内容,更多请关注php中文网其它相关文章!