diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
index 000fda0b..9ba17f2b 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java
@@ -142,6 +142,13 @@ public interface WxMaService {
*/
WxMaCodeService getCodeService();
+ /**
+ * 小程序修改服务器地址、成员管理 API
+ *
+ * @return WxMaSettingService
+ */
+ WxMaSettingService getSettingService();
+
/**
* 初始化http请求对象.
*/
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSettingService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSettingService.java
new file mode 100644
index 00000000..98870a9c
--- /dev/null
+++ b/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 Charming
+ * @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;
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java
index d3be4a73..a4d9d515 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java
+++ b/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, RequestHttpCharming
+ * @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 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 param = new HashMap<>(1);
+ param.put("wechatid", wechatId);
+ this.wxMaService.post(UNBIND_TESTER_URL, WxMaGsonBuilder.create().toJson(param));
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaDomainAction.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaDomainAction.java
new file mode 100644
index 00000000..313f6cbe
--- /dev/null
+++ b/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 Charming
+ * @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 requestDomain;
+ /**
+ * socket合法域名,当action参数是get时不需要此字段。
+ */
+ @SerializedName("wsrequestdomain")
+ private List wsRequestDomain;
+ /**
+ * uploadFile合法域名,当action参数是get时不需要此字段。
+ */
+ @SerializedName("uploaddomain")
+ private List uploadDomain;
+ /**
+ * downloadFile合法域名,当action参数是get时不需要此字段。
+ */
+ @SerializedName("downloaddomain")
+ private List downloadDomain;
+ /**
+ * 小程序业务域名,当action参数是get时不需要此字段。
+ */
+ @SerializedName("webviewdomain")
+ private List webViewDomain;
+
+ public String toJson() {
+ return WxMaGsonBuilder.create().toJson(this);
+ }
+
+ public static WxMaDomainAction fromJson(String json) {
+ return WxMaGsonBuilder.create().fromJson(json, WxMaDomainAction.class);
+ }
+}
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSettingServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSettingServiceImplTest.java
new file mode 100644
index 00000000..8da5f192
--- /dev/null
+++ b/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 Charming
+ * @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);
+ }
+}