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

作者:u013142781 时间:2022-08-01 10:47:01 

一、前言

微信接口调用验证最终需要用到的三个参数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;
}
}

五、工程下载

微信获取签名工程

更多精彩内容请点击《Android微信开发教程汇总》,《java微信开发教程汇总》欢迎大家学习阅读。

来源:http://blog.csdn.net/u013142781/article/details/50429704

标签:微信,java,签名,signature
0
投稿

猜你喜欢

  • Android 自动补全提示输入AutoCompleteTextView、 MultiAutoCompleteTextView

    2022-12-30 12:18:05
  • Java实现Redis的集合(set)命令操作

    2022-05-08 11:07:03
  • java Spring的启动原理详解

    2022-09-02 04:39:59
  • C# 7.2中结构体性能问题的解决方案

    2022-08-12 23:04:26
  • springMVC引入Validation的具体步骤详解

    2021-12-19 18:30:19
  • JAVA JDK8 List分组的实现和用法

    2023-11-26 09:56:11
  • java swing实现QQ账号密码输入框

    2023-01-13 06:26:52
  • C# 设计模式系列教程-简单工厂模式

    2023-10-31 13:49:29
  • Java实现LeetCode(54.螺旋矩阵)

    2023-01-26 20:54:00
  • Spring Security验证流程剖析及自定义验证方法

    2023-10-01 22:05:58
  • Java多线程之ThreadLocal原理总结

    2023-11-02 22:58:36
  • 实现一个基于Servlet的hello world程序详解步骤

    2022-06-21 00:22:13
  • MyBatis源码浅析(一)开篇

    2022-09-28 03:28:24
  • UnityWebRequest前后端交互实现过程解析

    2021-09-07 01:24:42
  • Android 实现界面刷新的几种方法

    2023-01-19 06:27:50
  • 浅谈Java中各种修饰符与访问修饰符的说明

    2022-10-07 00:49:52
  • java通过PDF模板填写PDF表单

    2022-05-28 16:37:48
  • C#同步和异步调用方法实例

    2022-09-11 21:20:50
  • C# 多线程对资源读写时如何控制的方法

    2023-07-12 06:45:41
  • 实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)

    2023-11-23 18:07:25
  • asp之家 软件编程 m.aspxhome.com