Skip to content

Commit b9bd619

Browse files
authored
🆕 #3124 【小程序】实现查询 URL Link的接口
1 parent 473d2c1 commit b9bd619

6 files changed

Lines changed: 157 additions & 0 deletions

File tree

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaLinkService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import cn.binarywang.wx.miniapp.bean.shortlink.GenerateShortLinkRequest;
55
import cn.binarywang.wx.miniapp.bean.urllink.GenerateUrlLinkRequest;
6+
import cn.binarywang.wx.miniapp.bean.urllink.request.QueryUrlLinkRequest;
7+
import cn.binarywang.wx.miniapp.bean.urllink.response.QueryUrlLinkResponse;
68
import me.chanjar.weixin.common.error.WxErrorException;
79

810
/**
@@ -29,4 +31,14 @@ public interface WxMaLinkService {
2931
* @throws WxErrorException .
3032
*/
3133
String generateShortLink(GenerateShortLinkRequest request) throws WxErrorException;
34+
35+
/**
36+
* 查询 URL Link
37+
* 接口文档: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-link/queryUrlLink.html
38+
*
39+
* @param request 请求
40+
* @return link地址
41+
* @throws WxErrorException .
42+
*/
43+
QueryUrlLinkResponse queryUrlLink(QueryUrlLinkRequest request) throws WxErrorException;
3244
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaLinkServiceImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@
44
import cn.binarywang.wx.miniapp.api.WxMaService;
55
import cn.binarywang.wx.miniapp.bean.shortlink.GenerateShortLinkRequest;
66
import cn.binarywang.wx.miniapp.bean.urllink.GenerateUrlLinkRequest;
7+
import cn.binarywang.wx.miniapp.bean.urllink.request.QueryUrlLinkRequest;
8+
import cn.binarywang.wx.miniapp.bean.urllink.response.QueryUrlLinkResponse;
79
import com.google.gson.JsonObject;
810
import lombok.AllArgsConstructor;
911
import me.chanjar.weixin.common.error.WxErrorException;
1012
import me.chanjar.weixin.common.util.json.GsonParser;
13+
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
1114

1215
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Link.GENERATE_URLLINK_URL;
16+
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Link.QUERY_URLLINK_URL;
1317
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.ShortLink.GENERATE_SHORT_LINK_URL;
1418

