package com.weixin.util;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.*;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
/**
* 官方给的使用js的验证工具
* https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
*
*/
public class JsSignUtil {
static Logger logger = Logger.getLogger(JsSignUtil.class.getName());
public static String accessToken = null;
public static Map<String, String> sign(String url) {
accessToken = WeixinUtil.getAccessToken(AppidAndAppsecret.APPID,AppidAndAppsecret.APPSECRET).getToken();
//System.out.println("accessToken:"+accessToken);
String jsapi_ticket = WeixinUtil.getJsApiTicket(accessToken);
//System.out.println("jsapi_ticket:"+jsapi_ticket);
if(logger.isInfoEnabled()){
logger.error("jsapi_ticket:"+jsapi_ticket);
}
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +
"&url=" + url;
// System.out.println("string1="+string1);
try{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String signature2 = SHA1(string1);
ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature2);
ret.put("appId", AppidAndAppsecret.APPID);
return ret;
}
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;
}
/**
* 随机加密
* @param hash
* @return
*/
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
/**
* 产生随机串--由程序自己随机产生
* @return
*/
private static String create_nonce_str() {
return UUID.randomUUID().toString();//int noncestr = new Random().nextInt();
}
/**
* 由程序自己获取当前时间
* @return
*/
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
public static String httpPost(String url){
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost method = new HttpPost(url);
String str = "";
try {
HttpResponse result = httpClient.execute(method);
url = URLDecoder.decode(url, "UTF-8");
/**请求发送成功,并得到响应**/
if (result.getStatusLine().getStatusCode() == 200) {
try {
/**读取服务器返回过来的json字符串数据**/
str = EntityUtils.toString(result.getEntity());
} catch (Exception e) {
System.out.println("post请求提交失败:" + e.getMessage());
}
}
} catch (IOException e) {
System.out.println("post请求提交失败:" + e.getMessage());
}
return str;
}
public static String httpGet(String url){
String strResult = null;
try {
CloseableHttpClient client = HttpClients.createDefault();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
/**请求发送成功,并得到响应**/
if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) {
/**读取服务器返回过来的json字符串数据**/
strResult = EntityUtils.toString(response.getEntity());
} else {
System.out.println("get请求提交失败");
}
} catch (IOException e) {
System.out.println("get请求提交失败:" + e.getMessage());
}
return strResult;
}
/**
* 测试
*/
public static void main(String[] args) {
long startTime=System.currentTimeMillis(); //获取开始时间
JsSignUtil.sign("http://localhost:8086/jssdk");
long endTime=System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
//System.out.println(accessToken);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
微信开发入门教程 jssdk,通过config接口注入权限验证配置java+jsp微信开发教程,功能:扫描二维码,拍照、本地选图,图片预览,上传图片,下载图片,获取当前网络状态,查看地理位置,获取当前地理位置打开地图,关键是使用JsSignUtil获取了access_token,jsapi_ticket,signature,JSP页面才可以通过JS调用微信的功能
资源推荐
资源详情
资源评论
收起资源包目录
jssdk.zip (45个子文件)
jssdk
.project 381B
.settings
org.eclipse.core.resources.prefs 57B
org.eclipse.jdt.core.prefs 670B
src
log4j.properties 810B
com
weixin
util
AccessToken.java 340B
WeixinServlet.java 1KB
AppidAndAppsecret.java 507B
CheckUtil.java 1KB
WeixinUtil.java 5KB
JsSignUtil.java 6KB
webapp
css
style.css 4KB
WEB-INF
web.xml 973B
lib
log4j-1.2.12.jar 350KB
commons-codec-1.10.jar 278KB
activation.jar 54KB
xstream-1.3.1.jar 421KB
commons-lang-2.6.jar 278KB
ezmorph-1.0.6.jar 84KB
json_simple-1.1.jar 16KB
httpclient-4.5.3.jar 730KB
commons-logging-api.jar 26KB
json-lib-2.3-jdk15.jar 148KB
commons-httpclient-3.0.1.jar 273KB
httpcore-4.4.6.jar 316KB
commons-io-1.4.jar 106KB
commons-beanutils-1.7.0.jar 184KB
servlet-api.jar 86KB
commons-fileupload-1.2.1.jar 56KB
dom4j-1.6.1.jar 307KB
commons-logging-1.1.1.jar 59KB
commons-configuration-1.10.jar 354KB
commons-collections-3.2.1.jar 562KB
gson-2.3.1.jar 206KB
classes
log4j.properties 810B
com
weixin
util
WeixinUtil.class 6KB
AppidAndAppsecret.class 459B
JsSignUtil.class 7KB
AccessToken.class 757B
WeixinServlet.class 2KB
CheckUtil.class 2KB
index.jsp 10KB
js
jweixin-1.2.0.js 11KB
zepto.min.js 25KB
demo.js 18KB
.classpath 2KB
共 45 条
- 1
资源评论
伊羽@筱筱
- 粉丝: 2
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功