diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenMaService.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenMaService.java index f907ff9be6..16e9532e64 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenMaService.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenMaService.java @@ -238,6 +238,19 @@ public interface WxOpenMaService extends WxMaService { */ String API_AUDIT_UPLOAD_MEDIA = "https://api.weixin.qq.com/wxa/uploadmedia"; + /** + * 小程序管理-获取公众号关联的小程序 + */ + String API_WX_AMP_LINK_GET = "https://api.weixin.qq.com/cgi-bin/wxopen/wxamplinkget"; + /** + * 小程序管理-关联小程序 + */ + String API_WX_AMP_LINK_CREATE = "https://api.weixin.qq.com/cgi-bin/wxopen/wxamplink"; + /** + * 小程序管理-解除已关联的小程序 + */ + String API_WX_AMP_LINK_UN = "https://api.weixin.qq.com/cgi-bin/wxopen/wxampunlink"; + /** * 获得小程序的域名配置信息 * @@ -645,4 +658,48 @@ WxOpenMaDomainResult modifyDomain(String action, List requestDomains, Li * @return */ WxMaAuditMediaUploadResult uploadMedia(File file) throws WxErrorException; + + /** + *
+   * 获取公众号关联的小程序
+   * 请求方式:POST(HTTPS)
+   * 请求地址:https://api.weixin.qq.com/cgi-bin/wxopen/wxamplinkget?access_token=TOKEN
+   * 文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/Official__Accounts/Mini_Program_Management_Permission.html
+   * 
+   * @return 公众号关联的小程序
+   */
+  WxAmpLinkResult getWxAmpLink() throws WxErrorException;
+
+  /**
+   * 
+   * 关联小程序
+   * 关联流程(需要公众号和小程序管理员双方确认):
+   * 1、第三方平台调用接口发起关联
+   * 2、公众号管理员收到模板消息,同意关联小程序。
+   * 3、小程序管理员收到模板消息,同意关联公众号。
+   * 4、关联成功
+   * 等待管理员同意的中间状态可使用“获取公众号关联的小程序”接口进行查询。
+   * 请求方式:POST(HTTPS)
+   * 请求地址:https://api.weixin.qq.com/cgi-bin/wxopen/wxamplink?access_token=TOKEN
+   * 文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/Official__Accounts/Mini_Program_Management_Permission.html
+   * 
+   * @param appid 小程序 appid
+   * @param notifyUsers 是否发送模板消息通知公众号粉丝
+   * @param showProfile 是否展示公众号主页中
+   * @return 响应结果
+   */
+  WxOpenResult wxAmpLink(String appid, String notifyUsers, String showProfile) throws WxErrorException;
+
+  /**
+   * 
+   * 解除已关联的小程序
+   * 请求方式:POST(HTTPS)
+   * 请求地址:https://api.weixin.qq.com/cgi-bin/wxopen/wxampunlink?access_token=TOKEN
+   * 文档地址:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/Official__Accounts/Mini_Program_Management_Permission.html
+   * 
+   * @param appid 小程序 appid
+   * @return 响应结果
+   */
+  WxOpenResult wxAmpUnLink(String appid) throws WxErrorException;
+
 }
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java
index 7188a669c2..8933d2a124 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java
@@ -406,6 +406,30 @@ public WxMaAuditMediaUploadResult uploadMedia(File file) throws WxErrorException
     return (WxMaAuditMediaUploadResult) this.execute(AuditMediaUploadRequestExecutor.create(getRequestHttp()), API_AUDIT_UPLOAD_MEDIA, file);
   }
 
+  @Override
+  public WxAmpLinkResult getWxAmpLink() throws WxErrorException {
+    String response = post(API_WX_AMP_LINK_GET, "{}");
+    return WxMaGsonBuilder.create().fromJson(response, WxAmpLinkResult.class);
+  }
+
+  @Override
+  public WxOpenResult wxAmpLink(String appid, String notifyUsers, String showProfile) throws WxErrorException {
+    JsonObject params = new JsonObject();
+    params.addProperty("appid", appid);
+    params.addProperty("notify_users", notifyUsers);
+    params.addProperty("show_profile", showProfile);
+    String response = post(API_WX_AMP_LINK_CREATE, GSON.toJson(params));
+    return WxMaGsonBuilder.create().fromJson(response, WxOpenResult.class);
+  }
+
+  @Override
+  public WxOpenResult wxAmpUnLink(String appid) throws WxErrorException {
+    JsonObject params = new JsonObject();
+    params.addProperty("appid", appid);
+    String response = post(API_WX_AMP_LINK_UN, GSON.toJson(params));
+    return WxMaGsonBuilder.create().fromJson(response, WxOpenResult.class);
+  }
+
   private JsonArray toJsonArray(List strList) {
     JsonArray jsonArray = new JsonArray();
     if (strList != null && !strList.isEmpty()) {
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/result/WxAmpLinkResult.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/result/WxAmpLinkResult.java
new file mode 100644
index 0000000000..51604ee648
--- /dev/null
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/result/WxAmpLinkResult.java
@@ -0,0 +1,111 @@
+package me.chanjar.weixin.open.bean.result;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 公众号关联的小程序
+ *
+ * @author zhongjun
+ * @date 2022/4/29
+ **/
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WxAmpLinkResult extends WxOpenResult{
+
+  /**
+   * 关联的小程序列表,具有 items 字段,内带有参数
+   */
+  @SerializedName("wxopens")
+  private WxOpen wxOpen;
+
+  @Getter
+  @Setter
+  public static class WxOpen{
+    @SerializedName("items")
+    private List items;
+  }
+
+  @Getter
+  @Setter
+  public static class Item{
+
+    /**
+     * 关联状态
+     * 1:已关联;
+     * 2:等待小程序管理员确认中;
+     * 3:小程序管理员拒绝关联
+     * 12:等待公众号管理员确认中;
+     */
+    private Integer status;
+
+    /**
+     * 小程序appid
+     */
+    private String appid;
+
+    /**
+     * 小程序 gh_id
+     */
+    private String username;
+
+    /**
+     * 小程序名称
+     */
+    private String nickname;
+
+    /**
+     * 是否在公众号管理页展示中
+     */
+    private Integer selected;
+
+    /**
+     * 是否展示在附近的小程序中
+     */
+    @SerializedName("nearby_display_status")
+    private Integer nearbyDisplayStatus;
+
+    /**
+     * 是否已经发布
+     */
+    private Integer released;
+
+    /**
+     * 头像 url
+     */
+    @SerializedName("headimg_url")
+    private String headImgUrl;
+
+    /**
+     * 小程序邮箱
+     */
+    private String email;
+
+    /**
+     * 微信认证及支付信息
+     */
+    @SerializedName("func_info")
+    private List funcInfo;
+
+  }
+
+  @Getter
+  @Setter
+  public static class FuncInfo{
+    /**
+     * 微信认证及支付信息,0 表示未开通,1 表示开通
+     */
+    private Integer status;
+
+    private String name;
+
+    private Long id;
+
+  }
+}