微信JSAPI Ticket接口签名详解


Posted in Javascript onJune 28, 2020

本文实例为大家分享了微信JS接口签名的具体代码,供大家参考,具体内容如下

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

微信JSAPI Ticket接口签名详解

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到服务器的文件中。

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

Javascript 相关文章推荐
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
jQuery 添加/移除CSS类实现代码
Feb 11 Javascript
如何将JS的变量值传递给ASP变量
Dec 10 Javascript
javascript中比较字符串是否相等的方法
Jul 23 Javascript
js单词形式的运算符
May 06 Javascript
jquery.validate使用详解
Jun 02 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
Jul 18 Javascript
Bootstrap选项卡动态切换效果
Nov 28 Javascript
微信小程序实战之轮播图(3)
Apr 17 Javascript
vue params、query传参使用详解
Sep 12 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
vue的webcamjs集成方式
Nov 16 Javascript
Angular.js自动化测试之protractor详解
Jul 07 #Javascript
vue.js全局API之nextTick全面解析
Jul 07 #Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
Jul 07 #Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
Jul 07 #Javascript
基于rem的移动端响应式适配方案(详解)
Jul 07 #Javascript
详谈js模块化规范
Jul 07 #Javascript
使用JavaScript实现alert的实例代码
Jul 06 #Javascript
You might like
基于mysql的bbs设计(二)
2006/10/09 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
旅游管理专业个人求职信范文
2013/12/24 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
教师节演讲稿
2014/05/06 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
2014年度考核工作总结
2014/12/24 职场文书
红色经典观后感
2015/06/18 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
MySQL的索引你了解吗
2022/03/13 MySQL