具体文档看这里:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
我没做任何封装,功能是实现了。
首先获取token
private void getWeixinToken(Record record){ String token = null; //失效 重新获取 String requestUrl = WeixinUtils.ACCESS_TOKEN_URL .replace("APPID",record.getStr("appid")) .replace("APPSECRET",record.getStr("appsecret")); JSONObject jsonObject = WeixinUtils.httpRequest(requestUrl,"GET",null); Long currentTime = new Date().getTime() + 1000 * 60 * 60 * 2; if(null!=jsonObject){ try { //1、获取token凭证 token = jsonObject.getString("access_token"); LogKit.info("---------定时任务【重置超过2小时失效token】成功,当前token:"+token+"------------------"); Db.use("yabyy").update("update dt_weixin_account set token='"+token+"',add_token_time='"+DateUtil.format(new Date(currentTime), DateUtil.formatStr_yyyyMMddHHmmss)+"' where id="+record.getInt("id")); }catch (Exception e){ //获取token失败 LogKit.info("获取token失败 errcode:"+(jsonObject.containsKey("errcode")?jsonObject.get("errcode"):"")+" errmsg:"+(jsonObject.containsKey("errmsg")?jsonObject.get("errmsg"):"")+""); } } }
然后通过token获取js api ticket
private void getJsApiTicket(Record record){ String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi"; String requestUrl = url.replace("ACCESS_TOKEN", record.getStr("token")); // 发起GET请求获取凭证 JSONObject jsonObject = WeixinUtils.httpRequest(requestUrl,"GET",null); String ticket = null; Long currentTime = new Date().getTime() + 1000 * 60 * 60 * 2; if (null != jsonObject) { try { ticket = jsonObject.getString("ticket"); LogKit.info("---------定时任务【重置超过2小时失效js ticket】成功,当前js ticket:"+ticket+"------------------"); Db.use("yabyy").update("update dt_weixin_account set js_api_ticket='"+ticket+"',add_js_api_ticket_time='"+DateUtil.format(new Date(currentTime), DateUtil.formatStr_yyyyMMddHHmmss)+"' where id="+record.getInt("id")); } catch (Exception e) { // 获取token失败 LogKit.info("获取js token失败 errcode:"+(jsonObject.containsKey("errcode")?jsonObject.get("errcode"):"")+" errmsg:"+(jsonObject.containsKey("errmsg")?jsonObject.get("errmsg"):"")+""); } } }
然后前台页面
$(function(){ url = location.href.split('#').toString(); $.ajax({ type: "post", url: "${ctx}/wx/historysend/tick.action?url="+url+"&tick=", dataType: "json", async: false, success: function (data, textStatus) { //alert(url); wx.config({ // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 debug: false, // 必填,公众号的唯一标识 appId: "wx8d881cf642e0e22d", // 必填,生成签名的时间戳 timestamp: data.timestamp, // 必填,生成签名的随机串 nonceStr: data.nonceStr, // 必填,签名 signature: data.signature, // 必填,需要使用的JS接口列表 jsApiList: ['scanQRCode','chooseImage', 'uploadImage', 'downloadImage'] }); wx.error(function (res) { alert("出错了:" + res.errMsg);//这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。 }); wx.ready(function () { wx.checkJsApi({ jsApiList: ['scanQRCode','chooseImage', 'uploadImage', 'downloadImage'], success: function (res) { } }); }); } }); });
当然了,该页面别忘了引用jweixin
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
后台代码
@ResponseBody @RequestMapping(value = "/tick") public String page(String url,String tick) throws IOException { // String tick = "kgt8ON7yVITDhtdwci0qecVZ9qlU76FHKY9XMB16JmiS36C3qMSaJMXu9PAub_wUvyv1oZZrUVD83dyWCPjZeQ"; System.out.println("===================="+tick); System.out.println("===================="+url); List<WeixinAccount> list = weixinAccountService.findList(new WeixinAccountQuery()); WeixinAccount entity = list.get(0); tick = entity.getJsApiTicket(); Map map = PastUtils.sign(tick,url); return JSONArray.toJSON(map).toString(); }
具体操作,大家看逻辑了。