关于微信开发中使用 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 是校验微信服务器和开发者服务器之间通信的重要参数,需要遵循微信官网的计算规则。
具体的计算方法如下:
- 将参数列表去除 signature 后按照字典序排序,并用&拼接成字符串。如:
jsapi_ticket=XXX&noncestr=YYY×tamp=ZZZ&url=UUU
- 将拼接好的字符串进行 SHA1 加密
- 将加密后的字符串转换为小写字母,即为 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 - Python技术站