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 ListssidPasswordList; + + /** + * 设备密码,当设备类型为密码型时返回. + */ + @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); + + } + } }