فهرست منبع

#563 小程序增加修改服务器地址、成员管理 API

* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀;

* 微信开放平台:增加小程序代码模板库管理

* 小程序:增加代码管理相关 API

* 小程序:增加修改服务器地址、成员管理 API
Charming 7 سال پیش
والد
کامیت
ba93544473

+ 7 - 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java

@@ -143,6 +143,13 @@ public interface WxMaService {
   WxMaCodeService getCodeService();
 
   /**
+   * 小程序修改服务器地址、成员管理 API
+   *
+   * @return WxMaSettingService
+   */
+  WxMaSettingService getSettingService();
+
+  /**
    * 初始化http请求对象.
    */
   void initHttp();

+ 65 - 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSettingService.java

@@ -0,0 +1,65 @@
+package cn.binarywang.wx.miniapp.api;
+
+import cn.binarywang.wx.miniapp.bean.WxMaDomainAction;
+import me.chanjar.weixin.common.exception.WxErrorException;
+
+/**
+ * 小程序修改服务器地址、成员管理 API(大部分只能是第三方平台调用)
+ *
+ * @author <a href="https://github.com/charmingoh">Charming</a>
+ * @since 2018-04-27 15:46
+ */
+public interface WxMaSettingService {
+  /**
+   * 修改服务器地址:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1489138143_WPbOO&token=&lang=zh_CN
+   * access_token 为 authorizer_access_token
+   */
+  String MODIFY_DOMAIN_URL = "https://api.weixin.qq.com/wxa/modify_domain";
+  String SET_WEB_VIEW_DOMAIN_URL = "https://api.weixin.qq.com/wxa/setwebviewdomain";
+  /**
+   * 小程序成员管理:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1489140588_nVUgx&token=&lang=zh_CN
+   * access_token 为 authorizer_access_token
+   */
+  String BIND_TESTER_URL = "https://api.weixin.qq.com/wxa/bind_tester";
+  String UNBIND_TESTER_URL = "https://api.weixin.qq.com/wxa/unbind_tester";
+
+  /**
+   * 操作服务器域名
+   *
+   * @param domainAction 域名操作参数
+   *                     除了 webViewDomain,都是有效的
+   * @return 以下字段仅在 get 时返回完整字段
+   * @throws WxErrorException 操作失败时抛出,具体错误码请看文档
+   */
+  WxMaDomainAction modifyDomain(WxMaDomainAction domainAction) throws WxErrorException;
+
+  /**
+   * 设置小程序业务域名(仅供第三方代小程序调用)
+   * 授权给第三方的小程序,其业务域名只可以为第三方的服务器,
+   * 当小程序通过第三方发布代码上线后,小程序原先自己配置的业务域名将被删除,
+   * 只保留第三方平台的域名,所以第三方平台在代替小程序发布代码之前,需要调用接口为小程序添加业务域名。
+   * 提示:需要先将域名登记到第三方平台的小程序业务域名中,才可以调用接口进行配置。
+   *
+   * @param domainAction 域名操作参数
+   *                     只有 action 和 webViewDomain 是有效的
+   * @return 以下字段仅在 get 时返回完整字段
+   * @throws WxErrorException 操作失败时抛出,具体错误码请看文档
+   */
+  WxMaDomainAction setWebViewDomain(WxMaDomainAction domainAction) throws WxErrorException;
+
+  /**
+   * 绑定微信用户为小程序体验者
+   *
+   * @param wechatId 微信号
+   * @throws WxErrorException 失败时抛出,具体错误码请看文档
+   */
+  void bindTester(String wechatId) throws WxErrorException;
+
+  /**
+   * 解除绑定小程序的体验者
+   *
+   * @param wechatId 微信号
+   * @throws WxErrorException 失败时抛出,具体错误码请看文档
+   */
+  void unbindTester(String wechatId) throws WxErrorException;
+}

+ 7 - 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java

@@ -5,6 +5,7 @@ import cn.binarywang.wx.miniapp.api.WxMaMediaService;
 import cn.binarywang.wx.miniapp.api.WxMaMsgService;
 import cn.binarywang.wx.miniapp.api.WxMaQrcodeService;
 import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.api.WxMaSettingService;
 import cn.binarywang.wx.miniapp.api.WxMaTemplateService;
 import cn.binarywang.wx.miniapp.api.WxMaUserService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
@@ -52,6 +53,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl
   private WxMaQrcodeService qrCodeService = new WxMaQrcodeServiceImpl(this);
   private WxMaTemplateService templateService = new WxMaTemplateServiceImpl(this);
   private WxMaCodeService codeService = new WxMaCodeServiceImpl(this);
+  private WxMaSettingService settingService = new WxMaSettingServiceImpl(this);
 
   private int retrySleepMillis = 1000;
   private int maxRetryTimes = 5;
@@ -296,4 +298,9 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl
   public WxMaCodeService getCodeService() {
     return this.codeService;
   }
+
+  @Override
+  public WxMaSettingService getSettingService() {
+    return this.settingService;
+  }
 }

+ 48 - 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSettingServiceImpl.java

