JSAPI_Ticket签名
1、微信 JS 接口签名校验工具

2、具体开发
2.1 获取access_token,然后jsapi_ticket
/**
* 获取access_token,然后jsapi_ticket
*/
private String getAccessToken_ticket(String path) {
String access_token = null; // access_token
String atime = null;// 获取时间
String a_expires_in = null;// 有效时间(s)
String ticket = null;// jsapi_ticket
String ttime = null;// 得到时间
String t_expires_in = null;// 有效时间(s)
String access_tokenStr = TUtils.getAccessToken(APPID,
API_KEY);
if (access_tokenStr != null
&& access_tokenStr.indexOf("access_token") != -1) {
try {
JSONObject jsonObject = new JSONObject(access_tokenStr);
access_token = jsonObject.getString("access_token");
a_expires_in = jsonObject.getString("expires_in");
atime = getCurrentDateStr();
} catch (JSONException e) {
// e.printStackTrace();
}
}
if (access_token != null && !access_token.equals("")) {
String ticketStr = TicketUtils.getJSAPITicket(access_token);
// System.out.println("ticketStr:" + ticketStr);
if (ticketStr != null && ticketStr.indexOf("ticket") != -1) {
try {
JSONObject jsonObject = new JSONObject(ticketStr);
ticket = jsonObject.getString("ticket");
t_expires_in = jsonObject.getString("expires_in");
ttime = getCurrentDateStr();
} catch (JSONException e) {
// e.printStackTrace();
}
}
}
String result = null;
if (ticket != null && !ticket.equals("")) {
result = "{\"access_token\":\"" + access_token
+ "\",\"a_expires_in\":\"" + a_expires_in
+ "\",\"atime\":\"" + atime + "\",\"ticket\":\"" + ticket
+ "\",\"t_expires_in\":\"" + t_expires_in
+ "\",\"ttime\":\"" + ttime + "\"}";
if (MyFileUtils.writeIntoText(path, result)) {
// System.out.println("写入文件成功");
// System.out.println(result);
} else {
System.out.println("写入微信签名文件失败");
}
}
return result;
}
public static String getAccessToken(String APPID, String APPSECRET) {
String url = "https://api.weixin.qq.com/cgi-bin/token";
String params = "grant_type=client_credential&appid=" + APPID
+ "&secret=" + APPSECRET;
String resultStr = HttpRequest.sendGet(url, params);
// sendGet:用get方法获取数据 ,具体请参考之间的关于微信的文章 http://www.cnblogs.com/jiduoduo/p/5749363.html
return resultStr;
}
/**
* 根据access_token获取ticket { "errcode":0, "errmsg":"ok", "ticket":
* "bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA"
* , "expires_in":7200 }
*
* @param access_token
* @return
*/
public static String getJSAPITicket(String access_token) {
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
String params = "type=jsapi&access_token=" + access_token;
String resultStr = HttpRequest.sendGet(url, params); return resultStr;
}
2.2具体生成签名signature
public String Wx_Signature() {
String path = ServletActionContext.getServletContext().getRealPath(
"/wx/");
// System.out.println(path);
try {
String tokenJSON = MyFileUtils.readText(path);
// String access_token = null; // access_token
String atime = null;// 获取时间
String a_expires_in = null;// 有效时间(s)
String ticket = null;// jsapi_ticket
// String ttime = null;// 得到时间
// String t_expires_in = null;// 有效时间(s)
String result = tokenJSON;
if (result == null || result.equals("")) {
tokenJSON = getAccessToken_ticket(path);
}
// System.out.println(result);
if (tokenJSON != null && !tokenJSON.equals("")
&& tokenJSON.indexOf("access_token") != -1) {
try {
JSONObject jsonObject = new JSONObject(tokenJSON);
// access_token = jsonObject.getString("access_token");//
// access_token
atime = jsonObject.getString("atime");// 开始时间
a_expires_in = jsonObject.getString("a_expires_in");// 有效时间
ticket = jsonObject.getString("ticket");// jsapi_ticket
// System.out.println(ticket);
// ttime = jsonObject.getString("ttime");// 开始时间
// t_expires_in = jsonObject.getString("t_expires_in");//
// 有效时间
String t1 = getCurrentDateStr();
String t2 = atime;
// System.out.println(atime);
// System.out.println(a_expires_in);
// System.out.println(TimeInterval.getInterval(t2, t1));
long end_time = Long.parseLong(a_expires_in) - 60;
if (TimeInterval.getInterval(t2, t1) > end_time) {
ticket = getAccessToken_ticket(path);
}
} catch (JSONException e) {
msg = e.getMessage();
}
} else {
}
// System.out.println(ticket);
String url = getParameter("url");
String noncestr = TUtils.getRandomString(16);
String timestamp = System.currentTimeMillis() + "";
timestamp = timestamp.substring(0, 10);
String data = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr
+ "×tamp=" + timestamp + "&url=" + url;
String digest = new SHA1().getDigestOfString(data.getBytes());
String signature = digest.toLowerCase();// signature
result = "{\"noncestr\":\"" + noncestr + "\",\"timestamp\":\""
+ timestamp + "\",\"url\":\"" + url + "\",\"signature\":\""
+ signature + "\" ,\"ticket\":\"" + ticket + "\"}";
msg = result;
} catch (IOException e) {
msg = e.getMessage();
}
return msg
}
说明:签名是有调用次数,需要将其cache到服务器的文件中。
JSAPI_Ticket签名的更多相关文章
- 微信--获取jsapi_ticket 然后在计算出signature
最近做微信公众号,记录一下,仅供参看. 关于jsapi_ticket微信公众号有相关说明: 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临 ...
- 微信开发---------jsapi_ticket拿不到的问题。
今天代码没动,出现的问题是分享朋友圈,朋友,分享到QQ,我设置的分享链接都失效了.找来找去也不知道什么原因,没办法就只有一个个打印参数并查看文档,先把jssdk页面上的debug设置为true(微信原 ...
- 微信js获得签名signature
服务器端: 1 获取微信js accessToken 备注:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 开发者需要进行妥善保存.access_ ...
- node实现创建服务器获取wx jssdk签名
// system module var http = require("http"); var https = require("https"); var u ...
- 关于微信的jsapi_ticket的获取方法;
对于一个从前端转到后端的开发人员来说,这个玩意儿开始的时候是有点郁闷:不过明白原理之后就简单了, 获取jsapi_ticket:必须先获取access_token; 微信开发文档说access_tok ...
- 微信网页签名失败(invalid signature)
签名失败,建议按以下步骤排查 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认con ...
- 转:微信开发之使用java获取签名signature(贴源码,附工程)
微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报 分类: 微信开发 ...
- 微信开发之获取jsapi_ticket
一.获取流程 1.获取 access_token 2.通过access_token换取 jsapi_ticket 3.签名算法 签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有 ...
- JSSDK实现微信自定义分享---java 后端获取签名信息
一.首先说下关于微信Access_token的问题,微信Access_token分为2中: 1.授权token获取方式: 这种token需要code值(如何获取code值查看官方文档) "h ...
随机推荐
- go五笔——基于Google在线五笔制作
go五笔 v0.0.2 加入新世纪版 86版收录几个不常用汉字,其它无更新 下载 86版64位密码: qe7k 86版32位密码: y25a 06版64位密码: d2ug 06版32位密码: bxxz ...
- VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录
VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录 一.描述 系统描述:win7旗舰版64位系统+VMware Workst ...
- asp.net 配置 X-Frame-Options
近日网站在安全检查,送检的网站被反馈有以下问题 X-Frame-Options Header未配置 漏洞描述: 弱点描述: X-Frame-Options HTTP响应头可以指示浏览器是否允许当前网页 ...
- sql server数据库中 smallint, int ,bigint ,tinyint的区别与长度
smallint 是一种精确的数值数据类型,其精度在算术运算后不变,采用2个字节编码 有符号的 smallint 值的范围是 -2^15-------2^15 -1,即 -32768 ----327 ...
- noip2008 笨小猴
P1125 笨小猴 1.6K通过 3.7K提交 题目提供者该用户不存在 标签模拟2008NOIp提高组 难度普及- 提交该题 讨论 题解 记录 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的 ...
- JMeter笔记3:聚合报告之90%Line参数说明
看看JMeter 官网是怎么说的? 90% Line - 90% of the samples took no more than this time. The remaining samples a ...
- sublime Text2 2.0.2 build 2221 64位 破解(已测试)
近终于找到 sublime Text2 升级到 2.0.2 build 2221 64位 的破破解 输入注册码就成了 ----- BEGIN LICENSE ----- Andrew Weber S ...
- facelets标签
facelets标签 <ui:component>标签用于JSF组件树中插入一个uicomponent实例,并作为它包含的的组件和内容片断的根节点,这视图中这个标签以外的的内容被编译器忽略 ...
- Android:控件布局(表格布局)TableLayout
TableLayout继承LinearLayout 实例:用表格布局实现计算机布局>>>>>>>>>>>> 有多少个TableR ...
- 网络流量监控shell脚本
网络收发包计数记录在 /proc/net/dev 文件中, 要取得流量, 只需要读取里面的内容两次, 然后相减, 再除以时间间隔即可. #!/bin/bash #Usage1,record in fi ...