微信JSAPI Ticket接口签名详解
发布时间 - 2026-01-11 02:13:34 点击率:次本文实例为大家分享了微信JS接口签名的具体代码,供大家参考,具体内容如下

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到服务器的文件中。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# 微信
# JS
# 签名
# 微信封装的调用微信签名包的类库
# 微信开发之获取JSAPI TICKET
# 微信JSAPI支付操作需要注意的细节
# 微信支付java版本之JSAPI支付+发送模板消息
# 微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
# Java通过JsApi方式实现微信支付
# 是有
# 将其
# 大家分享
# 具体内容
# 请参考
# 大家多多
# equals
# printStackTrace
# JSONException
# ticketStr
# System
# getJSAPITicket
# TicketUtils
# catch
# JSONObject
# indexOf
# amp
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
什么是javascript作用域_全局和局部作用域有什么区别?
高端网站建设与定制开发一站式解决方案 中企动力
如何基于云服务器快速搭建个人网站?
在线教育网站制作平台,山西立德教育官网?
如何获取PHP WAP自助建站系统源码?
js代码实现下拉菜单【推荐】
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
javascript中的try catch异常捕获机制用法分析
如何在阿里云ECS服务器部署织梦CMS网站?
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
高防服务器租用首荐平台,企业级优惠套餐快速部署
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Android使用GridView实现日历的简单功能
如何在阿里云高效完成企业建站全流程?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
高性价比服务器租赁——企业级配置与24小时运维服务
如何快速搭建高效香港服务器网站?
Laravel如何使用Blade模板引擎?(完整语法和示例)
nodejs redis 发布订阅机制封装实现方法及实例代码
如何正确选择百度移动适配建站域名?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
制作公司内部网站有哪些,内网如何建网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
如何在七牛云存储上搭建网站并设置自定义域名?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
非常酷的网站设计制作软件,酷培ai教育官方网站?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
如何用腾讯建站主机快速创建免费网站?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
网站建设要注意的标准 促进网站用户好感度!
如何快速查询网址的建站时间与历史轨迹?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Thinkphp 中 distinct 的用法解析
Laravel Session怎么存储_Laravel Session驱动配置详解
详解MySQL数据库的安装与密码配置
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
javascript如何操作浏览器历史记录_怎样实现无刷新导航
PHP 500报错的快速解决方法
英语简历制作免费网站推荐,如何将简历翻译成英文?
香港服务器WordPress建站指南:SEO优化与高效部署策略
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
如何打造高效商业网站?建站目的决定转化率
如何在建站宝盒中设置产品搜索功能?
如何用虚拟主机快速搭建网站?详细步骤解析
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel如何配置和使用缓存?(Redis代码示例)
Laravel定时任务怎么设置_Laravel Crontab调度器配置
详解Android中Activity的四大启动模式实验简述

