一个有理想的小人物

这个给大家分享一下微信JS-SDK的基本使用,经过一天时间的研究终于可以顺利把JS-SDK连接成功了。下面就跟大家一起分享一下我的方法,当然我也是参照其他的大神来写的。

首先,建立一个servlet命名未HttpUtil

package com.source.weixin.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.UUID;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import com.source.weixin.thread.TokenThread;import com.source.weixin.util.WeixinUtil;public class HttpUtil extends HttpServlet {/** * Constructor of the object. */public HttpUtil() {super();}/** * Destruction of the servlet. <br> */public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {long time = System.currentTimeMillis()/1000;String randomStr = UUID.randomUUID().toString();//特别注意的是调用微信js,url必须是当前页面(转发的不行)String str = "jsapi_ticket="+TokenThread.jsapi_ticket+"&noncestr="+randomStr+"×tamp="+time+"&url=http://foreverxhj.duapp.com/HttpUtil";String signature = WeixinUtil.sha1Encrypt(str);RequestDispatcher rd =request.getRequestDispatcher("demo.jsp");String accerssToken =TokenThread.accessToken.getToken();String jsApiTicket =TokenThread.jsapi_ticket;request.setAttribute("time", time);request.setAttribute("randomStr", randomStr);request.setAttribute("signature", signature);request.setAttribute("accessToken", accerssToken);request.setAttribute("jsapi_ticket", jsApiTicket);rd.forward(request, response);}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \&;-//W3C//DTD HTML 4.01 Transitional//EN\&;>");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println(" <BODY>");out.print(" This is ");out.print(this.getClass());out.println(", using the POST method");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}/** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code here}}

这里参考了柳峰老师的方法,写一个线程ThokenThread。 默认初始化调用来存储AccessToken和JSApi_Ticket。线程有效时间为7000秒。由于官方的有效时间为7200秒,而且每天的请求次数有一定的限制,所以设置成7000秒比较合适点。

下面是TokenThread类的代码:

package com.source.weixin.thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.source.weixin.pojo.AccessToken;import com.source.weixin.util.WeixinUtil;/** * 定时获取微信access_token线程 * @author xuhj * @date 2015-3-13 */public class TokenThread implements Runnable {private static Logger log = LoggerFactory.getLogger(TokenThread.class);//第三方用户唯一凭证public static String appid = "";//第三方用户唯一凭证密匙public static String appsecret = "";public static AccessToken accessToken = null;public static String jsapi_ticket=null;public void run() {// TODO Auto-generated method stubwhile(true){try{accessToken = WeixinUtil.getAccessToken(appid, appsecret);//获取JSAPI_Ticketjsapi_ticket = WeixinUtil.JSApiTIcket(accessToken.getToken());if(null != accessToken){log.info("获取access_token成功,有效时长{}秒 token:{}",accessToken.getExpiresIn(),accessToken.getToken());log.info("获取jsapi_ticket成功, jsapi_ticket:{}",jsapi_ticket);//休眠700秒Thread.sleep((accessToken.getExpiresIn()-200)*1000);}else{//如果access_token未null,60秒后在获取Thread.sleep(60*1000);}}catch(InterruptedException e){try{Thread.sleep(60*1000);}catch(InterruptedException e1){log.error("{}",e1);}log.error("{}",e);}}}public static void main(String[] args){System.out.println(TokenThread.accessToken.getToken());}}

由于把appid和appsecret写在web.xml所以也把web.xml也贴上来

走过一段路,风景毕竟不相同。这段惠风和畅,

一个有理想的小人物

相关文章:

你感兴趣的文章:

标签云: