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

关于微信开发中使用 Java 获取签名 signature 的攻略,具体步骤如下:

关于微信开发中使用 Java 获取签名 signature 的攻略,具体步骤如下:

1. 准备工作

首先,需要在微信公众平台上创建一个开发者账号,并获取到 appID 和 appSecret。同时,需要引入一个 Java 的 SHA1 工具类,用于签名计算。

2. 获取 access_token

然后,需要通过微信提供的 API 获取 access_token。因为 access_token 的有效期只有 2 个小时,所以建议先将获取到的 access_token 保存下来,后续可以定时刷新。

前往 微信公众平台官网,登录开发者账号后,在左侧菜单中点击“开发”-“开发者工具”,进入开发者工具页面,获取 access_token 的 API 如下:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

其中 APPID 和 APPSECRET 需要替换成自己的 appID 和 appSecret。发送 GET 请求即可获取到 access_token,示例代码如下:

public static String getAccessToken(String appID, String appSecret) {
    String url = "https://api.weixin.qq.com/cgi-bin/token";
    url += "?grant_type=client_credential";
    url += "&appid=" + appID;
    url += "&secret=" + appSecret;

    String response = HttpUtil.get(url);
    JSONObject jsonObject = JSON.parseObject(response);
    return jsonObject.getString("access_token");
}

3. 计算 signature

获取到 access_token 后,就可以使用 SHA1 工具类计算 signature。signature 是校验微信服务器和开发者服务器之间通信的重要参数,需要遵循微信官网的计算规则。

具体的计算方法如下:

  1. 将参数列表去除 signature 后按照字典序排序,并用&拼接成字符串。如:jsapi_ticket=XXX&noncestr=YYY×tamp=ZZZ&url=UUU
  2. 将拼接好的字符串进行 SHA1 加密
  3. 将加密后的字符串转换为小写字母,即为 signature

示例代码如下:

public static String getSignature(String jsapiTicket, String nonceStr, String timestamp, String url) {
    String[] arr = new String[] { "jsapi_ticket=" + jsapiTicket, "noncestr=" + nonceStr, "timestamp=" + timestamp, "url=" + url };
    Arrays.sort(arr);

    StringBuilder sb = new StringBuilder();
    for (String s : arr) {
        sb.append(s).append("&");
    }
    sb.deleteCharAt(sb.length() - 1);

    String str = sb.toString();
    try {
        MessageDigest digest = MessageDigest.getInstance("SHA-1");
        digest.update(str.getBytes());
        byte[] bytes = digest.digest();
        StringBuilder result = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() == 1) {
                result.append("0");
            }
            result.append(hex);
        }
        return result.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

示例

下面给出两个示例,分别演示了如何获取 access_token 和如何计算 signature。

示例1:获取 access_token

String appID = "XXX";
String appSecret = "YYY";
String accessToken = getAccessToken(appID, appSecret);
System.out.println("access_token: " + accessToken);

示例2:计算 signature

String jsapiTicket = "XXX";
String nonceStr = "abc";
String timestamp = "123";
String url = "http://www.example.com";
String signature = getSignature(jsapiTicket, nonceStr, timestamp, url);
System.out.println("signature: " + signature);

以上就是使用 Java 获取微信签名 signature 的完整攻略。

本文标题为:微信开发之使用java获取签名signature

基础教程推荐