| @@ -302,28 +302,28 @@ public interface WxMpService { | |||||
| WxMpKefuService getKefuService(); | WxMpKefuService getKefuService(); | ||||
| /** | /** | ||||
| * 返回素材相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回素材相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpMaterialService | * @return WxMpMaterialService | ||||
| */ | */ | ||||
| WxMpMaterialService getMaterialService(); | WxMpMaterialService getMaterialService(); | ||||
| /** | /** | ||||
| * 返回菜单相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回菜单相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpMenuService | * @return WxMpMenuService | ||||
| */ | */ | ||||
| WxMpMenuService getMenuService(); | WxMpMenuService getMenuService(); | ||||
| /** | /** | ||||
| * 返回用户相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回用户相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpUserService | * @return WxMpUserService | ||||
| */ | */ | ||||
| WxMpUserService getUserService(); | WxMpUserService getUserService(); | ||||
| /** | /** | ||||
| * 返回用户分组相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回用户分组相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpGroupService | * @return WxMpGroupService | ||||
| */ | */ | ||||
| @@ -331,44 +331,51 @@ public interface WxMpService { | |||||
| WxMpGroupService getGroupService(); | WxMpGroupService getGroupService(); | ||||
| /** | /** | ||||
| * 返回用户标签相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回用户标签相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpUserTagService | * @return WxMpUserTagService | ||||
| */ | */ | ||||
| WxMpUserTagService getUserTagService(); | WxMpUserTagService getUserTagService(); | ||||
| /** | /** | ||||
| * 返回二维码相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回二维码相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpQrcodeService | * @return WxMpQrcodeService | ||||
| */ | */ | ||||
| WxMpQrcodeService getQrcodeService(); | WxMpQrcodeService getQrcodeService(); | ||||
| /** | /** | ||||
| * 返回卡券相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回卡券相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpCardService | * @return WxMpCardService | ||||
| */ | */ | ||||
| WxMpCardService getCardService(); | WxMpCardService getCardService(); | ||||
| /** | /** | ||||
| * 返回微信支付相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回微信支付相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpPayService | * @return WxMpPayService | ||||
| */ | */ | ||||
| WxMpPayService getPayService(); | WxMpPayService getPayService(); | ||||
| /** | /** | ||||
| * 返回数据分析统计相关接口的方法实现类,以方便调用个其各种接口 | |||||
| * 返回数据分析统计相关接口方法的实现类对象,以方便调用个其各种接口 | |||||
| * | * | ||||
| * @return WxMpDataCubeService | * @return WxMpDataCubeService | ||||
| */ | */ | ||||
| WxMpDataCubeService getDataCubeService(); | WxMpDataCubeService getDataCubeService(); | ||||
| /** | /** | ||||
| * 返回用户黑名单管理相关接口的方法实现类,以方便调用其各种借口 | |||||
| * 返回用户黑名单管理相关接口方法的实现类对象,以方便调用其各种接口 | |||||
| * | * | ||||
| * @return WxMpUserBlackListService | |||||
| * @return WxMpUserBlacklistService | |||||
| */ | */ | ||||
| WxMpUserBlacklistService getBlackListService(); | WxMpUserBlacklistService getBlackListService(); | ||||
| /** | |||||
| * 返回门店管理相关接口方法的实现类对象,以方便调用其各种接口 | |||||
| * | |||||
| * @return WxMpStoreService | |||||
| */ | |||||
| WxMpStoreService getStoreService(); | |||||
| } | } | ||||
| @@ -1,6 +1,7 @@ | |||||
| package me.chanjar.weixin.mp.api; | package me.chanjar.weixin.mp.api; | ||||
| import me.chanjar.weixin.common.exception.WxErrorException; | 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 | * 接口格式: http://api.weixin.qq.com/cgi-bin/poi/addpoi?access_token=TOKEN | ||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| * @param scene_id 参数。 | |||||
| * @param expire_seconds 过期秒数,默认60秒,最小60秒,最大1800秒 | |||||
| */ | */ | ||||
| void userUpdateRemark(String openid, String remark) throws WxErrorException; | |||||
| void add(WxMpStoreBaseInfo request) throws WxErrorException; | |||||
| } | } | ||||
| @@ -1,9 +1,23 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | 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.JsonArray; | ||||
| import com.google.gson.JsonElement; | import com.google.gson.JsonElement; | ||||
| import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
| import com.google.gson.JsonParser; | import com.google.gson.JsonParser; | ||||
| import me.chanjar.weixin.common.bean.WxAccessToken; | import me.chanjar.weixin.common.bean.WxAccessToken; | ||||
| import me.chanjar.weixin.common.bean.WxJsapiSignature; | import me.chanjar.weixin.common.bean.WxJsapiSignature; | ||||
| import me.chanjar.weixin.common.bean.result.WxError; | 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.session.WxSessionManager; | ||||
| import me.chanjar.weixin.common.util.RandomUtils; | import me.chanjar.weixin.common.util.RandomUtils; | ||||
| import me.chanjar.weixin.common.util.crypto.SHA1; | 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 { | public class WxMpServiceImpl implements WxMpService { | ||||
| @@ -65,6 +96,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| private WxMpPayService payService = new WxMpPayServiceImpl(this); | private WxMpPayService payService = new WxMpPayServiceImpl(this); | ||||
| private WxMpStoreService storeService = new WxMpStoreServiceImpl(this); | |||||
| private WxMpDataCubeService dataCubeService = new WxMpDataCubeServiceImpl(this); | private WxMpDataCubeService dataCubeService = new WxMpDataCubeServiceImpl(this); | ||||
| private WxMpUserBlacklistService blackListService = new WxMpUserBlacklistServiceImpl(this); | private WxMpUserBlacklistService blackListService = new WxMpUserBlacklistServiceImpl(this); | ||||
| @@ -442,6 +475,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| return this.execute(executor, uri, data); | return this.execute(executor, uri, data); | ||||
| } | } | ||||
| if (error.getErrorCode() != 0) { | if (error.getErrorCode() != 0) { | ||||
| this.log.error("\n[URL]: {}\n[PARAMS]: {}\n[RESPONSE]: {}", uri, data, | |||||
| error); | |||||
| throw new WxErrorException(error); | throw new WxErrorException(error); | ||||
| } | } | ||||
| return null; | return null; | ||||
| @@ -560,4 +595,9 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| return this.blackListService; | return this.blackListService; | ||||
| } | } | ||||
| @Override | |||||
| public WxMpStoreService getStoreService() { | |||||
| return this.storeService; | |||||
| } | |||||
| } | } | ||||
| @@ -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<String> nullFields = Lists.newArrayList(); | |||||
| for (Entry<String, Reflect> 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 + "]必须提供值"); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1,9 +1,14 @@ | |||||
| package me.chanjar.weixin.mp.bean; | 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 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. | * Created by Binary Wang on 2016-09-23. | ||||
| */ | */ | ||||
| public class WxMpStoreBaseInfo { | 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 { | public static class WxMpStorePhoto { | ||||
| /** | /** | ||||
| * 照片url | * 照片url | ||||
| @@ -31,6 +46,7 @@ public class WxMpStoreBaseInfo { | |||||
| * 门店名称(仅为商户名,如:国美、麦当劳,不应包含地区、地址、分店名等信息,错误示例:北京国美) | * 门店名称(仅为商户名,如:国美、麦当劳,不应包含地区、地址、分店名等信息,错误示例:北京国美) | ||||
| * 不能为空,15个汉字或30个英文字符内 | * 不能为空,15个汉字或30个英文字符内 | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("business_name") | @SerializedName("business_name") | ||||
| private String businessName; | private String businessName; | ||||
| @@ -39,14 +55,16 @@ public class WxMpStoreBaseInfo { | |||||
| * 分店名称(不应包含地区信息,不应与门店名有重复,错误示例:北京王府井店) | * 分店名称(不应包含地区信息,不应与门店名有重复,错误示例:北京王府井店) | ||||
| * 10个字以内 | * 10个字以内 | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("branch_name") | @SerializedName("branch_name") | ||||
| private String branch_name; | |||||
| private String branchName; | |||||
| /** | /** | ||||
| * province | * province | ||||
| * 门店所在的省份(直辖市填城市名,如:北京市) | * 门店所在的省份(直辖市填城市名,如:北京市) | ||||
| * 10个字以内 | * 10个字以内 | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("province") | @SerializedName("province") | ||||
| private String province; | private String province; | ||||
| @@ -55,6 +73,7 @@ public class WxMpStoreBaseInfo { | |||||
| * 门店所在的城市 | * 门店所在的城市 | ||||
| * 10个字以内 | * 10个字以内 | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("city") | @SerializedName("city") | ||||
| private String city; | private String city; | ||||
| @@ -63,6 +82,7 @@ public class WxMpStoreBaseInfo { | |||||
| * 门店所在地区 | * 门店所在地区 | ||||
| * 10个字以内 | * 10个字以内 | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("district") | @SerializedName("district") | ||||
| private String district; | private String district; | ||||
| @@ -71,6 +91,7 @@ public class WxMpStoreBaseInfo { | |||||
| * 门店所在的详细街道地址(不要填写省市信息) | * 门店所在的详细街道地址(不要填写省市信息) | ||||
| * (东莞等没有“区”行政区划的城市,该字段可不必填写。其余城市必填。) | * (东莞等没有“区”行政区划的城市,该字段可不必填写。其余城市必填。) | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("address") | @SerializedName("address") | ||||
| private String address; | private String address; | ||||
| @@ -78,6 +99,7 @@ public class WxMpStoreBaseInfo { | |||||
| * telephone | * telephone | ||||
| * 门店的电话(纯数字,区号、分机号均由“-”隔开) | * 门店的电话(纯数字,区号、分机号均由“-”隔开) | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("telephone") | @SerializedName("telephone") | ||||
| private String telephone; | private String telephone; | ||||
| @@ -85,29 +107,33 @@ public class WxMpStoreBaseInfo { | |||||
| * categories | * categories | ||||
| * 门店的类型(不同级分类用“,”隔开,如:美食,川菜,火锅。详细分类参见附件:微信门店类目表) | * 门店的类型(不同级分类用“,”隔开,如:美食,川菜,火锅。详细分类参见附件:微信门店类目表) | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("categories") | @SerializedName("categories") | ||||
| private String categories; | |||||
| private String[] categories; | |||||
| /** | /** | ||||
| * offset_type | |||||
| * offsetType | |||||
| * 坐标类型,1 为火星坐标(目前只能选1) | * 坐标类型,1 为火星坐标(目前只能选1) | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("offset_type") | @SerializedName("offset_type") | ||||
| private String offset_type; | |||||
| private Integer offsetType = 1; | |||||
| /** | /** | ||||
| * longitude | * longitude | ||||
| * 门店所在地理位置的经度 | * 门店所在地理位置的经度 | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("longitude") | @SerializedName("longitude") | ||||
| private String longitude; | |||||
| private BigDecimal longitude; | |||||
| /** | /** | ||||
| * latitude | * latitude | ||||
| * 门店所在地理位置的纬度(经纬度均为火星坐标,最好选用腾讯地图标记的坐标) | * 门店所在地理位置的纬度(经纬度均为火星坐标,最好选用腾讯地图标记的坐标) | ||||
| */ | */ | ||||
| @Required | |||||
| @SerializedName("latitude") | @SerializedName("latitude") | ||||
| private String latitude; | |||||
| private BigDecimal latitude; | |||||
| /** | /** | ||||
| * photo_list | * photo_list | ||||
| @@ -115,7 +141,7 @@ public class WxMpStoreBaseInfo { | |||||
| * 图片内容不允许与门店不相关,不允许为二维码、员工合照(或模特肖像)、营业执照、无门店正门的街景、地图截图、公交地铁站牌、菜单截图等 | * 图片内容不允许与门店不相关,不允许为二维码、员工合照(或模特肖像)、营业执照、无门店正门的街景、地图截图、公交地铁站牌、菜单截图等 | ||||
| */ | */ | ||||
| @SerializedName("photo_list") | @SerializedName("photo_list") | ||||
| private List<WxMpStorePhoto> photo_list; | |||||
| private List<WxMpStorePhoto> photos; | |||||
| /** | /** | ||||
| * recommend | * recommend | ||||
| @@ -145,12 +171,317 @@ public class WxMpStoreBaseInfo { | |||||
| * 营业时间,24 小时制表示,用“-”连接,如 8:00-20:00 | * 营业时间,24 小时制表示,用“-”连接,如 8:00-20:00 | ||||
| */ | */ | ||||
| @SerializedName("open_time") | @SerializedName("open_time") | ||||
| private String open_time; | |||||
| private String openTime; | |||||
| /** | /** | ||||
| * avg_price | * avg_price | ||||
| * 人均价格,大于0 的整数 | * 人均价格,大于0 的整数 | ||||
| */ | */ | ||||
| @SerializedName("avg_price") | @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<WxMpStorePhoto> getPhotos() { | |||||
| return this.photos; | |||||
| } | |||||
| public void setPhotos(List<WxMpStorePhoto> 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<WxMpStorePhoto> 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<WxMpStorePhoto> 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; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -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()); | |||||
| } | |||||
| } | |||||