1519
/**
@@ -44,4 +48,10 @@ public String generateShortLink(GenerateShortLinkRequest request) throws WxError
4448
}
4549
throw new WxErrorException("无link");
4650
}
51+
52+
@Override
53+
public QueryUrlLinkResponse queryUrlLink(QueryUrlLinkRequest request) throws WxErrorException {
54+
String result = this.wxMaService.post(QUERY_URLLINK_URL, request);
55+
return WxGsonBuilder.create().fromJson(result, QueryUrlLinkResponse.class);
56+
}
4757
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package cn.binarywang.wx.miniapp.bean.urllink.request;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
import lombok.experimental.Accessors;
9+
10+
import java.io.Serializable;
11+
12+
/**
13+
* <pre>
14+
* 查询小程序 URL Link参数对象
15+
* </pre>
16+
* @author <a href="https://github.com/imyzt">imyzt</a>
17+
* @since 2023-11-13
18+
*/
19+
@Data
20+
@Builder
21+
@Accessors(chain = true)
22+
@NoArgsConstructor
23+
@AllArgsConstructor
24+
public class QueryUrlLinkRequest implements Serializable {
25+
26+
/**
27+
* 小程序 url_link
28+
* <pre>
29+
* 是否必填: 是
30+
* </pre>
31+
*/
32+
@SerializedName("url_link")
33+
private String urlLink;
34+
35+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package cn.binarywang.wx.miniapp.bean.urllink.response;
2+
3+
import cn.binarywang.wx.miniapp.bean.WxMaBaseResponse;
4+
import com.google.gson.annotations.SerializedName;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Data;
8+
import lombok.EqualsAndHashCode;
9+
import lombok.NoArgsConstructor;
10+
import lombok.experimental.Accessors;
11+
12+
import java.io.Serializable;
13+
14+
/**
15+
* <pre>
16+
* 查询小程序 URL Link响应对象
17+
* </pre>
18+
* @author <a href="https://github.com/imyzt">imyzt</a>
19+
* @since 2023-11-13
20+
*/
21+
@Data
22+
@EqualsAndHashCode(callSuper = true)
23+
@Builder
24+
@Accessors(chain = true)
25+
@NoArgsConstructor
26+
@AllArgsConstructor
27+
public class QueryUrlLinkResponse extends WxMaBaseResponse implements Serializable {
28+
29+
/**
30+
* 访问Link的用户openid,为空表示未被访问过
31+
*/
32+
@SerializedName("visit_openid")
33+
private String visitOpenid;
34+
35+
/**
36+
* url_link 配置
37+
*/
38+
@SerializedName("url_link_info")
39+
private UrlLinkInfo urlLinkInfo;
40+
41+
@Data
42+
@Builder
43+
public static class UrlLinkInfo {
44+
45+
/**
46+
* 小程序 appid
47+
*/
48+
private String appid;
49+
50+
/**
51+
* 小程序页面路径
52+
*/
53+
private String path;
54+
55+
/**
56+
* 小程序页面query
57+
*/
58+
private String query;
59+
60+
/**
61+
* 创建时间,为 Unix 时间戳
62+
*/
63+
@SerializedName("create_time")
64+
private Long createTime;
65+
66+
/**
67+
* 到期失效时间,为 Unix 时间戳,0 表示永久生效
68+
*/
69+
@SerializedName("expire_time")
70+
private Long expireTime;
71+
72+
/**
73+
* 要打开的小程序版本。正式版为"release",体验版为"trial",开发版为"develop"
74+
*/
75+
@SerializedName("env_version")
76+
private String envVersion;
77+
}
78+
79+
}

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ public interface Scheme {
344344

345345
public interface Link {
346346
String GENERATE_URLLINK_URL = "https://api.weixin.qq.com/wxa/generate_urllink";
347+
String QUERY_URLLINK_URL = "https://api.weixin.qq.com/wxa/query_urllink";
347348
}
348349

349350
public interface ShortLink {

weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaLinkServiceImplTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import cn.binarywang.wx.miniapp.api.WxMaService;
44
import cn.binarywang.wx.miniapp.bean.shortlink.GenerateShortLinkRequest;
55
import cn.binarywang.wx.miniapp.bean.urllink.GenerateUrlLinkRequest;
6+
import cn.binarywang.wx.miniapp.bean.urllink.request.QueryUrlLinkRequest;
7+
import cn.binarywang.wx.miniapp.bean.urllink.response.QueryUrlLinkResponse;
68
import cn.binarywang.wx.miniapp.test.ApiTestModule;
79
import com.google.inject.Inject;
810
import lombok.extern.slf4j.Slf4j;
911
import me.chanjar.weixin.common.error.WxErrorException;
12+
import org.testng.Assert;
1013
import org.testng.annotations.Guice;
1114
import org.testng.annotations.Test;
1215

@@ -53,4 +56,21 @@ public void testGenerateMultiEnvUrlLink() throws WxErrorException {
5356
.build());
5457
log.info("generate url link = {}", url);
5558
}
59+
60+
@Test
61+
public void testQueryUrlLink() throws WxErrorException {
62+
63+
String path = "pages/index";
64+
String urlLink = this.wxMaService.getLinkService().generateUrlLink(GenerateUrlLinkRequest.builder()
65+
.path(path)
66+
.expireTime(LocalDateTime.now().plusDays(5).atZone(ZoneId.systemDefault()).toEpochSecond()) //增加有效期,此行可注释
67+
.build());
68+
System.out.println("urlLink: " + urlLink);
69+
70+
QueryUrlLinkResponse queryUrlLinkResponse = this.wxMaService.getLinkService()
71+
.queryUrlLink(QueryUrlLinkRequest.builder().urlLink(urlLink).build());
72+
System.out.println("linkInfo: " + queryUrlLinkResponse.toString());
73+
74+
Assert.assertEquals(path, queryUrlLinkResponse.getUrlLinkInfo().getPath());
75+
}
5676
}

0 commit comments

Comments
 (0)