diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java index adef735d..3b7f2125 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java @@ -302,28 +302,28 @@ public interface WxMpService { WxMpKefuService getKefuService(); /** - * 返回素材相关接口的方法实现类,以方便调用个其各种接口 + * 返回素材相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpMaterialService */ WxMpMaterialService getMaterialService(); /** - * 返回菜单相关接口的方法实现类,以方便调用个其各种接口 + * 返回菜单相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpMenuService */ WxMpMenuService getMenuService(); /** - * 返回用户相关接口的方法实现类,以方便调用个其各种接口 + * 返回用户相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpUserService */ WxMpUserService getUserService(); /** - * 返回用户分组相关接口的方法实现类,以方便调用个其各种接口 + * 返回用户分组相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpGroupService */ @@ -331,44 +331,51 @@ public interface WxMpService { WxMpGroupService getGroupService(); /** - * 返回用户标签相关接口的方法实现类,以方便调用个其各种接口 + * 返回用户标签相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpUserTagService */ WxMpUserTagService getUserTagService(); /** - * 返回二维码相关接口的方法实现类,以方便调用个其各种接口 + * 返回二维码相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpQrcodeService */ WxMpQrcodeService getQrcodeService(); /** - * 返回卡券相关接口的方法实现类,以方便调用个其各种接口 + * 返回卡券相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpCardService */ WxMpCardService getCardService(); /** - * 返回微信支付相关接口的方法实现类,以方便调用个其各种接口 + * 返回微信支付相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpPayService */ WxMpPayService getPayService(); /** - * 返回数据分析统计相关接口的方法实现类,以方便调用个其各种接口 + * 返回数据分析统计相关接口方法的实现类对象,以方便调用个其各种接口 * * @return WxMpDataCubeService */ WxMpDataCubeService getDataCubeService(); /** - * 返回用户黑名单管理相关接口的方法实现类,以方便调用其各种借口 + * 返回用户黑名单管理相关接口方法的实现类对象,以方便调用其各种接口 * - * @return WxMpUserBlackListService + * @return WxMpUserBlacklistService */ WxMpUserBlacklistService getBlackListService(); + + /** + * 返回门店管理相关接口方法的实现类对象,以方便调用其各种接口 + * + * @return WxMpStoreService + */ + WxMpStoreService getStoreService(); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpStoreService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpStoreService.java index 3d02cf92..3b445791 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpStoreService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpStoreService.java @@ -1,6 +1,7 @@ package me.chanjar.weixin.mp.api; import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.mp.bean.WxMpStoreBaseInfo; /** * 门店管理的相关接口代码 @@ -19,8 +20,6 @@ public interface WxMpStoreService { * 接口格式: http://api.weixin.qq.com/cgi-bin/poi/addpoi?access_token=TOKEN * * - * @param scene_id 参数。 - * @param expire_seconds 过期秒数,默认60秒,最小60秒,最大1800秒 */ - void userUpdateRemark(String openid, String remark) throws WxErrorException; + void add(WxMpStoreBaseInfo request) throws WxErrorException; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java index a923f485..9710697f 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java @@ -1,9 +1,23 @@ package me.chanjar.weixin.mp.api.impl; +import java.io.IOException; + +import org.apache.http.HttpHost; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.conn.ssl.DefaultHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.bean.WxJsapiSignature; import me.chanjar.weixin.common.bean.result.WxError; @@ -12,22 +26,39 @@ import me.chanjar.weixin.common.session.StandardSessionManager; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.common.util.RandomUtils; import me.chanjar.weixin.common.util.crypto.SHA1; -import me.chanjar.weixin.common.util.http.*; -import me.chanjar.weixin.mp.api.*; -import me.chanjar.weixin.mp.bean.*; -import me.chanjar.weixin.mp.bean.result.*; -import org.apache.http.HttpHost; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.conn.ssl.DefaultHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.BasicResponseHandler; -import org.apache.http.impl.client.CloseableHttpClient; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; +import me.chanjar.weixin.common.util.http.ApacheHttpClientBuilder; +import me.chanjar.weixin.common.util.http.DefaultApacheHttpClientBuilder; +import me.chanjar.weixin.common.util.http.RequestExecutor; +import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; +import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; +import me.chanjar.weixin.common.util.http.URIUtil; +import me.chanjar.weixin.mp.api.WxMpCardService; +import me.chanjar.weixin.mp.api.WxMpConfigStorage; +import me.chanjar.weixin.mp.api.WxMpDataCubeService; +import me.chanjar.weixin.mp.api.WxMpGroupService; +import me.chanjar.weixin.mp.api.WxMpKefuService; +import me.chanjar.weixin.mp.api.WxMpMaterialService; +import me.chanjar.weixin.mp.api.WxMpMenuService; +import me.chanjar.weixin.mp.api.WxMpPayService; +import me.chanjar.weixin.mp.api.WxMpQrcodeService; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.WxMpStoreService; +import me.chanjar.weixin.mp.api.WxMpUserBlacklistService; +import me.chanjar.weixin.mp.api.WxMpUserService; +import me.chanjar.weixin.mp.api.WxMpUserTagService; +import me.chanjar.weixin.mp.bean.WxMpIndustry; +import me.chanjar.weixin.mp.bean.WxMpMassGroupMessage; +import me.chanjar.weixin.mp.bean.WxMpMassNews; +import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage; +import me.chanjar.weixin.mp.bean.WxMpMassPreviewMessage; +import me.chanjar.weixin.mp.bean.WxMpMassVideo; +import me.chanjar.weixin.mp.bean.WxMpSemanticQuery; +import me.chanjar.weixin.mp.bean.WxMpTemplateMessage; +import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; +import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; +import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; +import me.chanjar.weixin.mp.bean.result.WxMpSemanticQueryResult; +import me.chanjar.weixin.mp.bean.result.WxMpUser; public class WxMpServiceImpl implements WxMpService { @@ -65,6 +96,8 @@ public class WxMpServiceImpl implements WxMpService { private WxMpPayService payService = new WxMpPayServiceImpl(this); + private WxMpStoreService storeService = new WxMpStoreServiceImpl(this); + private WxMpDataCubeService dataCubeService = new WxMpDataCubeServiceImpl(this); private WxMpUserBlacklistService blackListService = new WxMpUserBlacklistServiceImpl(this); @@ -442,6 +475,8 @@ public class WxMpServiceImpl implements WxMpService { return this.execute(executor, uri, data); } if (error.getErrorCode() != 0) { + this.log.error("\n[URL]: {}\n[PARAMS]: {}\n[RESPONSE]: {}", uri, data, + error); throw new WxErrorException(error); } return null; @@ -560,4 +595,9 @@ public class WxMpServiceImpl implements WxMpService { return this.blackListService; } + @Override + public WxMpStoreService getStoreService() { + return this.storeService; + } + } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImpl.java new file mode 100644 index 00000000..9ed28df5 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImpl.java @@ -0,0 +1,67 @@ +package me.chanjar.weixin.mp.api.impl; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map.Entry; + +import org.joor.Reflect; + +import com.google.common.collect.Lists; + +import me.chanjar.weixin.common.annotation.Required; +import me.chanjar.weixin.common.bean.result.WxError; +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.WxMpStoreService; +import me.chanjar.weixin.mp.bean.WxMpStoreBaseInfo; + +/** + * Created by Binary Wang on 2016/9/26. + * @author binarywang (https://github.com/binarywang) + * + */ +public class WxMpStoreServiceImpl implements WxMpStoreService { + + private WxMpService wxMpService; + + public WxMpStoreServiceImpl(WxMpService wxMpService) { + this.wxMpService = wxMpService; + } + + @Override + public void add(WxMpStoreBaseInfo request) throws WxErrorException { + checkParameters(request); + + String url = "http://api.weixin.qq.com/cgi-bin/poi/addpoi"; + // String data = "{\"business\":{\"base_info\":{\"business_name\":\"haha\",\"branch_name\":\"abc\",\"province\":\"aaa\",\"city\":\"aaa\",\"district\":\"aaa\",\"telephone\":\"122\",\"categories\":\"adsdas\",\"offset_type\":\"1\",\"longitude\":\"115.32375\",\"latitude\":\"25.097486\"}}}"; + String response = this.wxMpService.post(url, request.toJson()); + // String response = this.wxMpService.post(url, data); + WxError wxError = WxError.fromJson(response); + if (wxError.getErrorCode() != 0) { + throw new WxErrorException(wxError); + } + } + + private void checkParameters(WxMpStoreBaseInfo request) { + List nullFields = Lists.newArrayList(); + for (Entry entry : Reflect.on(request).fields() + .entrySet()) { + Reflect reflect = entry.getValue(); + try { + Field field = request.getClass().getDeclaredField(entry.getKey()); + if (field.isAnnotationPresent(Required.class) + && reflect.get() == null) { + nullFields.add(entry.getKey()); + } + } catch (NoSuchFieldException | SecurityException e) { + e.printStackTrace(); + } + } + + if (!nullFields.isEmpty()) { + throw new IllegalArgumentException("必填字段[" + nullFields + "]必须提供值"); + } + + } + +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpStoreBaseInfo.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpStoreBaseInfo.java index bcfd2e4f..bb097a69 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpStoreBaseInfo.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpStoreBaseInfo.java @@ -1,9 +1,14 @@ package me.chanjar.weixin.mp.bean; +import java.math.BigDecimal; +import java.util.List; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.google.gson.annotations.SerializedName; -import java.util.List; +import me.chanjar.weixin.common.annotation.Required; +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; /** * 门店基础信息 @@ -11,6 +16,16 @@ import java.util.List; * Created by Binary Wang on 2016-09-23. */ public class WxMpStoreBaseInfo { + + public String toJson() { + JsonElement base_info = WxMpGsonBuilder.create().toJsonTree(this); + JsonObject jsonObject = new JsonObject(); + jsonObject.add("base_info", base_info); + JsonObject business = new JsonObject(); + business.add("business", jsonObject); + return business.toString(); + } + public static class WxMpStorePhoto { /** * 照片url @@ -31,6 +46,7 @@ public class WxMpStoreBaseInfo { * 门店名称(仅为商户名,如:国美、麦当劳,不应包含地区、地址、分店名等信息,错误示例:北京国美) * 不能为空,15个汉字或30个英文字符内 */ + @Required @SerializedName("business_name") private String businessName; @@ -39,14 +55,16 @@ public class WxMpStoreBaseInfo { * 分店名称(不应包含地区信息,不应与门店名有重复,错误示例:北京王府井店) * 10个字以内 */ + @Required @SerializedName("branch_name") - private String branch_name; + private String branchName; /** * province * 门店所在的省份(直辖市填城市名,如:北京市) * 10个字以内 */ + @Required @SerializedName("province") private String province; @@ -55,6 +73,7 @@ public class WxMpStoreBaseInfo { * 门店所在的城市 * 10个字以内 */ + @Required @SerializedName("city") private String city; @@ -63,6 +82,7 @@ public class WxMpStoreBaseInfo { * 门店所在地区 * 10个字以内 */ + @Required @SerializedName("district") private String district; @@ -71,6 +91,7 @@ public class WxMpStoreBaseInfo { * 门店所在的详细街道地址(不要填写省市信息) * (东莞等没有“区”行政区划的城市,该字段可不必填写。其余城市必填。) */ + @Required @SerializedName("address") private String address; @@ -78,6 +99,7 @@ public class WxMpStoreBaseInfo { * telephone * 门店的电话(纯数字,区号、分机号均由“-”隔开) */ + @Required @SerializedName("telephone") private String telephone; @@ -85,29 +107,33 @@ public class WxMpStoreBaseInfo { * categories * 门店的类型(不同级分类用“,”隔开,如:美食,川菜,火锅。详细分类参见附件:微信门店类目表) */ + @Required @SerializedName("categories") - private String categories; + private String[] categories; /** - * offset_type + * offsetType * 坐标类型,1 为火星坐标(目前只能选1) */ + @Required @SerializedName("offset_type") - private String offset_type; + private Integer offsetType = 1; /** * longitude * 门店所在地理位置的经度 */ + @Required @SerializedName("longitude") - private String longitude; + private BigDecimal longitude; /** * latitude * 门店所在地理位置的纬度(经纬度均为火星坐标,最好选用腾讯地图标记的坐标) */ + @Required @SerializedName("latitude") - private String latitude; + private BigDecimal latitude; /** * photo_list @@ -115,7 +141,7 @@ public class WxMpStoreBaseInfo { * 图片内容不允许与门店不相关,不允许为二维码、员工合照(或模特肖像)、营业执照、无门店正门的街景、地图截图、公交地铁站牌、菜单截图等 */ @SerializedName("photo_list") - private List photo_list; + private List photos; /** * recommend @@ -145,12 +171,317 @@ public class WxMpStoreBaseInfo { * 营业时间,24 小时制表示,用“-”连接,如 8:00-20:00 */ @SerializedName("open_time") - private String open_time; + private String openTime; /** * avg_price * 人均价格,大于0 的整数 */ @SerializedName("avg_price") - private Integer avg_price; + private Integer avgPrice; + + public String getSid() { + return this.sid; + } + + public void setSid(String sid) { + this.sid = sid; + } + + public String getBusinessName() { + return this.businessName; + } + + public void setBusinessName(String businessName) { + this.businessName = businessName; + } + + public String getBranchName() { + return this.branchName; + } + + public void setBranchName(String branchName) { + this.branchName = branchName; + } + + public String getProvince() { + return this.province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getCity() { + return this.city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getDistrict() { + return this.district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public String getAddress() { + return this.address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getTelephone() { + return this.telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public String[] getCategories() { + return this.categories; + } + + public void setCategories(String[] categories) { + this.categories = categories; + } + + public Integer getOffsetType() { + return this.offsetType; + } + + public void setOffsetType(Integer offsetType) { + this.offsetType = offsetType; + } + + public BigDecimal getLongitude() { + return this.longitude; + } + + public void setLongitude(BigDecimal longitude) { + this.longitude = longitude; + } + + public BigDecimal getLatitude() { + return this.latitude; + } + + public void setLatitude(BigDecimal latitude) { + this.latitude = latitude; + } + + public List getPhotos() { + return this.photos; + } + + public void setPhotos(List photos) { + this.photos = photos; + } + + public String getRecommend() { + return this.recommend; + } + + public void setRecommend(String recommend) { + this.recommend = recommend; + } + + public String getSpecial() { + return this.special; + } + + public void setSpecial(String special) { + this.special = special; + } + + public String getIntroduction() { + return this.introduction; + } + + public void setIntroduction(String introduction) { + this.introduction = introduction; + } + + public String getOpenTime() { + return this.openTime; + } + + public void setOpenTime(String openTime) { + this.openTime = openTime; + } + + public Integer getAvgPrice() { + return this.avgPrice; + } + + public void setAvgPrice(Integer avgPrice) { + this.avgPrice = avgPrice; + } + + public static WxMpStoreBaseInfoBuilder builder() { + return new WxMpStoreBaseInfoBuilder(); + } + + public static class WxMpStoreBaseInfoBuilder { + private String sid; + private String businessName; + private String branchName; + private String province; + private String city; + private String district; + private String address; + private String telephone; + private String[] categories; + private Integer offsetType; + private BigDecimal longitude; + private BigDecimal latitude; + private List photos; + private String recommend; + private String special; + private String introduction; + private String openTime; + private Integer avgPrice; + + public WxMpStoreBaseInfoBuilder sid(String sid) { + this.sid = sid; + return this; + } + + public WxMpStoreBaseInfoBuilder businessName(String businessName) { + this.businessName = businessName; + return this; + } + + public WxMpStoreBaseInfoBuilder branchName(String branchName) { + this.branchName = branchName; + return this; + } + + public WxMpStoreBaseInfoBuilder province(String province) { + this.province = province; + return this; + } + + public WxMpStoreBaseInfoBuilder city(String city) { + this.city = city; + return this; + } + + public WxMpStoreBaseInfoBuilder district(String district) { + this.district = district; + return this; + } + + public WxMpStoreBaseInfoBuilder address(String address) { + this.address = address; + return this; + } + + public WxMpStoreBaseInfoBuilder telephone(String telephone) { + this.telephone = telephone; + return this; + } + + public WxMpStoreBaseInfoBuilder categories(String[] categories) { + this.categories = categories; + return this; + } + + public WxMpStoreBaseInfoBuilder offsetType(Integer offsetType) { + this.offsetType = offsetType; + return this; + } + + public WxMpStoreBaseInfoBuilder longitude(BigDecimal longitude) { + this.longitude = longitude; + return this; + } + + public WxMpStoreBaseInfoBuilder latitude(BigDecimal latitude) { + this.latitude = latitude; + return this; + } + + public WxMpStoreBaseInfoBuilder photos(List photos) { + this.photos = photos; + return this; + } + + public WxMpStoreBaseInfoBuilder recommend(String recommend) { + this.recommend = recommend; + return this; + } + + public WxMpStoreBaseInfoBuilder special(String special) { + this.special = special; + return this; + } + + public WxMpStoreBaseInfoBuilder introduction(String introduction) { + this.introduction = introduction; + return this; + } + + public WxMpStoreBaseInfoBuilder openTime(String openTime) { + this.openTime = openTime; + return this; + } + + public WxMpStoreBaseInfoBuilder avgPrice(Integer avgPrice) { + this.avgPrice = avgPrice; + return this; + } + + public WxMpStoreBaseInfoBuilder from(WxMpStoreBaseInfo origin) { + this.sid(origin.sid); + this.businessName(origin.businessName); + this.branchName(origin.branchName); + this.province(origin.province); + this.city(origin.city); + this.district(origin.district); + this.address(origin.address); + this.telephone(origin.telephone); + this.categories(origin.categories); + this.offsetType(origin.offsetType); + this.longitude(origin.longitude); + this.latitude(origin.latitude); + this.photos(origin.photos); + this.recommend(origin.recommend); + this.special(origin.special); + this.introduction(origin.introduction); + this.openTime(origin.openTime); + this.avgPrice(origin.avgPrice); + return this; + } + + public WxMpStoreBaseInfo build() { + WxMpStoreBaseInfo m = new WxMpStoreBaseInfo(); + m.sid = this.sid; + m.businessName = this.businessName; + m.branchName = this.branchName; + m.province = this.province; + m.city = this.city; + m.district = this.district; + m.address = this.address; + m.telephone = this.telephone; + m.categories = this.categories; + m.offsetType = this.offsetType; + m.longitude = this.longitude; + m.latitude = this.latitude; + m.photos = this.photos; + m.recommend = this.recommend; + m.special = this.special; + m.introduction = this.introduction; + m.openTime = this.openTime; + m.avgPrice = this.avgPrice; + return m; + } + } + } diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImplTest.java new file mode 100644 index 00000000..1e1ed49c --- /dev/null +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpStoreServiceImplTest.java @@ -0,0 +1,42 @@ +/** + * Copyright(c) 2011-2016 by UCredit Inc. + * All Rights Reserved + */ +package me.chanjar.weixin.mp.api.impl; + +import java.math.BigDecimal; + +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import com.google.inject.Inject; + +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.mp.api.ApiTestModule; +import me.chanjar.weixin.mp.bean.WxMpStoreBaseInfo; + +/** + * @author 王彬 (Binary Wang) + * + */ +@Test +@Guice(modules = ApiTestModule.class) +public class WxMpStoreServiceImplTest { + @Inject + private WxMpServiceImpl wxMpService; + + /** + * Test method for {@link me.chanjar.weixin.mp.api.impl.WxMpStoreServiceImpl#add(me.chanjar.weixin.mp.bean.WxMpStoreBaseInfo)}. + * @throws WxErrorException + */ + public void testAdd() throws WxErrorException { + this.wxMpService.getStoreService() + .add(WxMpStoreBaseInfo.builder().businessName("haha").branchName("abc") + .province("aaa").district("aaa").telephone("122").address("abc") + .categories(new String[] { "美食,川菜,火锅" }) + .longitude(new BigDecimal("115.32375")) + .latitude(new BigDecimal("25.097486")).city("aaa").offsetType(1) + .build()); + } + +}