微信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 创建对象(常见的几种方法)
Nov 03 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
Nov 30 Javascript
JQuery教学之性能优化
May 14 Javascript
jQuery中data()方法用法实例
Dec 27 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
Mar 02 Javascript
js闭包实现按秒计数
Apr 23 Javascript
使用Node.js实现简易MVC框架的方法
Aug 07 Javascript
ionic 3.0+ 项目搭建运行环境的教程
Aug 09 Javascript
Vue项目路由刷新的实现代码
Apr 17 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 Javascript
vue微信分享插件使用方法详解
Feb 18 Javascript
Vue3.0 手写放大镜效果
Jul 25 Vue.js
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
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
js常用代码段收集
2011/10/28 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
多个python文件调用logging模块报错误
2020/02/12 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
元旦红领巾广播稿
2014/02/19 职场文书
三峡大坝导游词
2015/01/31 职场文书
未婚证明范本
2015/06/15 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python