From 9c149bb1e2ee84738ea66b9a82c295b3fa7ccf95 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sun, 16 Jun 2019 23:07:11 +0800 Subject: [PATCH] =?UTF-8?q?#516=20=E6=B7=BB=E5=8A=A0WiFi=E9=97=A8=E5=BA=97?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=9F=A5=E8=AF=A2=E9=97=A8=E5=BA=97Wi-Fi?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/mp/api/WxMpWifiService.java | 22 +++- .../mp/api/impl/WxMpWifiServiceImpl.java | 12 +- .../mp/bean/wifi/WxMpWifiShopDataResult.java | 114 ++++++++++++++++++ .../mp/bean/wifi/WxMpWifiShopListResult.java | 23 ++-- .../chanjar/weixin/mp/enums/WxMpApiUrl.java | 7 +- .../mp/api/impl/WxMpWifiServiceImplTest.java | 61 +++++++++- 6 files changed, 224 insertions(+), 15 deletions(-) create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopDataResult.java diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpWifiService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpWifiService.java index 9cda53bb..1ba40a77 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpWifiService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpWifiService.java @@ -1,6 +1,7 @@ package me.chanjar.weixin.mp.api; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.bean.wifi.WxMpWifiShopDataResult; import me.chanjar.weixin.mp.bean.wifi.WxMpWifiShopListResult; /** @@ -21,8 +22,27 @@ public interface WxMpWifiService { * http请求方式: POST * 请求URL:https://api.weixin.qq.com/bizwifi/shop/list?access_token=ACCESS_TOKEN * - * @param pageIndex 分页下标,默认从1开始 + * + * @param pageIndex 分页下标,默认从1开始 * @param pageSize 每页的个数,默认10个,最大20个 + * @return 结果 + * @throws WxErrorException 异常 */ WxMpWifiShopListResult listShop(int pageIndex, int pageSize) throws WxErrorException; + + /** + *
+   * 查询门店Wi-Fi信息
+   * 通过此接口查询某一门店的详细Wi-Fi信息,包括门店内的设备类型、ssid、密码、设备数量、商家主页URL、顶部常驻入口文案。
+   *
+   * http请求方式: POST
+   * 请求URL:https://api.weixin.qq.com/bizwifi/shop/get?access_token=ACCESS_TOKEN
+   * POST数据格式:JSON
+   * 
+ * + * @param shopId 门店ID + * @return 结果 + * @throws WxErrorException 异常 + */ + WxMpWifiShopDataResult getShopWifiInfo(int shopId) throws WxErrorException; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpWifiServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpWifiServiceImpl.java index 357ae580..636ba4fe 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpWifiServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpWifiServiceImpl.java @@ -5,10 +5,11 @@ import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpWifiService; +import me.chanjar.weixin.mp.bean.wifi.WxMpWifiShopDataResult; import me.chanjar.weixin.mp.bean.wifi.WxMpWifiShopListResult; -import me.chanjar.weixin.mp.enums.WxMpApiUrl; -import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Wifi.*; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Wifi.BIZWIFI_SHOP_GET; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Wifi.BIZWIFI_SHOP_LIST; /** *
@@ -29,4 +30,11 @@ public class WxMpWifiServiceImpl implements WxMpWifiService {
     final String result = this.wxMpService.post(BIZWIFI_SHOP_LIST, json.toString());
     return WxMpWifiShopListResult.fromJson(result);
   }
+
+  @Override
+  public WxMpWifiShopDataResult getShopWifiInfo(int shopId) throws WxErrorException {
+    JsonObject json = new JsonObject();
+    json.addProperty("shop_id", shopId);
+    return WxMpWifiShopDataResult.fromJson(this.wxMpService.post(BIZWIFI_SHOP_GET, json.toString()));
+  }
 }
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopDataResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopDataResult.java
new file mode 100644
index 00000000..2a3c7950
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopDataResult.java
@@ -0,0 +1,114 @@
+package me.chanjar.weixin.mp.bean.wifi;
+
+import com.google.gson.JsonParser;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.util.List;
+
+/**
+ * 门店Wi-Fi信息.
+ *
+ * @author Binary Wang
+ * @date 2019-06-16
+ */
+@Data
+public class WxMpWifiShopDataResult {
+  public static WxMpWifiShopDataResult fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(
+      new JsonParser().parse(json).getAsJsonObject().get("data"),
+      WxMpWifiShopDataResult.class);
+  }
+
+  /**
+   * 门店名称.
+   */
+  @SerializedName("shop_name")
+  private String shopName;
+
+  /**
+   * 无线网络设备的ssid,未添加设备为空,多个ssid时显示第一个.
+   */
+  @SerializedName("ssid")
+  private String ssid;
+
+  /**
+   * 无线网络设备的ssid列表,返回数组格式.
+   */
+  @SerializedName("ssid_list")
+  private String[] ssidList;
+
+  /**
+   * ssid和密码的列表,数组格式。当为密码型设备时,密码才有值.
+   */
+  @SerializedName("ssid_password_list")
+  private List ssidPasswordList;
+
+  /**
+   * 设备密码,当设备类型为密码型时返回.
+   */
+  @SerializedName("password")
+  private String password;
+
+  /**
+   * 门店内设备的设备类型,0-未添加设备,4-密码型设备,31-portal型设备.
+   */
+  @SerializedName("protocol_type")
+  private Integer protocolType;
+
+  /**
+   * 门店内设备总数.
+   */
+  @SerializedName("ap_count")
+  private Integer apCount;
+
+  /**
+   * 商家主页模板类型.
+   */
+  @SerializedName("template_id")
+  private Integer templateId;
+
+  /**
+   * 商家主页链接.
+   */
+  @SerializedName("homepage_url")
+  private String homepageUrl;
+
+  /**
+   * 顶部常驻入口上显示的文本内容:0--欢迎光临+公众号名称;1--欢迎光临+门店名称;2--已连接+公众号名称+WiFi;3--已连接+门店名称+Wi-Fi.
+   */
+  @SerializedName("bar_type")
+  private Integer barType;
+
+  /**
+   * 连网完成页链接.
+   */
+  @SerializedName("finishpage_url")
+  private String finishPageUrl;
+  
+  /**
+   * 商户自己的id,与门店poi_id对应关系,建议在添加门店时候建立关联关系,具体请参考“微信门店接口”.
+   */
+  @SerializedName("sid")
+  private String sid;
+
+  /**
+   * 门店ID(适用于微信卡券、微信门店业务),具体定义参考微信门店,与shop_id一一对应.
+   */
+  @SerializedName("poi_id")
+  private String poiId;
+
+  @Data
+  public static class SsidPassword {
+    /**
+     * 无线网络设备的ssid.
+     */
+    private String ssid;
+
+    /**
+     * 无线网络设备的password.
+     */
+    private String password;
+  }
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopListResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopListResult.java
index 69947aef..4a86acb3 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopListResult.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/wifi/WxMpWifiShopListResult.java
@@ -23,19 +23,19 @@ public class WxMpWifiShopListResult {
   }
 
   /**
-   * 总数
+   * 总数.
    */
   @SerializedName("totalcount")
   private int totalCount;
 
   /**
-   * 分页下标
+   * 分页下标.
    */
   @SerializedName("pageindex")
   private int pageIndex;
 
   /**
-   * 分页页数
+   * 分页页数.
    */
   @SerializedName("pagecount")
   private int pageCount;
