编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

Java获取微信JS-SDK的signature签名

具体文档看这里: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();
    }

具体操作,大家看逻辑了。

未经允许不得转载: Java获取微信JS-SDK的signature签名

相关推荐