Vue + 微信公众网页开发 项目缓存问题

查了半天 有一种方式是在nginx端禁用掉缓存,  由于启动nginx有一堆参数 我不敢动 所以就搁置了

现在采用了加版本号机制, 每次上线后, 手动更新一次微信公众底部菜单栏下的链接

因为我们的公众号已经是采用接口配置了, 所以就直接是给前端封装一个接口, 每次上线的时候 他在浏览器访问一下这个链接即可, 不会太麻烦 , 也很完美, 用户依然可以享受缓存带来的速度

补充: 这种方式其实还有中弊端, 微信的菜单更新时长较长!

这是原本的接口

就放一下更新菜单的代码, 代码有点乱(不是我写的, 我就写不出 不会写 不知道怎么写出不好的代码)

首先是获取accessToken,  accessToken要做一个过期刷新, 代码就不放了

   public AccessToken initAccessToken() {
        log.info("initAccessToken appid:" + ConfigProperties.wechat_appid);
// access_token_url 字段的值是 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
// jspapi_ticket_url: https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
        // 调用接口获取access_token
        return HttpsUtil.getAccessToken(ConfigProperties.wechat_appid, ConfigProperties.wechat_appsecret, ConfigProperties.access_token_url, ConfigProperties.jspapiTicketUrl);
    }



   /**
     * 获取access_token
     *
     * @param appid     凭证
     * @param appsecret 密钥
     * @return
     */
    public static AccessToken getAccessToken(String appid, String appsecret, String accessTokenUrl, String jspapiTicketUrl) {
        String requestUrl = accessTokenUrl.replace("APPID", appid).replace("APPSECRET", appsecret);
        JSONObject jsonObject = httpRequest(requestUrl, "GET", null);
        AccessToken accessToken = null;
        // 如果请求成功
        if (null != jsonObject) {
            try {
                accessToken = JsonTools.toBean(jsonObject.toString(), AccessToken.class);

                //获取微信jsapi 票据
                requestUrl = jspapiTicketUrl.replace("ACCESS_TOKEN", accessToken.getAccess_token());
                JSONObject object = HttpsUtil.httpRequest(requestUrl, "GET", "");
                int code = Integer.parseInt(object.get("errcode").toString());
                if (code == 0) {
                    accessToken.setJspapi_ticket(object.getString("ticket"));
                } else {
                    String msg = object.get("errmsg").toString();
                    log.debug("msg:" + msg);
                }

            } catch (JSONException e) {
                accessToken = null;
                // 获取token失败
                log.info("获取token失败 errcode:{} errmsg:{}" + jsonObject.getInteger("errcode")
                        + jsonObject.getString("errmsg"), e);
            }
        }
        return accessToken;
    }
    /**
     * 初始化菜单
     *
     */
    public void initMenu() {
        // 获取AccessToken
        AccessToken at = JsonTools.toBean(RedisUtils.get("initAccessToken").toString(), AccessToken.class);
        if (null != at) {
            // 调用接口创建菜单
            int result = MenuUtils.initMenu(at.getAccess_token());
            // 判断菜单创建结果
            if (0 == result) {
                log.info("菜单创建成功!");
            } else {
                log.info("菜单创建失败,错误码:" + result);
            }
        }
    }

创建菜单

    /**
     * 创建菜单
     *
     * @param accessToken 有效的access_token
     * @return 0表示成功,其他值表示失败
     */
    public static int initMenu(String accessToken) {
        int result = 0;
        // 拼装创建菜单的URL 
// https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
        String url = ConfigProperties.wechat_menu_create_url.replace("ACCESS_TOKEN", accessToken);
        // 将菜单对象转换成json字符串
        String jsonMenu = JSONObject.toJSON(MenuUtils.createMenu()).toString();
        // 调用接口创建菜单
        JSONObject jsonObject = HttpClientUtils.httpsRequest(url, "POST", jsonMenu);
        log.debug("---jsonMenu" + jsonMenu);
        log.debug("---jsonObject" + jsonObject.toJSONString());
        if (null != jsonObject) {
            if (0 != jsonObject.getInteger("errcode")) {
                result = jsonObject.getInteger("errcode");
                log.info("创建菜单失败 errcode:{} errmsg:{}" + jsonObject.getInteger("errcode")
                        + jsonObject.getString("errmsg"));
            }
        }

        return result;
    }

    /**
     * 组装菜单数据
     *
     * @return
     */
    public static Menu createMenu() {
/*

public class ViewButton {
    private String type;
    private String url;
}

*/
        ViewButton btn01 = new ViewButton();
        btn01.setName("健康管理");
        btn01.setType("view");
        btn01.setUrl(ConfigProperties.vue_project_root + ConfigProperties.wechat_menu_home_service+"?timestamp="+System.currentTimeMillis());

        ViewButton btn2 = new ViewButton();
        btn2.setName("健康商城");
        btn2.setType("view");
        btn2.setUrl(ConfigProperties.shop_index_url);

    ViewButton btn3 = new ViewButton();
        btn3.setName("我的设备");
        btn3.setType("view");
        btn3.setUrl(ConfigProperties.vue_project_root + ConfigProperties.wechat_menu_my_device);

        Menu menu = new Menu();
        menu.setButton(new Button[]{btn01, btn2,btn3});
        return menu;
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值