微信开发之使用java获取签名signature
作者:u013142781 时间:2022-08-01 10:47:01
一、前言
微信接口调用验证最终需要用到的三个参数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 +
"×tamp=" + 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;
}
}
五、工程下载
微信获取签名工程
更多精彩内容请点击《Android微信开发教程汇总》,《java微信开发教程汇总》欢迎大家学习阅读。
来源:http://blog.csdn.net/u013142781/article/details/50429704
标签:微信,java,签名,signature
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
jar包运行时提示jar中没有主清单属性的解决
2023-11-23 19:04:10
![](https://img.aspxhome.com/file/2023/2/59532_0s.png)
浅谈SpringBoot中的@Conditional注解的使用
2021-12-07 16:47:04
![](https://img.aspxhome.com/file/2023/8/61798_0s.png)
Spring Boot学习入门之AOP处理请求详解
2023-11-27 10:55:17
java 非常好用的反射框架Reflections介绍
2022-11-25 01:25:52
![](https://img.aspxhome.com/file/2023/4/64504_0s.jpg)
springboot整合JSR303参数校验与全局异常处理的方法
2023-10-06 01:31:40
![](https://img.aspxhome.com/file/2023/5/61565_0s.png)
java文件操作之Path,Paths,Files
2023-11-19 15:34:34
Flutter Widgets粘合剂CustomScrollView NestedScrollView滚动控件
2023-07-06 01:24:29
![](https://img.aspxhome.com/file/2023/9/120089_0s.webp)
SpringBoot打Jar包在命令行运行流程详解
2023-11-24 16:53:59
![](https://img.aspxhome.com/file/2023/8/59548_0s.png)
Android中TextView动态设置缩进距离的方法
2023-08-07 09:52:00
![](https://img.aspxhome.com/file/2023/4/86754_0s.png)
java基础二叉搜索树图文详解
2023-06-01 05:43:19
![](https://img.aspxhome.com/file/2023/6/61016_0s.png)
解决@RequestBody部分属性丢失的问题
2023-08-01 15:00:21
![](https://img.aspxhome.com/file/2023/1/63171_0s.png)
Java properties 和 yml 的区别解析
2023-04-01 22:28:09
![](https://img.aspxhome.com/file/2023/4/63014_0s.png)
IntelliJ IDEA 如何配置git的操作方法
2021-12-28 11:24:44
![](https://img.aspxhome.com/file/2023/7/61037_0s.png)
基于JavaMail的Java邮件发送
2022-10-30 18:56:56
![](https://img.aspxhome.com/file/2023/1/60931_0s.jpg)
Android Flutter中Offstage组件的使用教程详解
2023-08-20 01:01:44
java中Statement 与 PreparedStatement接口之间的关系和区别
2023-11-25 03:11:11
![](https://img.aspxhome.com/file/2023/9/60029_0s.png)
Java+element实现excel的导入和导出
2022-07-31 12:45:53
![](https://img.aspxhome.com/file/2023/4/62464_0s.png)
使用jenkins部署springboot项目的方法步骤
2022-06-05 05:18:31
![](https://img.aspxhome.com/file/2023/0/62760_0s.png)
SpringMVC框架post提交数据库出现乱码解决方案
2022-03-01 09:50:41
![](https://img.aspxhome.com/file/2023/1/61421_0s.png)
Spring Boot 整合 Apache Dubbo的示例代码
2021-10-09 03:52:07
![](https://img.aspxhome.com/file/2023/8/60488_0s.jpg)