具体文档看这里: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();
}具体操作,大家看逻辑了。