首页 > 代码库 > 转:微信开发之使用java获取签名signature(贴源码,附工程)

转:微信开发之使用java获取签名signature(贴源码,附工程)

 

微信开发之使用java获取签名signature(贴源码,附工程)

标签: 微信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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

三、运行结果

技术分享

四、详细代码

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;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180

五、工程下载

http://download.csdn.net/detail/u013142781/9382839

转:微信开发之使用java获取签名signature(贴源码,附工程)