微信开发-实现jsapi ticket

  • Post author:
  • Post category:其他


由于微信的对access_token 和 jssdk-ticket 都有有效期限制,在页面中调用jssdk函数时需要校验,实现思路如下:

1 在程序里用定时器或者开启线程每7000s计算一次access_token和jssdk-ticket;

2 将access_token 和jssdk-ticket 通过静态变量 static 存在内存中。

3 在action中,设置成员变量 signature,将获取静态变量jssdk-ticket值计算后赋予signature,通过get set 方式将成员变量的值传给jsp页面

4 在jsp页面中通过el表达式获取signature值,noncestr、timestamp,url等值。

程序jsp+action实现

1 编写initservlet类启动线程,在web.xml文件中配置servlet 实现程序启动时即运行servlet.

InitServlet.java

/**
 * Created by lr on 2015/6/11
 */
public class InitServlet extends HttpServlet {

       public void init() throws ServletException {
           new Thread(new TokenThread()).start();
       }

}

web.xml文件

<servlet>
       <servlet-name>initServlet</servlet-name>
       <servlet-class>cn.cp.wxphone.servlet.InitServlet</servlet-class>
           <!-- 程序启动时开始执行 -->
         <load-on-startup>0</load-on-startup>
</servlet>

TokenThread.java

2 在线程中将token、ticket存为静态变量,并实现定时计算。

package cn.cp.wxphone.Thread;

import cn.cp.wxphone.manager.JsApiTicketManager;
import cn.cp.wxphone.manager.TokenManager;
import cn.cp.wxphone.pojo.Token;
import cn.cp.wxphone.tag.AppTag;

/**
 * Created by lr on 2015/6/11.
 */

    public class TokenThread implements Runnable {


        public static Token accessToken = null;
        public static String jsApiTicket=null;

        public void run() {
            while (true) {
                try {
                    accessToken = TokenManager.getToken(AppTag.AppID,AppTag.AppSecret );
                    jsApiTicket = JsApiTicketManager.getTicket().getJsi_Ticket();

                        if (null != accessToken) {
                        System.out.println("获取access_token成功,有效时长{}秒 token:{}" + "," + accessToken.getExpiresIn() + "," + accessToken.getAccessToken());
                        // 休眠7000秒
                        Thread.sleep((accessToken.getExpiresIn() - 200) * 1000);
                        //  Thread.sleep(30*1000);
                    } else {
                        // 如果access_token为null,60秒后再获取
                        Thread.sleep(60 * 1000);
                    }
                } catch (InterruptedException e) {
    



版权声明:本文为u011462864原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。