@@ -46,43 +46,46 @@ public class WxMpWifiShopListResult {
   public static class Record {
 
     /**
-     * 门店ID(适用于微信连Wi-Fi业务)
+     * 门店ID(适用于微信连Wi-Fi业务).
      */
     @SerializedName("shop_id")
     private Integer shopId;
 
     /**
-     * 门店名称
+     * 门店名称.
      */
     @SerializedName("shop_name")
     private String shopName;
 
     /**
-     * 无线网络设备的ssid,未添加设备为空,多个ssid时显示第一个
+     * 无线网络设备的ssid,未添加设备为空,多个ssid时显示第一个.
      */
     @SerializedName("ssid")
     private String ssid;
 
     /**
-     * 无线网络设备的ssid列表,返回数组格式
+     * 无线网络设备的ssid列表,返回数组格式.
      */
     @SerializedName("ssid_list")
     private List ssidList;
 
     /**
-     * 门店内设备的设备类型,0-未添加设备,1-专业型设备,4-密码型设备,5-portal自助型设备,31-portal改造型设备
+     * 门店内设备的设备类型.
+     * 0-未添加设备,1-专业型设备,4-密码型设备,5-portal自助型设备,31-portal改造型设备
      */
     @SerializedName("protocol_type")
     private Integer protocolType;
 
     /**
-     * 商户自己的id,与门店poi_id对应关系,建议在添加门店时候建立关联关系,具体请参考“微信门店接口”
+     * 商户自己的id.
+     * 与门店poi_id对应关系,建议在添加门店时候建立关联关系,具体请参考“微信门店接口”
      */
     @SerializedName("sid")
     private String sid;
 
     /**
-     * 门店ID(适用于微信卡券、微信门店业务),具体定义参考微信门店,与shop_id一一对应
+     * 门店ID(适用于微信卡券、微信门店业务).
+     * 具体定义参考微信门店,与shop_id一一对应
      */
     @SerializedName("poi_id")
     private String poiId;
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java
index e25e251e..fd32840c 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java
@@ -386,7 +386,12 @@ public interface WxMpApiUrl {
     /**
      * list.
      */
-    BIZWIFI_SHOP_LIST(API_DEFAULT_HOST_URL, "/bizwifi/shop/list");
+    BIZWIFI_SHOP_LIST(API_DEFAULT_HOST_URL, "/bizwifi/shop/list"),
+
+    /**
+     * get.
+     */
+    BIZWIFI_SHOP_GET(API_DEFAULT_HOST_URL, "/bizwifi/shop/get");
 
     private String prefix;
     private String path;
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpWifiServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpWifiServiceImplTest.java
index e129474e..9ef98f77 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpWifiServiceImplTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpWifiServiceImplTest.java
@@ -4,11 +4,17 @@ import com.google.inject.Inject;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.test.ApiTestModule;
+import me.chanjar.weixin.mp.bean.wifi.WxMpWifiShopDataResult;
 import me.chanjar.weixin.mp.bean.wifi.WxMpWifiShopListResult;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
-import static org.testng.Assert.*;
+import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Wifi.BIZWIFI_SHOP_GET;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 /**
  * 
@@ -26,6 +32,59 @@ public class WxMpWifiServiceImplTest {
   @Test
   public void testListShop() throws WxErrorException {
     final WxMpWifiShopListResult result = this.wxService.getWifiService().listShop(1, 2);
+    assertThat(result).isNotNull();
     System.out.println(result);
   }
+
+  @Test
+  public void testGetShopWifiInfo() throws WxErrorException {
+    final WxMpWifiShopDataResult wifiInfo = this.wxService.getWifiService().getShopWifiInfo(123);
+    assertThat(wifiInfo).isNotNull();
+    System.out.println(wifiInfo);
+  }
+
+  public static class MockTest {
+    private WxMpService wxService = mock(WxMpService.class);
+
+    @Test
+    public void testGetShopWifiInfo() throws Exception {
+      String returnJson = "{\n" +
+        "  \"errcode\": 0,\n" +
+        "  \"data\": {\n" +
+        "    \"shop_name\": \"南山店\",\n" +
+        "    \"ssid\": \" WX123\",\n" +
+        "    \"ssid_list\": [\n" +
+        "      \"WX123\",\n" +
+        "      \"WX456\"\n" +
+        "    ],\n" +
+        "    \"ssid_password_list\": [\n" +
+        "      {\n" +
+        "        \"ssid\": \"WX123\",\n" +
+        "        \"password\": \"123456789\"\n" +
+        "      },\n" +
+        "      {\n" +
+        "        \"ssid\": \"WX456\",\n" +
+        "        \"password\": \"21332465dge\"\n" +
+        "      }\n" +
+        "    ],\n" +
+        "    \"password\": \"123456789\",\n" +
+        "    \"protocol_type\": 4,\n" +
+        "    \"ap_count\": 2,\n" +
+        "    \"template_id\": 1,\n" +
+        "    \"homepage_url\": \"http://www.weixin.qq.com/\",\n" +
+        "    \"bar_type\": 1,\n" +
+        "    \"sid\":\"\",\n" +
+        "    \"poi_id\":\"285633617\"\n" +
+        "  }\n" +
+        "}";
+
+      when(wxService.post(eq(BIZWIFI_SHOP_GET), anyString())).thenReturn(returnJson);
+      when(wxService.getWifiService()).thenReturn(new WxMpWifiServiceImpl(wxService));
+
+      final WxMpWifiShopDataResult wifiInfo = this.wxService.getWifiService().getShopWifiInfo(123);
+      assertThat(wifiInfo).isNotNull();
+      System.out.println(wifiInfo);
+
+    }
+  }
 }