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

 更新时间:2016年08月30日 13:52:57   作者:u013142781  
这篇文章主要为大家详细介绍了微信开发之使用java获取签名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>

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 +
  "&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微信开发教程汇总》欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 从零开始使用IDEA创建SpringBoot项目(图文)

    从零开始使用IDEA创建SpringBoot项目(图文)

    这篇文章主要介绍了从零开始使用IDEA创建SpringBoot项目(图文),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • java中的空指针异常情况以及解决方案

    java中的空指针异常情况以及解决方案

    这篇文章主要介绍了java中的空指针异常情况以及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java多线程(单例模式,阻塞队列,定时器,线程池)详解

    Java多线程(单例模式,阻塞队列,定时器,线程池)详解

    本文是多线程初级入门,主要介绍了多线程单例模式、阻塞队列、定时器、线程池、多线程面试考点,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-09-09
  • Java编程用栈来求解汉诺塔问题的代码实例(非递归)

    Java编程用栈来求解汉诺塔问题的代码实例(非递归)

    这篇文章主要介绍了Java编程用栈来求解汉诺塔问题的代码实例(非递归),具有一定参考价值,这里给大家分享下,供朋友们参考。
    2017-10-10
  • SpringBoot配置@Configuration注解和@bean注解

    SpringBoot配置@Configuration注解和@bean注解

    这篇文章主要介绍了SpringBoot配置@Configuration注解和@bean注解,文章围绕主题相关内容展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • Java Swing组件文件选择器JFileChooser简单用法示例

    Java Swing组件文件选择器JFileChooser简单用法示例

    这篇文章主要介绍了Java Swing组件文件选择器JFileChooser简单用法,结合实例形式分析了Swing组件中的文件选择器JFileChooser的简单使用方法,需要的朋友可以参考下
    2017-11-11
  • log4j.properties 配置(实例讲解)

    log4j.properties 配置(实例讲解)

    下面小编就为大家带来一篇log4j.properties 配置(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • java8新特性之方法引用示例代码

    java8新特性之方法引用示例代码

    这篇文章主要给大家介绍了关于java8新特性之方法引用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • JAVA加密算法数字签名实现原理详解

    JAVA加密算法数字签名实现原理详解

    这篇文章主要介绍了JAVA加密算法数字签名实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java学习之JVM运行时常量池理解

    java学习之JVM运行时常量池理解

    这篇文章主要介绍了java学习之JVM运行时常量池理解,对常量池的好处以及基本类型的包装类常量池等作了简要分析,有需要的朋友可以借鉴参考下
    2021-09-09

最新评论