java 生成小程序页面的访问链接

前言:小程序提供某个页面(如注册页面)给外界访问,直接提供是不可能的,需要把知道界面通过代码生成后,再提供给外访问。

/**
 * generateLinkURL:https://api.weixin.qq.com/wxa/generate_urllink?access_token=ACCESS_TOKEN
 * 提供给外界访问的小程序界面:/pages/third-auth/wechat
 */ 
public ResponseBean generateUserRegUrl(String appId, String appSecret) {
    String url = getAccessToken.replaceAll("APPID", appId).replaceAll("APPSECRET", appSecret);
    logger.info("获取token的路径为===========>" + url);
    try {
        /**
         * 返回参数
         * access_token	string	获取到的凭证
         * expires_in	number	凭证有效时间,单位:秒。目前是7200秒之内的值。
         * errcode	number	错误码
         * errmsg	string	错误信息
         */
        JSONObject jsonObject = HttpUtil.sendGet(url);
        logger.info("获取accessToken的返回jsonObject===========>" + jsonObject);
        if (null == jsonObject) {
            return new ResponseBean("ERROR", "系统内部错误");
        }

        //微信没有返回这个参数,导致代码出错
        //int errcode = jsonObject.getInteger("errcode");
        //if (-1 == errcode) {
        //    return new ResponseBean("ERROR", "系统繁忙,此时请开发者稍候再试");
        //}
        //if (40001 == errcode) {
        //    return new ResponseBean("ERROR", "AppSecret 错误或者 AppSecret 不属于这个小程序,请开发者确认 AppSecret 的正确性");
        //}
        //if (40002 == errcode) {
        //    return new ResponseBean("ERROR", "请确保 grant_type 字段值为 client_credential");
        //}
        //if (40003 == errcode) {
        //    return new ResponseBean("ERROR", "不合法的 AppID,请开发者检查 AppID 的正确性,避免异常字符,注意大小写");
        //}
        //return new ResponseBean("获取成功", jsonObject);

        String accessToken = jsonObject.getString("access_token");
        if (StringUtils.isNotBlank(accessToken)) {
            /**
             * 参数示例:
             * {
             *     "path": "/pages/publishHomework/publishHomework",
             *     "query": "",
             *     "is_expire":true,
             *     "expire_type":1,
             *     "expire_interval":1,
             *     "cloud_base":
             *     {
             *         "env": "xxx",
             *         "domain": "xxx.xx",
             *         "path": "/jump-wxa.html",
             *         "query": "a=1&b=2"
             *     }
             * }
             */
            JSONObject paramMap = new JSONObject();
            //接口调用凭证
            //通过 URL Link 进入的小程序页面路径,必须是已经发布的小程序存在的页面,不可携带 query 。path 为空时会跳转小程序主页
            paramMap.put("path", userRegPage);
            //生成的 URL Link 类型,到期失效:true,永久有效:false
            paramMap.put("is_expire", false);
            //小程序 URL Link 失效类型,失效时间:0,失效间隔天数:1
            paramMap.put("expire_type", 1);
            //到期失效的URL Link的失效间隔天数。生成的到期失效URL Link在该间隔时间到达前有效。最长间隔天数为365天。expire_type 为 1 必填
            paramMap.put("expire_interval", 1);
            //执行post
            String postURL = generateLinkURL.replaceAll("ACCESS_TOKEN", accessToken);
            String result = HttpUtil.sendPost(paramMap.toJSONString(), postURL);
            logger.info("获取Link的返回result===========>" + result);
            if (null == result) {
                return new ResponseBean("ERROR", "系统内部错误");
            }
            /**
             * 返回值:
             * {
             *  "errcode": 0,
             *  "errmsg": "ok",
             *  "url_link": "URL Link"
             * }
             */
            JSONObject jsonObject1 = JSONObject.parseObject(result);
            Integer errcode1 = jsonObject1.getInteger("errcode");
            if (40002 == errcode1) {
                return new ResponseBean("ERROR", "暂无生成权限");
            }
            if (85079 == errcode1) {
                return new ResponseBean("ERROR", "小程序未发布");
            }
            if (40165 == errcode1) {
                return new ResponseBean("ERROR", "参数path填写错误");
            }
            if (44990 == errcode1) {
                return new ResponseBean("ERROR", "生成URL Link频率过快");
            }
            if (85400 == errcode1) {
                return new ResponseBean("ERROR", "长期有效URL Link达到生成上限10万");
            }
            if (45009 == errcode1) {
                return new ResponseBean("ERROR", "单天生成URL Link数量超过上限50万");
            }
            if (0 == errcode1) {
                String urlLink = jsonObject1.getString("url_link");
                if (StringUtils.isEmpty(urlLink)) {
                    return new ResponseBean("ERROR", "系统内部错误");
                }
                //成功,进行其它业务操作...

                return new ResponseBean("获取成功", urlLink);
            }
        }
    } catch (Exception e) {
        logger.info("获取token出错===========>" + e.getMessage());
        return new ResponseBean("ERROR", "系统内部错误");
    }

    return null;
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值