java 生成小程序页面的访问链接(亲测)
微信小程序生成的urllink
前言:小程序提供某个页面(如注册页面)给外界访问,直接提供是不可能的,需要把知道界面通过代码生成后,再提供给外访问。
/**
* 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;
}
————————————————
版权声明:本文为CSDN博主「云南吴小黑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37967380/article/details/119944828
更多推荐
所有评论(0)