jsapi ticket java_微信JSAPI Ticket接口签名详解

本文详细介绍了如何使用Java实现微信JS接口签名,包括获取access_token、jsapi_ticket,以及具体签名生成方法。文章通过代码示例展示了从获取token到生成signature的完整流程,并强调了签名过程中需要注意的时效性问题。
摘要由CSDN通过智能技术生成

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

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

cbe51f0fcd61d9010e23ba9ebcd40dff.png

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

+ "&timestamp=" + 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到服务器的文件中。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值