@@ -0,0 +1,48 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.api.WxMaSettingService;
+import cn.binarywang.wx.miniapp.bean.WxMaDomainAction;
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+import me.chanjar.weixin.common.exception.WxErrorException;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author <a href="https://github.com/charmingoh">Charming</a>
+ * @since 2018-04-27 15:46
+ */
+public class WxMaSettingServiceImpl implements WxMaSettingService {
+  private WxMaService wxMaService;
+
+  public WxMaSettingServiceImpl(WxMaService wxMaService) {
+    this.wxMaService = wxMaService;
+  }
+
+  @Override
+  public WxMaDomainAction modifyDomain(WxMaDomainAction domainAction) throws WxErrorException {
+    String responseContent = this.wxMaService.post(MODIFY_DOMAIN_URL, domainAction.toJson());
+    return WxMaDomainAction.fromJson(responseContent);
+  }
+
+  @Override
+  public WxMaDomainAction setWebViewDomain(WxMaDomainAction domainAction) throws WxErrorException {
+    String responseContent = this.wxMaService.post(SET_WEB_VIEW_DOMAIN_URL, domainAction.toJson());
+    return WxMaDomainAction.fromJson(responseContent);
+  }
+
+  @Override
+  public void bindTester(String wechatId) throws WxErrorException {
+    Map<String, Object> param = new HashMap<>(1);
+    param.put("wechatid", wechatId);
+    this.wxMaService.post(BIND_TESTER_URL, WxMaGsonBuilder.create().toJson(param));
+  }
+
+  @Override
+  public void unbindTester(String wechatId) throws WxErrorException {
+    Map<String, Object> param = new HashMap<>(1);
+    param.put("wechatid", wechatId);
+    this.wxMaService.post(UNBIND_TESTER_URL, WxMaGsonBuilder.create().toJson(param));
+  }
+}

+ 58 - 0
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaDomainAction.java

@@ -0,0 +1,58 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+import com.google.gson.annotations.SerializedName;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 域名相关操作
+ *
+ * @author <a href="https://github.com/charmingoh">Charming</a>
+ * @since 2018-04-27 15:45
+ */
+@Data
+@Builder
+public class WxMaDomainAction implements Serializable {
+  private static final long serialVersionUID = -2898601966852935708L;
+  /**
+   * add添加, delete删除, set覆盖, get获取。当参数是get时不需要填四个域名字段
+   */
+  private String action;
+  /**
+   * request合法域名,当action参数是get时不需要此字段。
+   */
+  @SerializedName("requestdomain")
+  private List<String> requestDomain;
+  /**
+   * socket合法域名,当action参数是get时不需要此字段。
+   */
+  @SerializedName("wsrequestdomain")
+  private List<String> wsRequestDomain;
+  /**
+   * uploadFile合法域名,当action参数是get时不需要此字段。
+   */
+  @SerializedName("uploaddomain")
+  private List<String> uploadDomain;
+  /**
+   * downloadFile合法域名,当action参数是get时不需要此字段。
+   */
+  @SerializedName("downloaddomain")
+  private List<String> downloadDomain;
+  /**
+   * 小程序业务域名,当action参数是get时不需要此字段。
+   */
+  @SerializedName("webviewdomain")
+  private List<String> webViewDomain;
+
+  public String toJson() {
+    return WxMaGsonBuilder.create().toJson(this);
+  }
+
+  public static WxMaDomainAction fromJson(String json) {
+    return WxMaGsonBuilder.create().fromJson(json, WxMaDomainAction.class);
+  }
+}

+ 54 - 0
weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSettingServiceImplTest.java

@@ -0,0 +1,54 @@
+package cn.binarywang.wx.miniapp.api.impl;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaDomainAction;
+import cn.binarywang.wx.miniapp.test.ApiTestModule;
+import com.google.inject.Inject;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.assertNotNull;
+
+/**
+ * @author <a href="https://github.com/charmingoh">Charming</a>
+ * @since 2018-04-27 15:38
+ */
+@Test
+@Guice(modules = ApiTestModule.class)
+public class WxMaSettingServiceImplTest {
+  @Inject
+  private WxMaService wxService;
+
+  @Test
+  public void testModifyDomain() throws Exception {
+    WxMaDomainAction domainAction = wxService.getSettingService().modifyDomain(WxMaDomainAction
+      .builder()
+      .action("get")
+      .build());
+    System.out.println(domainAction);
+    assertNotNull(domainAction);
+
+    domainAction.setAction("set");
+    WxMaDomainAction result = wxService.getSettingService().modifyDomain(domainAction);
+    System.out.println(result);
+  }
+
+  @Test
+  public void testBindTester() throws Exception {
+    wxService.getSettingService().bindTester("WeChatId");
+  }
+
+  @Test
+  public void testUnbindTester() throws Exception {
+    wxService.getSettingService().unbindTester("WeChatId");
+  }
+
+  @Test
+  public void testSetWebViewDomain() throws Exception {
+    WxMaDomainAction domainAction = wxService.getSettingService().setWebViewDomain(WxMaDomainAction
+      .builder()
+      .action("get")
+      .build());
+    System.out.println(domainAction);
+  }
+}