diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpAiOpenService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpAiOpenService.java index c57ad9d0f..230910e88 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpAiOpenService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpAiOpenService.java @@ -15,9 +15,6 @@ import me.chanjar.weixin.mp.enums.AiLangType; * @author Binary Wang */ public interface WxMpAiOpenService { - String TRANSLATE_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?lfrom=%s<o=%s"; - String VOICE_UPLOAD_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?format=%s&voice_id=%s&lang=%s"; - String VOICE_QUERY_RESULT_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/queryrecoresultfortext"; /** *
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java index e7f2db4f8..8b9a59944 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java @@ -11,27 +11,6 @@ import me.chanjar.weixin.mp.bean.card.*; * @author yuanqixun 2018-08-29 */ public interface WxMpCardService { - String CARD_CREATE = "https://api.weixin.qq.com/card/create"; - String CARD_GET = "https://api.weixin.qq.com/card/get"; - String CARD_GET_TICKET = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card"; - String CARD_CODE_DECRYPT = "https://api.weixin.qq.com/card/code/decrypt"; - String CARD_CODE_GET = "https://api.weixin.qq.com/card/code/get"; - String CARD_CODE_CONSUME = "https://api.weixin.qq.com/card/code/consume"; - String CARD_CODE_MARK = "https://api.weixin.qq.com/card/code/mark"; - String CARD_TEST_WHITELIST = "https://api.weixin.qq.com/card/testwhitelist/set"; - String CARD_QRCODE_CREATE = "https://api.weixin.qq.com/card/qrcode/create"; - String CARD_LANDING_PAGE_CREATE = "https://api.weixin.qq.com/card/landingpage/create"; - - /** - * 将用户的卡券设置为失效状态. - */ - String CARD_CODE_UNAVAILABLE = "https://api.weixin.qq.com/card/code/unavailable"; - - /** - * 卡券删除. - */ - String CARD_DELETE = "https://api.weixin.qq.com/card/delete"; - /** * 得到WxMpService. */ diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java index d51ea88b8..53e5fc694 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java @@ -13,7 +13,6 @@ import me.chanjar.weixin.mp.enums.TicketType; * @author chanjarster */ public interface WxMpConfigStorage { - String getAccessToken(); Lock getAccessTokenLock(); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDataCubeService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDataCubeService.java index fecceea44..c1b35bee5 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDataCubeService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDataCubeService.java @@ -13,24 +13,6 @@ import java.util.List; * @author binarywang (https://github.com/binarywang) */ public interface WxMpDataCubeService { - String GET_USER_SUMMARY = "https://api.weixin.qq.com/datacube/getusersummary"; - String GET_USER_CUMULATE = "https://api.weixin.qq.com/datacube/getusercumulate"; - String GET_ARTICLE_SUMMARY = "https://api.weixin.qq.com/datacube/getarticlesummary"; - String GET_ARTICLE_TOTAL = "https://api.weixin.qq.com/datacube/getarticletotal"; - String GET_USER_READ = "https://api.weixin.qq.com/datacube/getuserread"; - String GET_USER_READ_HOUR = "https://api.weixin.qq.com/datacube/getuserreadhour"; - String GET_USER_SHARE = "https://api.weixin.qq.com/datacube/getusershare"; - String GET_USER_SHARE_HOUR = "https://api.weixin.qq.com/datacube/getusersharehour"; - String GET_UPSTREAM_MSG = "https://api.weixin.qq.com/datacube/getupstreammsg"; - String GET_UPSTREAM_MSG_HOUR = "https://api.weixin.qq.com/datacube/getupstreammsghour"; - String GET_UPSTREAM_MSG_WEEK = "https://api.weixin.qq.com/datacube/getupstreammsgweek"; - String GET_UPSTREAM_MSG_MONTH = "https://api.weixin.qq.com/datacube/getupstreammsgmonth"; - String GET_UPSTREAM_MSG_DIST = "https://api.weixin.qq.com/datacube/getupstreammsgdist"; - String GET_UPSTREAM_MSG_DIST_WEEK = "https://api.weixin.qq.com/datacube/getupstreammsgdistweek"; - String GET_UPSTREAM_MSG_DIST_MONTH = "https://api.weixin.qq.com/datacube/getupstreammsgdistmonth"; - String GET_INTERFACE_SUMMARY = "https://api.weixin.qq.com/datacube/getinterfacesummary"; - String GET_INTERFACE_SUMMARY_HOUR = "https://api.weixin.qq.com/datacube/getinterfacesummaryhour"; - //*******************用户分析数据接口***********************// /** diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDeviceService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDeviceService.java index 8a0fb6a58..c2ccef5a6 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDeviceService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDeviceService.java @@ -5,6 +5,8 @@ import me.chanjar.weixin.mp.bean.device.*; /** * Created by keungtung on 10/12/2016. + * + * @author keungtung */ public interface WxMpDeviceService { /** diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpKefuService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpKefuService.java index 99dcaba99..3404f5fe2 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpKefuService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpKefuService.java @@ -22,22 +22,6 @@ import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionWaitCaseList; * @author Binary Wang */ public interface WxMpKefuService { - String MESSAGE_CUSTOM_SEND = "https://api.weixin.qq.com/cgi-bin/message/custom/send"; - String GET_KF_LIST = "https://api.weixin.qq.com/cgi-bin/customservice/getkflist"; - String GET_ONLINE_KF_LIST = "https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist"; - String KFACCOUNT_ADD = "https://api.weixin.qq.com/customservice/kfaccount/add"; - String KFACCOUNT_UPDATE = "https://api.weixin.qq.com/customservice/kfaccount/update"; - String KFACCOUNT_INVITE_WORKER = "https://api.weixin.qq.com/customservice/kfaccount/inviteworker"; - String KFACCOUNT_UPLOAD_HEAD_IMG = "https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?kf_account=%s"; - String KFACCOUNT_DEL = "https://api.weixin.qq.com/customservice/kfaccount/del?kf_account=%s"; - String KFSESSION_CREATE = "https://api.weixin.qq.com/customservice/kfsession/create"; - String KFSESSION_CLOSE = "https://api.weixin.qq.com/customservice/kfsession/close"; - String KFSESSION_GET_SESSION = "https://api.weixin.qq.com/customservice/kfsession/getsession?openid=%s"; - String KFSESSION_GET_SESSION_LIST = "https://api.weixin.qq.com/customservice/kfsession/getsessionlist?kf_account=%s"; - String KFSESSION_GET_WAIT_CASE = "https://api.weixin.qq.com/customservice/kfsession/getwaitcase"; - String MSG_RECORD_LIST = "https://api.weixin.qq.com/customservice/msgrecord/getmsglist"; - String CUSTOM_TYPING = "https://api.weixin.qq.com/cgi-bin/message/custom/typing"; - /** ** 发送客服消息 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMarketingService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMarketingService.java index f59158b2b..c35a135ce 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMarketingService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMarketingService.java @@ -18,8 +18,6 @@ import java.util.List; * @author 007 */ public interface WxMpMarketingService { - String API_URL_PREFIX = "https://api.weixin.qq.com/marketing/"; - /** ** 创建数据源 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMassMessageService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMassMessageService.java index f3e8db9d1..c986e53e3 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMassMessageService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMassMessageService.java @@ -14,31 +14,6 @@ import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; * @author Binary Wang */ public interface WxMpMassMessageService { - /** - * 上传群发用的图文消息. - */ - String MEDIA_UPLOAD_NEWS_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; - /** - * 上传群发用的视频. - */ - String MEDIA_UPLOAD_VIDEO_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadvideo"; - /** - * 分组群发消息. - */ - String MESSAGE_MASS_SENDALL_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall"; - /** - * 按openId列表群发消息. - */ - String MESSAGE_MASS_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/send"; - /** - * 群发消息预览接口. - */ - String MESSAGE_MASS_PREVIEW_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/preview"; - /** - * 删除群发接口. - */ - String MESSAGE_MASS_DELETE_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/delete"; - /** ** 上传群发用的图文消息,上传后才能群发图文消息. @@ -85,7 +60,8 @@ public interface WxMpMassMessageService { /** ** 群发消息预览接口. - * 开发者可通过该接口发送消息给指定用户,在手机端查看消息的样式和排版。为了满足第三方平台开发者的需求,在保留对openID预览能力的同时,增加了对指定微信号发送预览的能力,但该能力每日调用次数有限制(100次),请勿滥用。 + * 开发者可通过该接口发送消息给指定用户,在手机端查看消息的样式和排版。为了满足第三方平台开发者的需求, + * 在保留对openID预览能力的同时,增加了对指定微信号发送预览的能力,但该能力每日调用次数有限制(100次),请勿滥用。 * 接口调用请求说明 * http请求方式: POST * https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java index 6d762f1c4..686c86f20 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java @@ -22,19 +22,10 @@ import me.chanjar.weixin.mp.bean.material.WxMpMaterialVideoInfoResult; * 即以https://api.weixin.qq.com/cgi-bin/material * 和 https://api.weixin.qq.com/cgi-bin/media开头的接口 *+ * + * @author Binary Wang */ public interface WxMpMaterialService { - String MEDIA_GET_URL = "https://api.weixin.qq.com/cgi-bin/media/get"; - String MEDIA_UPLOAD_URL = "https://api.weixin.qq.com/cgi-bin/media/upload?type=%s"; - String IMG_UPLOAD_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadimg"; - String MATERIAL_ADD_URL = "https://api.weixin.qq.com/cgi-bin/material/add_material?type=%s"; - String NEWS_ADD_URL = "https://api.weixin.qq.com/cgi-bin/material/add_news"; - String MATERIAL_GET_URL = "https://api.weixin.qq.com/cgi-bin/material/get_material"; - String NEWS_UPDATE_URL = "https://api.weixin.qq.com/cgi-bin/material/update_news"; - String MATERIAL_DEL_URL = "https://api.weixin.qq.com/cgi-bin/material/del_material"; - String MATERIAL_GET_COUNT_URL = "https://api.weixin.qq.com/cgi-bin/material/get_materialcount"; - String MATERIAL_BATCHGET_URL = "https://api.weixin.qq.com/cgi-bin/material/batchget_material"; - /** ** 新增临时素材 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMemberCardService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMemberCardService.java index 37785365c..e551f7d98 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMemberCardService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMemberCardService.java @@ -17,31 +17,6 @@ import me.chanjar.weixin.mp.bean.membercard.*; * @date 2018-08-30 */ public interface WxMpMemberCardService { - String MEMBER_CARD_CREATE = "https://api.weixin.qq.com/card/create"; - String MEMBER_CARD_ACTIVATE = "https://api.weixin.qq.com/card/membercard/activate"; - String MEMBER_CARD_USER_INFO_GET = "https://api.weixin.qq.com/card/membercard/userinfo/get"; - String MEMBER_CARD_UPDATE_USER = "https://api.weixin.qq.com/card/membercard/updateuser"; - /** - * 会员卡激活之微信开卡接口(wx_activate=true情况调用). - */ - String MEMBER_CARD_ACTIVATE_USER_FORM = "https://api.weixin.qq.com/card/membercard/activateuserform/set"; - - /** - * 获取会员卡开卡插件参数. - */ - String MEMBER_CARD_ACTIVATE_URL = "https://api.weixin.qq.com/card/membercard/activate/geturl"; - - /** - * 会员卡信息更新. - */ - String MEMBER_CARD_UPDATE = "https://api.weixin.qq.com/card/update"; - - /** - * 跳转型会员卡开卡字段. - * 获取用户提交资料(wx_activate=true情况调用),开发者根据activate_ticket获取到用户填写的信息 - */ - String MEMBER_CARD_ACTIVATE_TEMP_INFO = "https://api.weixin.qq.com/card/membercard/activatetempinfo/get"; - /** * 得到WxMpService. * diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMenuService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMenuService.java index f0fe54957..e7cef4ebb 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMenuService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMenuService.java @@ -6,12 +6,11 @@ import me.chanjar.weixin.mp.bean.menu.WxMpGetSelfMenuInfoResult; import me.chanjar.weixin.mp.bean.menu.WxMpMenu; /** - * 菜单相关操作接口 + * 菜单相关操作接口. * * @author Binary Wang */ public interface WxMpMenuService { - /** ** 自定义菜单创建接口 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpQrcodeService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpQrcodeService.java index 131ebf634..6622159d2 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpQrcodeService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpQrcodeService.java @@ -14,7 +14,6 @@ import java.io.File; * @author Binary Wang */ public interface WxMpQrcodeService { - /** ** 换取临时二维码ticket 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 a0452ebad..92d17dbb7 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 @@ -5,13 +5,13 @@ import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; import me.chanjar.weixin.common.util.http.RequestExecutor; import me.chanjar.weixin.common.util.http.RequestHttp; -import me.chanjar.weixin.mp.api.impl.BaseWxMpServiceImpl; import me.chanjar.weixin.mp.bean.WxMpSemanticQuery; import me.chanjar.weixin.mp.bean.result.WxMpCurrentAutoReplyInfo; import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; import me.chanjar.weixin.mp.bean.result.WxMpSemanticQueryResult; import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.enums.TicketType; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import java.util.Map; @@ -21,61 +21,6 @@ import java.util.Map; * @author chanjarster */ public interface WxMpService { - /** - * 获取access_token. - */ - String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; - /** - * 获得各种类型的ticket. - */ - String GET_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type="; - /** - * 长链接转短链接接口. - */ - String SHORTURL_API_URL = "https://api.weixin.qq.com/cgi-bin/shorturl"; - /** - * 语义查询接口. - */ - String SEMANTIC_SEMPROXY_SEARCH_URL = "https://api.weixin.qq.com/semantic/semproxy/search"; - /** - * 用code换取oauth2的access token. - */ - String OAUTH2_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; - /** - * 刷新oauth2的access token. - */ - String OAUTH2_REFRESH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s"; - /** - * 用oauth2获取用户信息. - */ - String OAUTH2_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=%s"; - /** - * 验证oauth2的access token是否有效. - */ - String OAUTH2_VALIDATE_TOKEN_URL = "https://api.weixin.qq.com/sns/auth?access_token=%s&openid=%s"; - /** - * 获取微信服务器IP地址. - */ - String GET_CALLBACK_IP_URL = "https://api.weixin.qq.com/cgi-bin/getcallbackip"; - /** - * 第三方使用网站应用授权登录的url. - */ - String QRCONNECT_URL = "https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect"; - /** - * oauth2授权的url连接. - */ - String CONNECT_OAUTH2_AUTHORIZE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s&connect_redirect=1#wechat_redirect"; - - /** - * 获取公众号的自动回复规则. - */ - String GET_CURRENT_AUTOREPLY_INFO_URL = "https://api.weixin.qq.com/cgi-bin/get_current_autoreply_info"; - - /** - * 公众号调用或第三方平台帮公众号调用对公众号的所有api调用(包括第三方帮其调用)次数进行清零. - */ - String CLEAR_QUOTA_URL = "https://api.weixin.qq.com/cgi-bin/clear_quota"; - /** ** 验证消息的确来自微信服务器. @@ -158,7 +103,7 @@ public interface WxMpService { * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=长链接转短链接接口 **/ - String shortUrl(String long_url) throws WxErrorException; + String shortUrl(String longUrl) throws WxErrorException; /** *@@ -264,11 +209,21 @@ public interface WxMpService { /** * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的GET请求. + * + * @param queryParam 参数 + * @param url 请求接口地址 + * @return 接口响应字符串 + * @throws WxErrorException 异常 */ String get(String url, String queryParam) throws WxErrorException; /** * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的POST请求. + * + * @param postData 请求参数json值 + * @param url 请求接口地址 + * @return 接口响应字符串 + * @throws WxErrorException 异常 */ String post(String url, String postData) throws WxErrorException; @@ -278,14 +233,54 @@ public interface WxMpService { * 比{@link #get}和{@link #post}方法更灵活,可以自己构造RequestExecutor用来处理不同的参数和不同的返回类型。 * 可以参考,{@link MediaUploadRequestExecutor}的实现方法 *+ * + * @param data 参数数据 + * @param executor 执行器 + * @param url 接口地址 + * @return 结果 + * @throws WxErrorException 异常 */ -T execute(RequestExecutor executor, String uri, E data) throws WxErrorException; + T execute(RequestExecutor executor, String url, E data) throws WxErrorException; + + /** + * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的GET请求. + * + * @param queryParam 参数 + * @param url 请求接口地址 + * @return 接口响应字符串 + * @throws WxErrorException 异常 + */ + String get(WxMpApiUrl url, String queryParam) throws WxErrorException; + + /** + * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的POST请求. + * + * @param postData 请求参数json值 + * @param url 请求接口地址 + * @return 接口响应字符串 + * @throws WxErrorException 异常 + */ + String post(WxMpApiUrl url, String postData) throws WxErrorException; /** * - * 设置当微信系统响应系统繁忙时,要等待多少 retrySleepMillis(ms) * 2^(重试次数 - 1) 再发起重试. - * @param retrySleepMillis 默认:1000ms + * Service没有实现某个API的时候,可以用这个, + * 比{@link #get}和{@link #post}方法更灵活,可以自己构造RequestExecutor用来处理不同的参数和不同的返回类型。 + * 可以参考,{@link MediaUploadRequestExecutor}的实现方法 *+ * + * @param data 参数数据 + * @param executor 执行器 + * @param url 接口地址 + * @return 结果 + * @throws WxErrorException 异常 + */ +T execute(RequestExecutor executor, WxMpApiUrl url, E data) throws WxErrorException; + + /** + * 设置当微信系统响应系统繁忙时,要等待多少 retrySleepMillis(ms) * 2^(重试次数 - 1) 再发起重试. + * + * @param retrySleepMillis 默认:1000ms */ void setRetrySleepMillis(int retrySleepMillis); @@ -311,12 +306,14 @@ public interface WxMpService { /** * {@link Map } 加入新的 {@link WxMpConfigStorage},适用于动态添加新的微信公众号配置 + * * @param configStorage 新的微信配置 */ void addConfigStorage(String mpId, WxMpConfigStorage configStorage); /** * 从{@link Map } 移除 {@link String mpId} 所对应的 {@link WxMpConfigStorage},适用于动态移除微信公众号配置 + * * @param mpId 对应公众号的标识 */ void removeConfigStorage(String mpId); @@ -324,19 +321,22 @@ public interface WxMpService { /** * 注入多个 {@link WxMpConfigStorage} 的实现. 并为每个 {@link WxMpConfigStorage} 赋予不同的 {@link String mpId} 值 * 随机采用一个{@link String mpId}进行Http初始化操作 + * * @param configStorages WxMpConfigStorage map */ void setMultiConfigStorages(Map configStorages); /** * 注入多个 {@link WxMpConfigStorage} 的实现. 并为每个 {@link WxMpConfigStorage} 赋予不同的 {@link String label} 值 + * * @param configStorages WxMpConfigStorage map - * @param defaultMpId 设置一个{@link WxMpConfigStorage} 所对应的{@link String mpId}进行Http初始化 + * @param defaultMpId 设置一个{@link WxMpConfigStorage} 所对应的{@link String mpId}进行Http初始化 */ void setMultiConfigStorages(Map configStorages, String defaultMpId); /** * 进行相应的公众号切换 + * * @param mpId 公众号标识 * @return 切换是否成功 */ @@ -344,6 +344,7 @@ public interface WxMpService { /** * 进行相应的公众号切换 + * * @param mpId 公众号标识 * @return 切换成功,则返回当前对象,方便链式调用,否则抛出异常 */ diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpShakeService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpShakeService.java index 1f6c3052e..8c45dadea 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpShakeService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpShakeService.java @@ -7,12 +7,11 @@ import me.chanjar.weixin.mp.bean.WxMpShakeQuery; import me.chanjar.weixin.mp.bean.shake.*; /** - * 摇一摇周边的相关接口 + * 摇一摇周边的相关接口. * * @author rememberber */ public interface WxMpShakeService { - /** * * 获取设备及用户信息
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 7b0913e68..82eaa5eeb 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 @@ -8,20 +8,12 @@ import me.chanjar.weixin.mp.bean.store.WxMpStoreListResult; import java.util.List; /** - * 门店管理的相关接口代码 - *+ * 门店管理的相关接口代码. * Created by Binary Wang on 2016-09-23. * * @author Binary Wang */ public interface WxMpStoreService
{ - String POI_GET_WX_CATEGORY_URL = "https://api.weixin.qq.com/cgi-bin/poi/getwxcategory"; - String POI_UPDATE_URL = "https://api.weixin.qq.com/cgi-bin/poi/updatepoi"; - String POI_LIST_URL = "https://api.weixin.qq.com/cgi-bin/poi/getpoilist"; - String POI_DEL_URL = "https://api.weixin.qq.com/cgi-bin/poi/delpoi"; - String POI_GET_URL = "https://api.weixin.qq.com/cgi-bin/poi/getpoi"; - String POI_ADD_URL = "https://api.weixin.qq.com/cgi-bin/poi/addpoi"; - /** * * 创建门店 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpSubscribeMsgService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpSubscribeMsgService.java index 1e91d9a2d..549018e63 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpSubscribeMsgService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpSubscribeMsgService.java @@ -13,7 +13,6 @@ import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage; * @date 2018-01-22 上午11:07 */ public interface WxMpSubscribeMsgService { - /** ** 构造用户订阅一条模板消息授权的url连接 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpTemplateMsgService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpTemplateMsgService.java index f57c469c0..656840cbf 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpTemplateMsgService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpTemplateMsgService.java @@ -17,7 +17,6 @@ import java.util.List; **/ public interface WxMpTemplateMsgService { - /** ** 设置所属行业 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserService.java index 71b6b1709..00eea89e7 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserService.java @@ -1,25 +1,19 @@ package me.chanjar.weixin.mp.api; -import java.util.List; - import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.bean.WxMpUserQuery; import me.chanjar.weixin.mp.bean.result.WxMpChangeOpenid; import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.bean.result.WxMpUserList; +import java.util.List; + /** * 用户管理相关操作接口. * * @author Binary Wang */ public interface WxMpUserService { - String USER_INFO_BATCH_GET_URL = "https://api.weixin.qq.com/cgi-bin/user/info/batchget"; - String USER_GET_URL = "https://api.weixin.qq.com/cgi-bin/user/get"; - String USER_INFO_URL = "https://api.weixin.qq.com/cgi-bin/user/info"; - String USER_INFO_UPDATE_REMARK_URL = "https://api.weixin.qq.com/cgi-bin/user/info/updateremark"; - String USER_CHANGE_OPENID_URL = "http://api.weixin.qq.com/cgi-bin/changeopenid"; - /** ** 设置用户备注名 @@ -87,7 +81,9 @@ public interface WxMpUserService { /** ** 获取用户列表 - * 公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成。一次拉取调用最多拉取10000个关注者的OpenID,可以通过多次拉取的方式来满足需求。 + * 公众号可通过本接口来获取帐号的关注者列表, + * 关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成。 + * 一次拉取调用最多拉取10000个关注者的OpenID,可以通过多次拉取的方式来满足需求。 * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140840&token=&lang=zh_CN * http请求方式: GET(请使用https协议) * 接口地址:https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID @@ -101,11 +97,12 @@ public interface WxMpUserService { ** 微信公众号主体变更迁移用户 openid * 详情请见: http://kf.qq.com/faq/170221aUnmmU170221eUZJNf.html + * http://kf.qq.com/faq/1901177NrqMr190117nqYJze.html * http请求方式: POST * 接口地址:https://api.weixin.qq.com/cgi-bin/changeopenid?access_token=ACCESS_TOKEN ** - * @param fromAppid 原公众号的 appid + * @param fromAppid 原公众号的 appid * @param openidList 需要转换的openid,这些必须是旧账号目前关注的才行,否则会出错;一次最多100个 */ ListchangeOpenid(String fromAppid, List openidList) throws WxErrorException; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserTagService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserTagService.java index 031585053..c1549aff4 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserTagService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserTagService.java @@ -13,7 +13,6 @@ import java.util.List; * @author Binary Wang */ public interface WxMpUserTagService { - /** * * 创建标签 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java index 534ea1390..28b69b98f 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java @@ -6,6 +6,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.bean.WxJsapiSignature; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; @@ -22,25 +23,25 @@ import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; import me.chanjar.weixin.mp.bean.result.WxMpSemanticQueryResult; import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.enums.TicketType; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import me.chanjar.weixin.mp.util.WxMpConfigStorageHolder; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.Map; import java.util.concurrent.locks.Lock; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Other.*; + /** * 基础实现类. * * @author someone */ +@Slf4j public abstract class BaseWxMpServiceImplimplements WxMpService, RequestHttp { private static final JsonParser JSON_PARSER = new JsonParser(); - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - protected WxSessionManager sessionManager = new StandardSessionManager(); private WxMpKefuService kefuService = new WxMpKefuServiceImpl(this); private WxMpMaterialService materialService = new WxMpMaterialServiceImpl(this); @@ -73,7 +74,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH return SHA1.gen(this.getWxMpConfigStorage().getToken(), timestamp, nonce) .equals(signature); } catch (Exception e) { - this.log.error("Checking signature failed, and the reason is :" + e.getMessage()); + log.error("Checking signature failed, and the reason is :" + e.getMessage()); return false; } } @@ -94,7 +95,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH if (this.getWxMpConfigStorage().isTicketExpired(type)) { String responseContent = execute(SimpleGetRequestExecutor.create(this), - WxMpService.GET_TICKET_URL + type.getCode(), null); + GET_TICKET_URL + type.getCode(), null); JsonObject tmpJsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); String jsapiTicket = tmpJsonObject.get("ticket").getAsString(); int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); @@ -143,27 +144,27 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH JsonObject o = new JsonObject(); o.addProperty("action", "long2short"); o.addProperty("long_url", longUrl); - String responseContent = this.post(WxMpService.SHORTURL_API_URL, o.toString()); + String responseContent = this.post(SHORTURL_API_URL, o.toString()); JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); return tmpJsonElement.getAsJsonObject().get("short_url").getAsString(); } @Override public WxMpSemanticQueryResult semanticQuery(WxMpSemanticQuery semanticQuery) throws WxErrorException { - String responseContent = this.post(WxMpService.SEMANTIC_SEMPROXY_SEARCH_URL, semanticQuery.toJson()); + String responseContent = this.post(SEMANTIC_SEMPROXY_SEARCH_URL, semanticQuery.toJson()); return WxMpSemanticQueryResult.fromJson(responseContent); } @Override public String oauth2buildAuthorizationUrl(String redirectURI, String scope, String state) { - return String.format(WxMpService.CONNECT_OAUTH2_AUTHORIZE_URL, + return String.format(CONNECT_OAUTH2_AUTHORIZE_URL.getUrl(), this.getWxMpConfigStorage().getAppId(), URIUtil.encodeURIComponent(redirectURI), scope, StringUtils.trimToEmpty(state)); } @Override public String buildQrConnectUrl(String redirectURI, String scope, String state) { - return String.format(WxMpService.QRCONNECT_URL, - this.getWxMpConfigStorage().getAppId(), URIUtil.encodeURIComponent(redirectURI), scope, StringUtils.trimToEmpty(state)); + return String.format(QRCONNECT_URL.getUrl(), this.getWxMpConfigStorage().getAppId(), + URIUtil.encodeURIComponent(redirectURI), scope, StringUtils.trimToEmpty(state)); } private WxMpOAuth2AccessToken getOAuth2AccessToken(String url) throws WxErrorException { @@ -178,13 +179,14 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH @Override public WxMpOAuth2AccessToken oauth2getAccessToken(String code) throws WxErrorException { - String url = String.format(WxMpService.OAUTH2_ACCESS_TOKEN_URL, this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret(), code); + String url = String.format(OAUTH2_ACCESS_TOKEN_URL.getUrl(), this.getWxMpConfigStorage().getAppId(), + this.getWxMpConfigStorage().getSecret(), code); return this.getOAuth2AccessToken(url); } @Override public WxMpOAuth2AccessToken oauth2refreshAccessToken(String refreshToken) throws WxErrorException { - String url = String.format(WxMpService.OAUTH2_REFRESH_TOKEN_URL, this.getWxMpConfigStorage().getAppId(), refreshToken); + String url = String.format(OAUTH2_REFRESH_TOKEN_URL.getUrl(), this.getWxMpConfigStorage().getAppId(), refreshToken); return this.getOAuth2AccessToken(url); } @@ -194,7 +196,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH lang = "zh_CN"; } - String url = String.format(WxMpService.OAUTH2_USERINFO_URL, token.getAccessToken(), token.getOpenId(), lang); + String url = String.format(OAUTH2_USERINFO_URL.getUrl(), token.getAccessToken(), token.getOpenId(), lang); try { RequestExecutor executor = SimpleGetRequestExecutor.create(this); @@ -207,7 +209,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH @Override public boolean oauth2validateAccessToken(WxMpOAuth2AccessToken token) { - String url = String.format(WxMpService.OAUTH2_VALIDATE_TOKEN_URL, token.getAccessToken(), token.getOpenId()); + String url = String.format(OAUTH2_VALIDATE_TOKEN_URL.getUrl(), token.getAccessToken(), token.getOpenId()); try { SimpleGetRequestExecutor.create(this).execute(url, null); @@ -221,7 +223,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH @Override public String[] getCallbackIP() throws WxErrorException { - String responseContent = this.get(WxMpService.GET_CALLBACK_IP_URL, null); + String responseContent = this.get(GET_CALLBACK_IP_URL, null); JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent); JsonArray ipList = tmpJsonElement.getAsJsonObject().get("ip_list").getAsJsonArray(); String[] ipArray = new String[ipList.size()]; @@ -248,11 +250,26 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH return execute(SimpleGetRequestExecutor.create(this), url, queryParam); } + @Override + public String get(WxMpApiUrl url, String queryParam) throws WxErrorException { + return this.get(url.getUrl(), queryParam); + } + @Override public String post(String url, String postData) throws WxErrorException { return execute(SimplePostRequestExecutor.create(this), url, postData); } + @Override + public String post(WxMpApiUrl url, String postData) throws WxErrorException { + return this.post(url.getUrl(), postData); + } + + @Override + public T execute(RequestExecutor executor, WxMpApiUrl url, E data) throws WxErrorException { + return this.execute(executor, url.getUrl(), data); + } + /** * 向微信端发送请求,在这里执行的策略是当发生access_token过期时才去刷新,然后重新执行请求,而不是全局定时请求. */ @@ -264,7 +281,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH return this.executeInternal(executor, uri, data); } catch (WxErrorException e) { if (retryTimes + 1 > this.maxRetryTimes) { - this.log.warn("重试达到最大次数【{}】", maxRetryTimes); + log.warn("重试达到最大次数【{}】", maxRetryTimes); //最后一次重试失败后,直接抛出异常,不再等待 throw new RuntimeException("微信服务端异常,超出重试次数"); } @@ -274,7 +291,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH if (error.getErrorCode() == -1) { int sleepMillis = this.retrySleepMillis * (1 << retryTimes); try { - this.log.warn("微信系统繁忙,{} ms 后重试(第{}次)", sleepMillis, retryTimes + 1); + log.warn("微信系统繁忙,{} ms 后重试(第{}次)", sleepMillis, retryTimes + 1); Thread.sleep(sleepMillis); } catch (InterruptedException e1) { throw new RuntimeException(e1); @@ -285,11 +302,11 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH } } while (retryTimes++ < this.maxRetryTimes); - this.log.warn("重试达到最大次数【{}】", this.maxRetryTimes); + log.warn("重试达到最大次数【{}】", this.maxRetryTimes); throw new RuntimeException("微信服务端异常,超出重试次数"); } - public T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException { + protected T executeInternal(RequestExecutor executor, String uri, E data) throws WxErrorException { E dataForLog = DataUtils.handleDataWithSecret(data); if (uri.contains("access_token=")) { @@ -302,7 +319,7 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH try { T result = executor.execute(uriWithAccessToken, data); - this.log.debug("\n【请求地址】: {}\n【请求参数】:{}\n【响应数据】:{}", uriWithAccessToken, dataForLog, result); + log.debug("\n【请求地址】: {}\n【请求参数】:{}\n【响应数据】:{}", uriWithAccessToken, dataForLog, result); return result; } catch (WxErrorException e) { WxError error = e.getError(); @@ -321,12 +338,12 @@ public abstract class BaseWxMpServiceImpl implements WxMpService, RequestH } if (error.getErrorCode() != 0) { - this.log.error("\n【请求地址】: {}\n【请求参数】:{}\n【错误信息】:{}", uriWithAccessToken, dataForLog, error); + log.error("\n【请求地址】: {}\n【请求参数】:{}\n【错误信息】:{}", uriWithAccessToken, dataForLog, error); throw new WxErrorException(error, e); } return null; } catch (IOException e) { - this.log.error("\n【请求地址】: {}\n【请求参数】:{}\n【异常信息】:{}", uriWithAccessToken, dataForLog, e.getMessage()); + log.error("\n【请求地址】: {}\n【请求参数】:{}\n【异常信息】:{}", uriWithAccessToken, dataForLog, e.getMessage()); throw new WxErrorException(WxError.builder().errorMsg(e.getMessage()).build(), e); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java index 628b6c55f..119376d62 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpAiOpenServiceImpl.java @@ -1,16 +1,20 @@ package me.chanjar.weixin.mp.api.impl; -import java.io.File; - import com.google.gson.JsonParser; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpAiOpenService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.enums.AiLangType; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import me.chanjar.weixin.mp.util.requestexecuter.voice.VoiceUploadRequestExecutor; +import java.io.File; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.AiOpen.*; + /** * * Created by BinaryWang on 2018/6/9. @@ -18,13 +22,10 @@ import me.chanjar.weixin.mp.util.requestexecuter.voice.VoiceUploadRequestExecuto * * @author Binary Wang */ +@RequiredArgsConstructor public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { private static final JsonParser JSON_PARSER = new JsonParser(); - private WxMpService wxMpService; - - public WxMpAiOpenServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public void uploadVoice(String voiceId, AiLangType lang, File voiceFile) throws WxErrorException { @@ -33,7 +34,7 @@ public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { } this.wxMpService.execute(VoiceUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), - String.format(VOICE_UPLOAD_URL, "mp3", voiceId, lang.getCode()), + String.format(VOICE_UPLOAD_URL.getUrl(), "mp3", voiceId, lang.getCode()), voiceFile); } @@ -45,7 +46,7 @@ public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { @Override public String translate(AiLangType langFrom, AiLangType langTo, String content) throws WxErrorException { - String response = this.wxMpService.post(String.format(TRANSLATE_URL, langFrom.getCode(), langTo.getCode()), content); + String response = this.wxMpService.post(String.format(TRANSLATE_URL.getUrl(), langFrom.getCode(), langTo.getCode()), content); WxError error = WxError.fromJson(response, WxType.MP); if (error.getErrorCode() != 0) { diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java index d96b9752d..f232f1bb6 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java @@ -13,6 +13,7 @@ import me.chanjar.weixin.mp.api.WxMpCardService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.card.*; import me.chanjar.weixin.mp.enums.TicketType; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; @@ -54,7 +55,7 @@ public class WxMpCardServiceImpl implements WxMpCardService { if (this.getWxMpService().getWxMpConfigStorage().isTicketExpired(type)) { String responseContent = this.wxMpService.execute(SimpleGetRequestExecutor - .create(this.getWxMpService().getRequestHttp()), CARD_GET_TICKET, null); + .create(this.getWxMpService().getRequestHttp()), WxMpApiUrl.Card.CARD_GET_TICKET, null); JsonElement tmpJsonElement = new JsonParser().parse(responseContent); JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); String cardApiTicket = tmpJsonObject.get("ticket").getAsString(); @@ -94,7 +95,7 @@ public class WxMpCardServiceImpl implements WxMpCardService { public String decryptCardCode(String encryptCode) throws WxErrorException { JsonObject param = new JsonObject(); param.addProperty("encrypt_code", encryptCode); - String responseContent = this.wxMpService.post(CARD_CODE_DECRYPT, param.toString()); + String responseContent = this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_DECRYPT, param.toString()); JsonElement tmpJsonElement = new JsonParser().parse(responseContent); JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); JsonPrimitive jsonPrimitive = tmpJsonObject.getAsJsonPrimitive("code"); @@ -107,7 +108,7 @@ public class WxMpCardServiceImpl implements WxMpCardService { param.addProperty("card_id", cardId); param.addProperty("code", code); param.addProperty("check_consume", checkConsume); - String responseContent = this.wxMpService.post(CARD_CODE_GET, param.toString()); + String responseContent = this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_GET, param.toString()); JsonElement tmpJsonElement = new JsonParser().parse(responseContent); return WxMpGsonBuilder.create().fromJson(tmpJsonElement, new TypeToken() { @@ -128,7 +129,7 @@ public class WxMpCardServiceImpl implements WxMpCardService { param.addProperty("card_id", cardId); } - return this.wxMpService.post(CARD_CODE_CONSUME, param.toString()); + return this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_CONSUME, param.toString()); } @Override @@ -138,7 +139,7 @@ public class WxMpCardServiceImpl implements WxMpCardService { param.addProperty("card_id", cardId); param.addProperty("openid", openId); param.addProperty("is_mark", isMark); - String responseContent = this.getWxMpService().post(CARD_CODE_MARK, param.toString()); + String responseContent = this.getWxMpService().post(WxMpApiUrl.Card.CARD_CODE_MARK, param.toString()); JsonElement tmpJsonElement = new JsonParser().parse(responseContent); WxMpCardResult cardResult = WxMpGsonBuilder.create().fromJson(tmpJsonElement, new TypeToken () { @@ -152,7 +153,7 @@ public class WxMpCardServiceImpl implements WxMpCardService { public String getCardDetail(String cardId) throws WxErrorException { JsonObject param = new JsonObject(); param.addProperty("card_id", cardId); - String responseContent = this.wxMpService.post(CARD_GET, param.toString()); + String responseContent = this.wxMpService.post(WxMpApiUrl.Card.CARD_GET, param.toString()); // 判断返回值 JsonObject json = (new JsonParser()).parse(responseContent).getAsJsonObject(); @@ -173,12 +174,12 @@ public class WxMpCardServiceImpl implements WxMpCardService { array.add(openid); JsonObject jsonObject = new JsonObject(); jsonObject.add("openid", array); - return this.wxMpService.post(CARD_TEST_WHITELIST, GSON.toJson(jsonObject)); + return this.wxMpService.post(WxMpApiUrl.Card.CARD_TEST_WHITELIST, GSON.toJson(jsonObject)); } @Override public WxMpCardCreateResult createCard(WxMpCardCreateMessage cardCreateMessage) throws WxErrorException { - String response = this.wxMpService.post(CARD_CREATE, GSON.toJson(cardCreateMessage)); + String response = this.wxMpService.post(WxMpApiUrl.Card.CARD_CREATE, GSON.toJson(cardCreateMessage)); return WxMpCardCreateResult.fromJson(response); } @@ -200,12 +201,12 @@ public class WxMpCardServiceImpl implements WxMpCardService { cardJson.addProperty("outer_str", outerStr); actionInfoJson.add("card", cardJson); jsonObject.add("action_info", actionInfoJson); - return WxMpCardQrcodeCreateResult.fromJson(this.wxMpService.post(CARD_QRCODE_CREATE, GSON.toJson(jsonObject))); + return WxMpCardQrcodeCreateResult.fromJson(this.wxMpService.post(WxMpApiUrl.Card.CARD_QRCODE_CREATE, GSON.toJson(jsonObject))); } @Override public WxMpCardLandingPageCreateResult createLandingPage(WxMpCardLandingPageCreateRequest request) throws WxErrorException { - String response = this.wxMpService.post(CARD_LANDING_PAGE_CREATE, GSON.toJson(request)); + String response = this.wxMpService.post(WxMpApiUrl.Card.CARD_LANDING_PAGE_CREATE, GSON.toJson(request)); return WxMpCardLandingPageCreateResult.fromJson(response); } @@ -218,7 +219,7 @@ public class WxMpCardServiceImpl implements WxMpCardService { jsonRequest.addProperty("card_id", cardId); jsonRequest.addProperty("code", code); jsonRequest.addProperty("reason", reason); - return this.wxMpService.post(CARD_CODE_UNAVAILABLE, GSON.toJson(jsonRequest)); + return this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_UNAVAILABLE, GSON.toJson(jsonRequest)); } @Override @@ -228,7 +229,7 @@ public class WxMpCardServiceImpl implements WxMpCardService { } JsonObject param = new JsonObject(); param.addProperty("card_id", cardId); - String response = this.wxMpService.post(CARD_DELETE, param.toString()); + String response = this.wxMpService.post(WxMpApiUrl.Card.CARD_DELETE, param.toString()); return WxMpCardDeleteResult.fromJson(response); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImpl.java index bf60892a1..a3523c0d7 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDataCubeServiceImpl.java @@ -1,30 +1,30 @@ package me.chanjar.weixin.mp.api.impl; import com.google.gson.JsonObject; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpDataCubeService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.datacube.*; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import org.apache.commons.lang3.time.FastDateFormat; import java.text.Format; import java.util.Date; import java.util.List; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.DataCube.*; + /** * Created by Binary Wang on 2016/8/23. * * @author binarywang (https://github.com/binarywang) */ +@RequiredArgsConstructor public class WxMpDataCubeServiceImpl implements WxMpDataCubeService { - private final Format dateFormat = FastDateFormat.getInstance("yyyy-MM-dd"); - private WxMpService wxMpService; - - public WxMpDataCubeServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public List getUserSummary(Date beginDate, Date endDate) throws WxErrorException { @@ -69,7 +69,7 @@ public class WxMpDataCubeServiceImpl implements WxMpDataCubeService { return this.getArticleResults(GET_USER_SHARE_HOUR, beginDate, endDate); } - private List getArticleResults(String url, Date beginDate, Date endDate) throws WxErrorException { + private List getArticleResults(WxMpApiUrl url, Date beginDate, Date endDate) throws WxErrorException { String responseContent = this.wxMpService.post(url, buildParams(beginDate, endDate)); return WxDataCubeArticleResult.fromJson(responseContent); } @@ -109,13 +109,13 @@ public class WxMpDataCubeServiceImpl implements WxMpDataCubeService { return this.getUpstreamMsg(GET_UPSTREAM_MSG_DIST_MONTH, beginDate, endDate); } - private List getUpstreamMsg(String url, Date beginDate, Date endDate) throws WxErrorException { + private List getUpstreamMsg(WxMpApiUrl url, Date beginDate, Date endDate) throws WxErrorException { String responseContent = this.wxMpService.post(url, buildParams(beginDate, endDate)); return WxDataCubeMsgResult.fromJson(responseContent); } @Override - public List getInterfaceSummary(Date beginDate, Date endDate) throws WxErrorException { + public List getInterfaceSummary(Date beginDate, Date endDate) throws WxErrorException { String responseContent = this.wxMpService.post(GET_INTERFACE_SUMMARY, buildParams(beginDate, endDate)); return WxDataCubeInterfaceResult.fromJson(responseContent); } @@ -128,7 +128,7 @@ public class WxMpDataCubeServiceImpl implements WxMpDataCubeService { } @Override - public List getInterfaceSummaryHour(Date beginDate, Date endDate) throws WxErrorException { + public List getInterfaceSummaryHour(Date beginDate, Date endDate) throws WxErrorException { String responseContent = this.wxMpService.post(GET_INTERFACE_SUMMARY_HOUR, buildParams(beginDate, endDate)); return WxDataCubeInterfaceResult.fromJson(responseContent); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java index 3fe464a89..3aa122a53 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java @@ -1,86 +1,76 @@ package me.chanjar.weixin.mp.api.impl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpDeviceService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.device.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Device.*; /** * Created by keungtung on 10/12/2016. + * + * @author keungtung */ +@Slf4j +@RequiredArgsConstructor public class WxMpDeviceServiceImpl implements WxMpDeviceService { - private static final String API_URL_PREFIX = "https://api.weixin.qq.com/device"; - private static Logger log = LoggerFactory.getLogger(WxMpMenuServiceImpl.class); - - private WxMpService wxMpService; - - public WxMpDeviceServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public TransMsgResp transMsg(WxDeviceMsg msg) throws WxErrorException { - String url = API_URL_PREFIX + "/transmsg"; - String response = this.wxMpService.post(url, msg.toJson()); + String response = this.wxMpService.post(DEVICE_TRANSMSG, msg.toJson()); return TransMsgResp.fromJson(response); } @Override public WxDeviceQrCodeResult getQrCode(String productId) throws WxErrorException { - String url = API_URL_PREFIX + "/getqrcode"; - String response = this.wxMpService.get(url, "product_id=" + productId); + String response = this.wxMpService.get(DEVICE_GETQRCODE, "product_id=" + productId); return WxDeviceQrCodeResult.fromJson(response); } @Override public WxDeviceAuthorizeResult authorize(WxDeviceAuthorize wxDeviceAuthorize) throws WxErrorException { - String url = API_URL_PREFIX + "/authorize_device"; - String response = this.wxMpService.post(url, wxDeviceAuthorize.toJson()); + String response = this.wxMpService.post(DEVICE_AUTHORIZE_DEVICE, wxDeviceAuthorize.toJson()); return WxDeviceAuthorizeResult.fromJson(response); } @Override public WxDeviceBindResult bind(WxDeviceBind wxDeviceBind) throws WxErrorException { - String url = API_URL_PREFIX + "/bind"; - String response = this.wxMpService.post(url, wxDeviceBind.toJson()); + String response = this.wxMpService.post(DEVICE_BIND, wxDeviceBind.toJson()); return WxDeviceBindResult.fromJson(response); } @Override public WxDeviceBindResult compelBind(WxDeviceBind wxDeviceBind) throws WxErrorException { - String url = API_URL_PREFIX + "/compel_bind"; - String response = this.wxMpService.post(url, wxDeviceBind.toJson()); + String response = this.wxMpService.post(DEVICE_COMPEL_BIND, wxDeviceBind.toJson()); return WxDeviceBindResult.fromJson(response); } @Override public WxDeviceBindResult unbind(WxDeviceBind wxDeviceBind) throws WxErrorException { - String url = API_URL_PREFIX + "/unbind?"; - String response = this.wxMpService.post(url, wxDeviceBind.toJson()); + String response = this.wxMpService.post(DEVICE_UNBIND, wxDeviceBind.toJson()); return WxDeviceBindResult.fromJson(response); } @Override public WxDeviceBindResult compelUnbind(WxDeviceBind wxDeviceBind) throws WxErrorException { - String url = API_URL_PREFIX + "/compel_unbind?"; - String response = this.wxMpService.post(url, wxDeviceBind.toJson()); + String response = this.wxMpService.post(DEVICE_COMPEL_UNBIND, wxDeviceBind.toJson()); return WxDeviceBindResult.fromJson(response); } @Override public WxDeviceOpenIdResult getOpenId(String deviceType, String deviceId) throws WxErrorException { - String url = API_URL_PREFIX + "/get_openid"; - String response = this.wxMpService.get(url, "device_type=" + deviceType + "&device_id=" + deviceId); + String response = this.wxMpService.get(DEVICE_GET_OPENID, "device_type=" + deviceType + "&device_id=" + deviceId); return WxDeviceOpenIdResult.fromJson(response); } @Override public WxDeviceBindDeviceResult getBindDevice(String openId) throws WxErrorException { - String url = API_URL_PREFIX + "/get_bind_device"; - String response = this.wxMpService.get(url, "openid=" + openId); + String response = this.wxMpService.get(DEVICE_GET_BIND_DEVICE, "openid=" + openId); return WxDeviceBindDeviceResult.fromJson(response); } } - diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImpl.java index 7707c567d..4743cc247 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpKefuServiceImpl.java @@ -1,12 +1,8 @@ package me.chanjar.weixin.mp.api.impl; -import java.io.File; -import java.util.Date; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.google.gson.JsonObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; @@ -16,23 +12,21 @@ import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfSessionRequest; -import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; -import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfMsgList; -import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfOnlineList; -import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionGetResult; -import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionList; -import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionWaitCaseList; +import me.chanjar.weixin.mp.bean.kefu.result.*; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; + +import java.io.File; +import java.util.Date; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Kefu.*; /** * @author Binary Wang */ +@Slf4j +@RequiredArgsConstructor public class WxMpKefuServiceImpl implements WxMpKefuService { - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - private WxMpService wxMpService; - - public WxMpKefuServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public boolean sendKefuMessage(WxMpKefuMessage message) throws WxErrorException { @@ -73,13 +67,14 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { @Override public boolean kfAccountUploadHeadImg(String kfAccount, File imgFile) throws WxErrorException { WxMediaUploadResult responseContent = this.wxMpService - .execute(MediaUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), String.format(KFACCOUNT_UPLOAD_HEAD_IMG, kfAccount), imgFile); + .execute(MediaUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), + String.format(KFACCOUNT_UPLOAD_HEAD_IMG.getUrl(), kfAccount), imgFile); return responseContent != null; } @Override public boolean kfAccountDel(String kfAccount) throws WxErrorException { - String responseContent = this.wxMpService.get(String.format(KFACCOUNT_DEL, kfAccount), null); + String responseContent = this.wxMpService.get(String.format(KFACCOUNT_DEL.getUrl(), kfAccount), null); return responseContent != null; } @@ -99,13 +94,13 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { @Override public WxMpKfSessionGetResult kfSessionGet(String openid) throws WxErrorException { - String responseContent = this.wxMpService.get(String.format(KFSESSION_GET_SESSION, openid), null); + String responseContent = this.wxMpService.get(String.format(KFSESSION_GET_SESSION.getUrl(), openid), null); return WxMpKfSessionGetResult.fromJson(responseContent); } @Override public WxMpKfSessionList kfSessionList(String kfAccount) throws WxErrorException { - String responseContent = this.wxMpService.get(String.format(KFSESSION_GET_SESSION_LIST, kfAccount), null); + String responseContent = this.wxMpService.get(String.format(KFSESSION_GET_SESSION_LIST.getUrl(), kfAccount), null); return WxMpKfSessionList.fromJson(responseContent); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImpl.java index 91e7d4c1b..5f2ece51f 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMarketingServiceImpl.java @@ -4,6 +4,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpMarketingService; import me.chanjar.weixin.mp.api.WxMpService; @@ -12,8 +14,6 @@ import me.chanjar.weixin.mp.bean.marketing.WxMpAdLeadResult; import me.chanjar.weixin.mp.bean.marketing.WxMpUserAction; import me.chanjar.weixin.mp.bean.marketing.WxMpUserActionSet; import org.apache.commons.lang3.time.DateFormatUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.URLEncoder; @@ -21,44 +21,40 @@ import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.List; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Marketing.*; + /** * @author 007 */ +@Slf4j +@RequiredArgsConstructor public class WxMpMarketingServiceImpl implements WxMpMarketingService { - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - private WxMpService wxMpService; - - public WxMpMarketingServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public long addUserActionSets(String type, String name, String description) throws WxErrorException { - String url = API_URL_PREFIX + "user_action_sets/add?version=v1.0"; JsonObject json = new JsonObject(); json.addProperty("type", type); json.addProperty("name", name); json.addProperty("description", description); - String responseContent = wxMpService.post(url, json.toString()); + String responseContent = wxMpService.post(USER_ACTION_SETS_ADD, json.toString()); JsonElement tmpJsonElement = new JsonParser().parse(responseContent); return tmpJsonElement.getAsJsonObject().get("data").getAsJsonObject().get("user_action_set_id").getAsLong(); } @Override public List getUserActionSets(Long userActionSetId) throws WxErrorException { - String url = API_URL_PREFIX + "user_action_sets/get"; - String responseContent = wxMpService.get(url, "version=v1.0&user_action_set_id=" + userActionSetId); + String responseContent = wxMpService.get(USER_ACTION_SETS_GET, "version=v1.0&user_action_set_id=" + userActionSetId); return WxMpUserActionSet.fromJson(responseContent); } @Override public void addUserAction(List actions) throws WxErrorException { - String url = API_URL_PREFIX + "user_actions/add?version=v1.0"; JsonArray json = new JsonArray(); for (WxMpUserAction action : actions) { json.add(action.toJsonObject()); } - wxMpService.post(url, json.toString()); + wxMpService.post(USER_ACTIONS_ADD, json.toString()); } @Override @@ -70,7 +66,6 @@ public class WxMpMarketingServiceImpl implements WxMpMarketingService { if (endDate == null) { endDate = today; } - String url = API_URL_PREFIX + "wechat_ad_leads/get"; String params = "version=v1.0"; JsonObject dateRange = new JsonObject(); dateRange.addProperty("begin_date", DateFormatUtils.format(beginDate, "yyyy-MM-dd")); @@ -84,9 +79,8 @@ public class WxMpMarketingServiceImpl implements WxMpMarketingService { filterJson.add(filter.toJsonObject()); } params += "&filtering=" + URLEncoder.encode(filterJson.toString(), StandardCharsets.UTF_8.name()); - ; } - String responseContent = wxMpService.get(url, params); + String responseContent = wxMpService.get(WECHAT_AD_LEADS_GET, params); return WxMpAdLeadResult.fromJson(responseContent); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImpl.java index 31aa043e9..2b23b0ba6 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMassMessageServiceImpl.java @@ -1,14 +1,15 @@ package me.chanjar.weixin.mp.api.impl; import com.google.gson.JsonObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpMassMessageService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.*; import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; /** * @@ -18,41 +19,38 @@ import org.slf4j.LoggerFactory; * * @author Binary Wang */ +@Slf4j +@RequiredArgsConstructor public class WxMpMassMessageServiceImpl implements WxMpMassMessageService { - protected final Logger log = LoggerFactory.getLogger(this.getClass()); - private WxMpService wxMpService; - - public WxMpMassMessageServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException { - String responseContent = this.wxMpService.post(MEDIA_UPLOAD_NEWS_URL, news.toJson()); + String responseContent = this.wxMpService.post(WxMpApiUrl.MassMessage.MEDIA_UPLOAD_NEWS_URL, news.toJson()); return WxMpMassUploadResult.fromJson(responseContent); } @Override public WxMpMassUploadResult massVideoUpload(WxMpMassVideo video) throws WxErrorException { - String responseContent = this.wxMpService.post(MEDIA_UPLOAD_VIDEO_URL, video.toJson()); + String responseContent = this.wxMpService.post(WxMpApiUrl.MassMessage.MEDIA_UPLOAD_VIDEO_URL, video.toJson()); return WxMpMassUploadResult.fromJson(responseContent); } @Override public WxMpMassSendResult massGroupMessageSend(WxMpMassTagMessage message) throws WxErrorException { - String responseContent = this.wxMpService.post(WxMpMassMessageService.MESSAGE_MASS_SENDALL_URL, message.toJson()); + String responseContent = this.wxMpService.post(WxMpApiUrl.MassMessage.MESSAGE_MASS_SENDALL_URL, message.toJson()); return WxMpMassSendResult.fromJson(responseContent); } @Override public WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException { - String responseContent = this.wxMpService.post(MESSAGE_MASS_SEND_URL, message.toJson()); + String responseContent = this.wxMpService.post(WxMpApiUrl.MassMessage.MESSAGE_MASS_SEND_URL, message.toJson()); return WxMpMassSendResult.fromJson(responseContent); } @Override public WxMpMassSendResult massMessagePreview(WxMpMassPreviewMessage wxMpMassPreviewMessage) throws WxErrorException { - String responseContent = this.wxMpService.post(MESSAGE_MASS_PREVIEW_URL, wxMpMassPreviewMessage.toJson()); + String responseContent = this.wxMpService.post(WxMpApiUrl.MassMessage.MESSAGE_MASS_PREVIEW_URL, wxMpMassPreviewMessage.toJson()); return WxMpMassSendResult.fromJson(responseContent); } @@ -61,7 +59,7 @@ public class WxMpMassMessageServiceImpl implements WxMpMassMessageService { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("msg_id", msgId); jsonObject.addProperty("article_idx", articleIndex); - this.wxMpService.post(MESSAGE_MASS_DELETE_URL, jsonObject.toString()); + this.wxMpService.post(WxMpApiUrl.MassMessage.MESSAGE_MASS_DELETE_URL, jsonObject.toString()); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java index 7929aced0..3352b95e2 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java @@ -1,12 +1,6 @@ package me.chanjar.weixin.mp.api.impl; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; @@ -18,33 +12,29 @@ import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.mp.api.WxMpMaterialService; import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.material.WxMediaImgUploadResult; -import me.chanjar.weixin.mp.bean.material.WxMpMaterial; -import me.chanjar.weixin.mp.bean.material.WxMpMaterialArticleUpdate; -import me.chanjar.weixin.mp.bean.material.WxMpMaterialCountResult; -import me.chanjar.weixin.mp.bean.material.WxMpMaterialFileBatchGetResult; -import me.chanjar.weixin.mp.bean.material.WxMpMaterialNews; -import me.chanjar.weixin.mp.bean.material.WxMpMaterialNewsBatchGetResult; -import me.chanjar.weixin.mp.bean.material.WxMpMaterialUploadResult; -import me.chanjar.weixin.mp.bean.material.WxMpMaterialVideoInfoResult; +import me.chanjar.weixin.mp.bean.material.*; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; -import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialDeleteRequestExecutor; -import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialNewsInfoRequestExecutor; -import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialUploadRequestExecutor; -import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialVideoInfoRequestExecutor; -import me.chanjar.weixin.mp.util.requestexecuter.material.MaterialVoiceAndImageDownloadRequestExecutor; +import me.chanjar.weixin.mp.util.requestexecuter.material.*; import me.chanjar.weixin.mp.util.requestexecuter.media.MediaImgUploadRequestExecutor; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Material.*; + /** * Created by Binary Wang on 2016/7/21. + * + * @author Binary Wang */ +@RequiredArgsConstructor public class WxMpMaterialServiceImpl implements WxMpMaterialService { - - private WxMpService wxMpService; - - public WxMpMaterialServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public WxMediaUploadResult mediaUpload(String mediaType, String fileType, InputStream inputStream) throws WxErrorException { @@ -63,7 +53,7 @@ public class WxMpMaterialServiceImpl implements WxMpMaterialService { @Override public WxMediaUploadResult mediaUpload(String mediaType, File file) throws WxErrorException { - String url = String.format(MEDIA_UPLOAD_URL, mediaType); + String url = String.format(MEDIA_UPLOAD_URL.getUrl(), mediaType); return this.wxMpService.execute(MediaUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), url, file); } @@ -82,7 +72,7 @@ public class WxMpMaterialServiceImpl implements WxMpMaterialService { @Override public WxMpMaterialUploadResult materialFileUpload(String mediaType, WxMpMaterial material) throws WxErrorException { - String url = String.format(MATERIAL_ADD_URL, mediaType); + String url = String.format(MATERIAL_ADD_URL.getUrl(), mediaType); return this.wxMpService.execute(MaterialUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), url, material); } @@ -98,17 +88,20 @@ public class WxMpMaterialServiceImpl implements WxMpMaterialService { @Override public InputStream materialImageOrVoiceDownload(String mediaId) throws WxErrorException { return this.wxMpService.execute(MaterialVoiceAndImageDownloadRequestExecutor - .create(this.wxMpService.getRequestHttp(), this.wxMpService.getWxMpConfigStorage().getTmpDirFile()), MATERIAL_GET_URL, mediaId); + .create(this.wxMpService.getRequestHttp(), this.wxMpService.getWxMpConfigStorage().getTmpDirFile()), + MATERIAL_GET_URL, mediaId); } @Override public WxMpMaterialVideoInfoResult materialVideoInfo(String mediaId) throws WxErrorException { - return this.wxMpService.execute(MaterialVideoInfoRequestExecutor.create(this.wxMpService.getRequestHttp()), MATERIAL_GET_URL, mediaId); + return this.wxMpService.execute(MaterialVideoInfoRequestExecutor.create(this.wxMpService.getRequestHttp()), + MATERIAL_GET_URL, mediaId); } @Override public WxMpMaterialNews materialNewsInfo(String mediaId) throws WxErrorException { - return this.wxMpService.execute(MaterialNewsInfoRequestExecutor.create(this.wxMpService.getRequestHttp()), MATERIAL_GET_URL, mediaId); + return this.wxMpService.execute(MaterialNewsInfoRequestExecutor.create(this.wxMpService.getRequestHttp()), + MATERIAL_GET_URL, mediaId); } @Override @@ -124,7 +117,8 @@ public class WxMpMaterialServiceImpl implements WxMpMaterialService { @Override public boolean materialDelete(String mediaId) throws WxErrorException { - return this.wxMpService.execute(MaterialDeleteRequestExecutor.create(this.wxMpService.getRequestHttp()), MATERIAL_DEL_URL, mediaId); + return this.wxMpService.execute(MaterialDeleteRequestExecutor.create(this.wxMpService.getRequestHttp()), + MATERIAL_DEL_URL, mediaId); } @Override @@ -140,7 +134,7 @@ public class WxMpMaterialServiceImpl implements WxMpMaterialService { @Override public WxMpMaterialNewsBatchGetResult materialNewsBatchGet(int offset, int count) throws WxErrorException { - Map- * - * @param wxMpShakeQuery 查询参数 - */ @Override public WxMpShakeInfoResult getShakeInfo(WxMpShakeQuery wxMpShakeQuery) throws WxErrorException { - String url = "https://api.weixin.qq.com/shakearound/user/getshakeinfo"; String postData = wxMpShakeQuery.toJsonString(); - String responseContent = this.wxMpService.post(url, postData); + String responseContent = this.wxMpService.post(SHAKEAROUND_USER_GETSHAKEINFO, postData); return WxMpShakeInfoResult.fromJson(responseContent); } @Override - public WxMpShakeAroundPageAddResult pageAdd(WxMpShakeAroundPageAddQuery shakeAroundPageAddQuery) throws WxErrorException { - String url = "https://api.weixin.qq.com/shakearound/page/add"; + public WxMpShakeAroundPageAddResult pageAdd(WxMpShakeAroundPageAddQuery shakeAroundPageAddQuery) + throws WxErrorException { String postData = shakeAroundPageAddQuery.toJsonString(); - String responseContent = this.wxMpService.post(url, postData); + String responseContent = this.wxMpService.post(SHAKEAROUND_PAGE_ADD, postData); return WxMpShakeAroundPageAddResult.fromJson(responseContent); } @Override - public WxError deviceBindPageQuery(WxMpShakeAroundDeviceBindPageQuery shakeAroundDeviceBindPageQuery) throws WxErrorException { - String url = "https://api.weixin.qq.com/shakearound/device/bindpage"; + public WxError deviceBindPageQuery(WxMpShakeAroundDeviceBindPageQuery shakeAroundDeviceBindPageQuery) + throws WxErrorException { String postData = shakeAroundDeviceBindPageQuery.toJsonString(); - String responseContent = this.wxMpService.post(url, postData); + String responseContent = this.wxMpService.post(SHAKEAROUND_DEVICE_BINDPAGE, postData); return WxError.fromJson(responseContent, WxType.MP); } @Override - public WxMpShakeAroundRelationSearchResult relationSearch(WxMpShakeAroundRelationSearchQuery shakeAroundRelationSearchQuery) throws WxErrorException { - String url = "https://api.weixin.qq.com/shakearound/relation/search"; - String postData = shakeAroundRelationSearchQuery.toJsonString(); - String responseContent = this.wxMpService.post(url, postData); + public WxMpShakeAroundRelationSearchResult relationSearch(WxMpShakeAroundRelationSearchQuery searchQuery) + throws WxErrorException { + String postData = searchQuery.toJsonString(); + String responseContent = this.wxMpService.post(SHAKEAROUND_RELATION_SEARCH, postData); return WxMpShakeAroundRelationSearchResult.fromJson(responseContent); } } 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 index 402102064..913816595 100644 --- 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 @@ -3,6 +3,7 @@ package me.chanjar.weixin.mp.api.impl; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; @@ -12,6 +13,7 @@ import me.chanjar.weixin.mp.api.WxMpStoreService; import me.chanjar.weixin.mp.bean.store.WxMpStoreBaseInfo; import me.chanjar.weixin.mp.bean.store.WxMpStoreInfo; import me.chanjar.weixin.mp.bean.store.WxMpStoreListResult; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; import java.util.List; @@ -21,18 +23,15 @@ import java.util.List; * * @author binarywang (https://github.com/binarywang) */ +@RequiredArgsConstructor public class WxMpStoreServiceImpl implements WxMpStoreService { - private WxMpService wxMpService; - - public WxMpStoreServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public void add(WxMpStoreBaseInfo request) throws WxErrorException { BeanUtils.checkRequiredFields(request); - String response = this.wxMpService.post(POI_ADD_URL, request.toJson()); + String response = this.wxMpService.post(WxMpApiUrl.Store.POI_ADD_URL, request.toJson()); WxError wxError = WxError.fromJson(response, WxType.MP); if (wxError.getErrorCode() != 0) { throw new WxErrorException(wxError); @@ -43,7 +42,7 @@ public class WxMpStoreServiceImpl implements WxMpStoreService { public WxMpStoreBaseInfo get(String poiId) throws WxErrorException { JsonObject paramObject = new JsonObject(); paramObject.addProperty("poi_id", poiId); - String response = this.wxMpService.post(POI_GET_URL, paramObject.toString()); + String response = this.wxMpService.post(WxMpApiUrl.Store.POI_GET_URL, paramObject.toString()); WxError wxError = WxError.fromJson(response, WxType.MP); if (wxError.getErrorCode() != 0) { throw new WxErrorException(wxError); @@ -56,7 +55,7 @@ public class WxMpStoreServiceImpl implements WxMpStoreService { public void delete(String poiId) throws WxErrorException { JsonObject paramObject = new JsonObject(); paramObject.addProperty("poi_id", poiId); - String response = this.wxMpService.post(POI_DEL_URL, paramObject.toString()); + String response = this.wxMpService.post(WxMpApiUrl.Store.POI_DEL_URL, paramObject.toString()); WxError wxError = WxError.fromJson(response, WxType.MP); if (wxError.getErrorCode() != 0) { throw new WxErrorException(wxError); @@ -69,7 +68,7 @@ public class WxMpStoreServiceImpl implements WxMpStoreService { JsonObject params = new JsonObject(); params.addProperty("begin", begin); params.addProperty("limit", limit); - String response = this.wxMpService.post(POI_LIST_URL, params.toString()); + String response = this.wxMpService.post(WxMpApiUrl.Store.POI_LIST_URL, params.toString()); WxError wxError = WxError.fromJson(response, WxType.MP); if (wxError.getErrorCode() != 0) { @@ -102,7 +101,7 @@ public class WxMpStoreServiceImpl implements WxMpStoreService { @Override public void update(WxMpStoreBaseInfo request) throws WxErrorException { - String response = this.wxMpService.post(POI_UPDATE_URL, request.toJson()); + String response = this.wxMpService.post(WxMpApiUrl.Store.POI_UPDATE_URL, request.toJson()); WxError wxError = WxError.fromJson(response, WxType.MP); if (wxError.getErrorCode() != 0) { throw new WxErrorException(wxError); @@ -111,7 +110,7 @@ public class WxMpStoreServiceImpl implements WxMpStoreService { @Override public Listparams = new HashMap<>(); + Map params = new HashMap<>(4); params.put("type", WxConsts.MaterialType.NEWS); params.put("offset", offset); params.put("count", count); @@ -155,7 +149,7 @@ public class WxMpMaterialServiceImpl implements WxMpMaterialService { @Override public WxMpMaterialFileBatchGetResult materialFileBatchGet(String type, int offset, int count) throws WxErrorException { - Map params = new HashMap<>(); + Map params = new HashMap<>(4); params.put("type", type); params.put("offset", offset); params.put("count", count); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImpl.java index 3eaf61417..31d9bcf37 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImpl.java @@ -5,7 +5,9 @@ import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.mp.bean.membercard.*; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import org.apache.commons.lang3.StringUtils; import com.google.gson.Gson; @@ -40,15 +42,12 @@ import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; * @version 2017/7/8 */ @Slf4j +@RequiredArgsConstructor public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { - private WxMpService wxMpService; + private final WxMpService wxMpService; private static final Gson GSON = WxMpGsonBuilder.create(); - public WxMpMemberCardServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } - @Override public WxMpService getWxMpService() { return this.wxMpService; @@ -70,7 +69,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { return validResult; } - String response = this.wxMpService.post(MEMBER_CARD_CREATE, GSON.toJson(createMessageMessage)); + String response = this.wxMpService.post(WxMpApiUrl.MemberCard.MEMBER_CARD_CREATE, GSON.toJson(createMessageMessage)); return WxMpCardCreateResult.fromJson(response); } @@ -212,7 +211,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { @Override public String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException { - return this.wxMpService.post(MEMBER_CARD_ACTIVATE, GSON.toJson(activatedMessage)); + return this.wxMpService.post(WxMpApiUrl.MemberCard.MEMBER_CARD_ACTIVATE, GSON.toJson(activatedMessage)); } @Override @@ -221,7 +220,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { jsonObject.addProperty("card_id", cardId); jsonObject.addProperty("code", code); - String responseContent = this.getWxMpService().post(MEMBER_CARD_USER_INFO_GET, jsonObject.toString()); + String responseContent = this.getWxMpService().post(WxMpApiUrl.MemberCard.MEMBER_CARD_USER_INFO_GET, jsonObject.toString()); log.debug("{}", responseContent); JsonElement tmpJsonElement = new JsonParser().parse(responseContent); return WxMpGsonBuilder.create().fromJson(tmpJsonElement, @@ -233,7 +232,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { public WxMpMemberCardUpdateResult updateUserMemberCard(WxMpMemberCardUpdateMessage updateUserMessage) throws WxErrorException { - String responseContent = this.getWxMpService().post(MEMBER_CARD_UPDATE_USER, GSON.toJson(updateUserMessage)); + String responseContent = this.getWxMpService().post(WxMpApiUrl.MemberCard.MEMBER_CARD_UPDATE_USER, GSON.toJson(updateUserMessage)); JsonElement tmpJsonElement = new JsonParser().parse(responseContent); return WxMpGsonBuilder.create().fromJson(tmpJsonElement, @@ -243,7 +242,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { @Override public MemberCardActivateUserFormResult setActivateUserForm(MemberCardActivateUserFormRequest userFormRequest) throws WxErrorException { - String responseContent = this.getWxMpService().post(MEMBER_CARD_ACTIVATE_USER_FORM, GSON.toJson(userFormRequest)); + String responseContent = this.getWxMpService().post(WxMpApiUrl.MemberCard.MEMBER_CARD_ACTIVATE_USER_FORM, GSON.toJson(userFormRequest)); return MemberCardActivateUserFormResult.fromJson(responseContent); } @@ -252,7 +251,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { JsonObject params = new JsonObject(); params.addProperty("card_id", cardId); params.addProperty("outer_str", outStr); - String response = this.wxMpService.post(MEMBER_CARD_ACTIVATE_URL, GSON.toJson(params)); + String response = this.wxMpService.post(WxMpApiUrl.MemberCard.MEMBER_CARD_ACTIVATE_URL, GSON.toJson(params)); ActivatePluginParamResult result = GSON.fromJson(response, ActivatePluginParamResult.class); if (0 == result.getErrcode()) { String url = result.getUrl(); @@ -273,18 +272,16 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { @Override public CardUpdateResult updateCardInfo(MemberCardUpdateRequest memberCardUpdateRequest) throws WxErrorException { - String response = this.wxMpService.post(MEMBER_CARD_UPDATE, GSON.toJson(memberCardUpdateRequest)); - CardUpdateResult result = GSON.fromJson(response, CardUpdateResult.class); - return result; + String response = this.wxMpService.post(WxMpApiUrl.MemberCard.MEMBER_CARD_UPDATE, GSON.toJson(memberCardUpdateRequest)); + return GSON.fromJson(response, CardUpdateResult.class); } @Override public WxMpMemberCardActivateTempInfoResult getActivateTempInfo(String activateTicket) throws WxErrorException { JsonObject params = new JsonObject(); params.addProperty("activate_ticket", activateTicket); - String response = this.wxMpService.post(MEMBER_CARD_ACTIVATE_TEMP_INFO, GSON.toJson(params)); - WxMpMemberCardActivateTempInfoResult result = GSON.fromJson(response, WxMpMemberCardActivateTempInfoResult.class); - return result; + String response = this.wxMpService.post(WxMpApiUrl.MemberCard.MEMBER_CARD_ACTIVATE_TEMP_INFO, GSON.toJson(params)); + return GSON.fromJson(response, WxMpMemberCardActivateTempInfoResult.class); } private static String truncateUrlPage(String strURL) { @@ -302,7 +299,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { return strAllParam; } - public static Map parseRequestUrl(String url) { + private static Map parseRequestUrl(String url) { Map mapRequest = new HashMap<>(16); String[] arrSplit; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java index e8dc84766..2a42a0a59 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMenuServiceImpl.java @@ -2,34 +2,34 @@ package me.chanjar.weixin.mp.api.impl; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.bean.menu.WxMenu; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpMenuService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.menu.WxMpGetSelfMenuInfoResult; import me.chanjar.weixin.mp.bean.menu.WxMpMenu; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Menu.*; /** * Created by Binary Wang on 2016/7/21. + * + * @author Binary Wang */ +@Slf4j +@RequiredArgsConstructor public class WxMpMenuServiceImpl implements WxMpMenuService { - private static final String API_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin/menu"; - private static Logger log = LoggerFactory.getLogger(WxMpMenuServiceImpl.class); - - private WxMpService wxMpService; - - public WxMpMenuServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public String menuCreate(WxMenu menu) throws WxErrorException { String menuJson = menu.toJson(); - String url = API_URL_PREFIX + "/create"; + WxMpApiUrl.Menu url = MENU_CREATE; if (menu.getMatchRule() != null) { - url = API_URL_PREFIX + "/addconditional"; + url = MENU_ADDCONDITIONAL; } log.debug("开始创建菜单:{}", menuJson); @@ -48,9 +48,9 @@ public class WxMpMenuServiceImpl implements WxMpMenuService { public String menuCreate(String json) throws WxErrorException { JsonParser jsonParser = new JsonParser(); JsonObject jsonObject = jsonParser.parse(json).getAsJsonObject(); - String url = API_URL_PREFIX + "/create"; + WxMpApiUrl.Menu url = MENU_CREATE; if (jsonObject.get("matchrule") != null) { - url = API_URL_PREFIX + "/addconditional"; + url = MENU_ADDCONDITIONAL; } String result = this.wxMpService.post(url, json); @@ -63,25 +63,22 @@ public class WxMpMenuServiceImpl implements WxMpMenuService { @Override public void menuDelete() throws WxErrorException { - String url = API_URL_PREFIX + "/delete"; - String result = this.wxMpService.get(url, null); + String result = this.wxMpService.get(MENU_DELETE, null); log.debug("删除菜单结果:{}", result); } @Override public void menuDelete(String menuId) throws WxErrorException { - String url = API_URL_PREFIX + "/delconditional"; JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("menuid", menuId); - String result = this.wxMpService.post(url, jsonObject.toString()); + String result = this.wxMpService.post(MENU_DELCONDITIONAL, jsonObject.toString()); log.debug("根据MeunId({})删除个性化菜单结果:{}", menuId, result); } @Override public WxMpMenu menuGet() throws WxErrorException { - String url = API_URL_PREFIX + "/get"; try { - String resultContent = this.wxMpService.get(url, null); + String resultContent = this.wxMpService.get(MENU_GET, null); return WxMpMenu.fromJson(resultContent); } catch (WxErrorException e) { // 46003 不存在的菜单数据 @@ -94,11 +91,10 @@ public class WxMpMenuServiceImpl implements WxMpMenuService { @Override public WxMenu menuTryMatch(String userid) throws WxErrorException { - String url = API_URL_PREFIX + "/trymatch"; JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("user_id", userid); try { - String resultContent = this.wxMpService.post(url, jsonObject.toString()); + String resultContent = this.wxMpService.post(MENU_TRYMATCH, jsonObject.toString()); return WxMenu.fromJson(resultContent); } catch (WxErrorException e) { // 46003 不存在的菜单数据;46002 不存在的菜单版本 @@ -112,8 +108,7 @@ public class WxMpMenuServiceImpl implements WxMpMenuService { @Override public WxMpGetSelfMenuInfoResult getSelfMenuInfo() throws WxErrorException { - String url = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info"; - String resultContent = this.wxMpService.get(url, null); + String resultContent = this.wxMpService.get(GET_CURRENT_SELFMENU_INFO, null); return WxMpGetSelfMenuInfoResult.fromJson(resultContent); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpQrcodeServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpQrcodeServiceImpl.java index 5783ce799..da4171fbb 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpQrcodeServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpQrcodeServiceImpl.java @@ -1,6 +1,7 @@ package me.chanjar.weixin.mp.api.impl; import com.google.gson.JsonObject; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpQrcodeService; @@ -14,16 +15,16 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Qrcode.*; + /** * Created by Binary Wang on 2016/7/21. + * + * @author Binary Wang */ +@RequiredArgsConstructor public class WxMpQrcodeServiceImpl implements WxMpQrcodeService { - private static final String API_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin/qrcode"; - private WxMpService wxMpService; - - public WxMpQrcodeServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public WxMpQrCodeTicket qrCodeCreateTmpTicket(int sceneId, Integer expireSeconds) throws WxErrorException { @@ -31,37 +32,20 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService { throw new WxErrorException(WxError.builder().errorCode(-1).errorMsg("临时二维码场景值不能为0!").build()); } - //expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 - if (expireSeconds != null && expireSeconds > 2592000) { - throw new WxErrorException(WxError.builder().errorCode(-1) - .errorMsg("临时二维码有效时间最大不能超过2592000(即30天)!").build()); - } - - if (expireSeconds == null) { - expireSeconds = 30; - } - - String url = API_URL_PREFIX + "/create"; - JsonObject json = new JsonObject(); - json.addProperty("action_name", "QR_SCENE"); - json.addProperty("expire_seconds", expireSeconds); - - JsonObject actionInfo = new JsonObject(); - JsonObject scene = new JsonObject(); - scene.addProperty("scene_id", sceneId); - actionInfo.add("scene", scene); - json.add("action_info", actionInfo); - String responseContent = this.wxMpService.post(url, json.toString()); - return WxMpQrCodeTicket.fromJson(responseContent); + return this.createQrCode("QR_SCENE", null, sceneId, expireSeconds); } - @Override public WxMpQrCodeTicket qrCodeCreateTmpTicket(String sceneStr, Integer expireSeconds) throws WxErrorException { if (StringUtils.isBlank(sceneStr)) { throw new WxErrorException(WxError.builder().errorCode(-1).errorMsg("临时二维码场景值不能为空!").build()); } + return this.createQrCode("QR_STR_SCENE", sceneStr, null, expireSeconds); + } + + private WxMpQrCodeTicket createQrCode(String actionName, String sceneStr, Integer sceneId, Integer expireSeconds) + throws WxErrorException { //expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 if (expireSeconds != null && expireSeconds > 2592000) { throw new WxErrorException(WxError.builder().errorCode(-1) @@ -72,21 +56,31 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService { expireSeconds = 30; } - String url = API_URL_PREFIX + "/create"; + return this.getQrCodeTicket(actionName, sceneStr, sceneId, expireSeconds); + } + + private WxMpQrCodeTicket getQrCodeTicket(String actionName, String sceneStr, Integer sceneId, Integer expireSeconds) + throws WxErrorException { JsonObject json = new JsonObject(); - json.addProperty("action_name", "QR_STR_SCENE"); - json.addProperty("expire_seconds", expireSeconds); + json.addProperty("action_name", actionName); + if (expireSeconds != null) { + json.addProperty("expire_seconds", expireSeconds); + } JsonObject actionInfo = new JsonObject(); JsonObject scene = new JsonObject(); - scene.addProperty("scene_str", sceneStr); + if (sceneStr != null) { + scene.addProperty("scene_str", sceneStr); + } else if (sceneId != null) { + scene.addProperty("scene_id", sceneId); + } + actionInfo.add("scene", scene); json.add("action_info", actionInfo); - String responseContent = this.wxMpService.post(url, json.toString()); + String responseContent = this.wxMpService.post(QRCODE_CREATE, json.toString()); return WxMpQrCodeTicket.fromJson(responseContent); } - @Override public WxMpQrCodeTicket qrCodeCreateLastTicket(int sceneId) throws WxErrorException { if (sceneId < 1 || sceneId > 100000) { @@ -95,44 +89,23 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService { .build()); } - String url = API_URL_PREFIX + "/create"; - JsonObject json = new JsonObject(); - json.addProperty("action_name", "QR_LIMIT_SCENE"); - JsonObject actionInfo = new JsonObject(); - JsonObject scene = new JsonObject(); - scene.addProperty("scene_id", sceneId); - actionInfo.add("scene", scene); - json.add("action_info", actionInfo); - String responseContent = this.wxMpService.post(url, json.toString()); - return WxMpQrCodeTicket.fromJson(responseContent); + return this.getQrCodeTicket("QR_LIMIT_SCENE", null, sceneId, null); } @Override public WxMpQrCodeTicket qrCodeCreateLastTicket(String sceneStr) throws WxErrorException { - String url = API_URL_PREFIX + "/create"; - JsonObject json = new JsonObject(); - json.addProperty("action_name", "QR_LIMIT_STR_SCENE"); - JsonObject actionInfo = new JsonObject(); - JsonObject scene = new JsonObject(); - scene.addProperty("scene_str", sceneStr); - actionInfo.add("scene", scene); - json.add("action_info", actionInfo); - String responseContent = this.wxMpService.post(url, json.toString()); - return WxMpQrCodeTicket.fromJson(responseContent); + return this.getQrCodeTicket("QR_LIMIT_STR_SCENE", sceneStr, null, null); } @Override public File qrCodePicture(WxMpQrCodeTicket ticket) throws WxErrorException { - String url = "https://mp.weixin.qq.com/cgi-bin/showqrcode"; - return this.wxMpService.execute(QrCodeRequestExecutor.create(this.wxMpService.getRequestHttp()), url, ticket); + return this.wxMpService.execute(QrCodeRequestExecutor.create(this.wxMpService.getRequestHttp()), SHOW_QRCODE, ticket); } @Override public String qrCodePictureUrl(String ticket, boolean needShortUrl) throws WxErrorException { - String url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=%s"; try { - String resultUrl = String.format(url, - URLEncoder.encode(ticket, StandardCharsets.UTF_8.name())); + String resultUrl = String.format(SHOW_QRCODE_WITH_TICKET.getUrl(), URLEncoder.encode(ticket, StandardCharsets.UTF_8.name())); if (needShortUrl) { return this.wxMpService.shortUrl(resultUrl); } @@ -145,7 +118,7 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService { @Override public String qrCodePictureUrl(String ticket) throws WxErrorException { - return qrCodePictureUrl(ticket, false); + return this.qrCodePictureUrl(ticket, false); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceHttpClientImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceHttpClientImpl.java index 10e2a5b78..0c00793a0 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceHttpClientImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceHttpClientImpl.java @@ -8,7 +8,7 @@ import me.chanjar.weixin.common.util.http.HttpType; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder; import me.chanjar.weixin.mp.api.WxMpConfigStorage; -import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -19,8 +19,12 @@ import org.apache.http.impl.client.CloseableHttpClient; import java.io.IOException; import java.util.concurrent.locks.Lock; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Other.*; + /** * apache http client方式实现. + * + * @author someone */ public class WxMpServiceHttpClientImpl extends BaseWxMpServiceImpl { private CloseableHttpClient httpClient; @@ -70,7 +74,7 @@ public class WxMpServiceHttpClientImpl extends BaseWxMpServiceImpl { private HttpConnectionProvider httpClient; @@ -55,7 +58,7 @@ public class WxMpServiceJoddHttpImpl extends BaseWxMpServiceImpl { private OkHttpClient httpClient; @@ -44,7 +48,7 @@ public class WxMpServiceOkHttpImpl extends BaseWxMpServiceImpl - * 获取设备及用户信息
- * 获取设备信息,包括UUID、major、minor,以及距离、openID等信息。 - * 详情请见: https://mp.weixin.qq.com/wiki?action=doc&id=mp1443447963 - * http请求方式: POST(请使用https协议) - * 接口地址:https://api.weixin.qq.com/shakearound/user/getshakeinfo?access_token=ACCESS_TOKE - *listCategories() throws WxErrorException { - String response = this.wxMpService.get(POI_GET_WX_CATEGORY_URL, null); + String response = this.wxMpService.get(WxMpApiUrl.Store.POI_GET_WX_CATEGORY_URL, null); WxError wxError = WxError.fromJson(response, WxType.MP); if (wxError.getErrorCode() != 0) { throw new WxErrorException(wxError); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpSubscribeMsgServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpSubscribeMsgServiceImpl.java index fe1cfb306..d68342869 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpSubscribeMsgServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpSubscribeMsgServiceImpl.java @@ -1,32 +1,30 @@ package me.chanjar.weixin.mp.api.impl; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.URIUtil; import me.chanjar.weixin.mp.api.WxMpConfigStorage; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpSubscribeMsgService; import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.SubscribeMsg.*; /** + * 一次性订阅消息接口. + * * @author Mklaus * @date 2018-01-22 上午11:19 */ +@RequiredArgsConstructor public class WxMpSubscribeMsgServiceImpl implements WxMpSubscribeMsgService { - private static final String SUBSCRIBE_MESSAGE_AUTHORIZE_URL = - "https://mp.weixin.qq.com/mp/subscribemsg?action=get_confirm&appid=%s&scene=%d&template_id=%s&redirect_url=%s&reserved=%s#wechat_redirect"; - private static final String SEND_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/subscribe"; - - - private WxMpService wxMpService; - - public WxMpSubscribeMsgServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public String subscribeMsgAuthorizationUrl(String redirectURI, int scene, String reserved) { WxMpConfigStorage storage = this.wxMpService.getWxMpConfigStorage(); - return String.format(SUBSCRIBE_MESSAGE_AUTHORIZE_URL, + return String.format(SUBSCRIBE_MESSAGE_AUTHORIZE_URL.getUrl(), storage.getAppId(), scene, storage.getTemplateId(), URIUtil.encodeURIComponent(redirectURI), reserved); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java index 472cd0fe8..4cab8d71e 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpTemplateMsgServiceImpl.java @@ -2,6 +2,7 @@ package me.chanjar.weixin.mp.api.impl; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; @@ -10,9 +11,12 @@ import me.chanjar.weixin.mp.api.WxMpTemplateMsgService; import me.chanjar.weixin.mp.bean.template.WxMpTemplate; import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry; import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import java.util.List; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.TemplateMsg.*; + /** * * Created by Binary Wang on 2016-10-14. @@ -20,20 +24,15 @@ import java.util.List; * * @author Binary Wang */ +@RequiredArgsConstructor public class WxMpTemplateMsgServiceImpl implements WxMpTemplateMsgService { - public static final String API_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin/template"; private static final JsonParser JSON_PARSER = new JsonParser(); - private WxMpService wxMpService; - - public WxMpTemplateMsgServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public String sendTemplateMsg(WxMpTemplateMessage templateMessage) throws WxErrorException { - String url = "https://api.weixin.qq.com/cgi-bin/message/template/send"; - String responseContent = this.wxMpService.post(url, templateMessage.toJson()); + String responseContent = this.wxMpService.post(MESSAGE_TEMPLATE_SEND, templateMessage.toJson()); final JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); if (jsonObject.get("errcode").getAsInt() == 0) { return jsonObject.get("msgid").getAsString(); @@ -48,24 +47,21 @@ public class WxMpTemplateMsgServiceImpl implements WxMpTemplateMsgService { throw new IllegalArgumentException("行业Id不能为空,请核实"); } - String url = API_URL_PREFIX + "/api_set_industry"; - this.wxMpService.post(url, wxMpIndustry.toJson()); + this.wxMpService.post(TEMPLATE_API_SET_INDUSTRY, wxMpIndustry.toJson()); return true; } @Override public WxMpTemplateIndustry getIndustry() throws WxErrorException { - String url = API_URL_PREFIX + "/get_industry"; - String responseContent = this.wxMpService.get(url, null); + String responseContent = this.wxMpService.get(TEMPLATE_GET_INDUSTRY, null); return WxMpTemplateIndustry.fromJson(responseContent); } @Override public String addTemplate(String shortTemplateId) throws WxErrorException { - String url = API_URL_PREFIX + "/api_add_template"; JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("template_id_short", shortTemplateId); - String responseContent = this.wxMpService.post(url, jsonObject.toString()); + String responseContent = this.wxMpService.post(TEMPLATE_API_ADD_TEMPLATE, jsonObject.toString()); final JsonObject result = JSON_PARSER.parse(responseContent).getAsJsonObject(); if (result.get("errcode").getAsInt() == 0) { return result.get("template_id").getAsString(); @@ -76,16 +72,14 @@ public class WxMpTemplateMsgServiceImpl implements WxMpTemplateMsgService { @Override public ListgetAllPrivateTemplate() throws WxErrorException { - String url = API_URL_PREFIX + "/get_all_private_template"; - return WxMpTemplate.fromJson(this.wxMpService.get(url, null)); + return WxMpTemplate.fromJson(this.wxMpService.get(TEMPLATE_GET_ALL_PRIVATE_TEMPLATE, null)); } @Override public boolean delPrivateTemplate(String templateId) throws WxErrorException { - String url = API_URL_PREFIX + "/del_private_template"; JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("template_id", templateId); - String responseContent = this.wxMpService.post(url, jsonObject.toString()); + String responseContent = this.wxMpService.post(TEMPLATE_DEL_PRIVATE_TEMPLATE, jsonObject.toString()); WxError error = WxError.fromJson(responseContent, WxType.MP); if (error.getErrorCode() == 0) { return true; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlacklistServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlacklistServiceImpl.java index a6ba958eb..cd7ac541a 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlacklistServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserBlacklistServiceImpl.java @@ -1,43 +1,42 @@ package me.chanjar.weixin.mp.api.impl; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import com.google.gson.JsonObject; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpUserBlacklistService; import me.chanjar.weixin.mp.bean.result.WxMpUserBlacklistGetResult; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.UserBlacklist.*; + /** * @author miller */ +@RequiredArgsConstructor public class WxMpUserBlacklistServiceImpl implements WxMpUserBlacklistService { - private static final String API_BLACKLIST_PREFIX = "https://api.weixin.qq.com/cgi-bin/tags/members"; - private WxMpService wxMpService; - - public WxMpUserBlacklistServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public WxMpUserBlacklistGetResult getBlacklist(String nextOpenid) throws WxErrorException { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("begin_openid", nextOpenid); - String url = API_BLACKLIST_PREFIX + "/getblacklist"; - String responseContent = this.wxMpService.execute(SimplePostRequestExecutor.create(this.wxMpService.getRequestHttp()), url, jsonObject.toString()); + String responseContent = this.wxMpService.execute(SimplePostRequestExecutor.create(this.wxMpService.getRequestHttp()), + GETBLACKLIST, jsonObject.toString()); return WxMpUserBlacklistGetResult.fromJson(responseContent); } @Override public void pushToBlacklist(List openidList) throws WxErrorException { - Map map = new HashMap<>(); + Map map = new HashMap<>(2); map.put("openid_list", openidList); - String url = API_BLACKLIST_PREFIX + "/batchblacklist"; - this.wxMpService.execute(SimplePostRequestExecutor.create(this.wxMpService.getRequestHttp()), url, + this.wxMpService.execute(SimplePostRequestExecutor.create(this.wxMpService.getRequestHttp()), BATCHBLACKLIST, WxMpGsonBuilder.create().toJson(map)); } @@ -45,7 +44,7 @@ public class WxMpUserBlacklistServiceImpl implements WxMpUserBlacklistService { public void pullFromBlacklist(List openidList) throws WxErrorException { Map map = new HashMap<>(2); map.put("openid_list", openidList); - String url = API_BLACKLIST_PREFIX + "/batchunblacklist"; - this.wxMpService.execute(SimplePostRequestExecutor.create(this.wxMpService.getRequestHttp()), url, WxMpGsonBuilder.create().toJson(map)); + this.wxMpService.execute(SimplePostRequestExecutor.create(this.wxMpService.getRequestHttp()), BATCHUNBLACKLIST, + WxMpGsonBuilder.create().toJson(map)); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java index d8c8943d3..0c77a93ff 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java @@ -1,11 +1,7 @@ package me.chanjar.weixin.mp.api.impl; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpUserService; @@ -13,19 +9,23 @@ import me.chanjar.weixin.mp.bean.WxMpUserQuery; import me.chanjar.weixin.mp.bean.result.WxMpChangeOpenid; import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.bean.result.WxMpUserList; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.User.*; + /** * Created by Binary Wang on 2016/7/21. * * @author BinaryWang */ +@RequiredArgsConstructor public class WxMpUserServiceImpl implements WxMpUserService { - private WxMpService wxMpService; - - public WxMpUserServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public void userUpdateRemark(String openid, String remark) throws WxErrorException { @@ -43,21 +43,19 @@ public class WxMpUserServiceImpl implements WxMpUserService { @Override public WxMpUser userInfo(String openid, String lang) throws WxErrorException { lang = lang == null ? "zh_CN" : lang; - String responseContent = this.wxMpService.get(USER_INFO_URL, - "openid=" + openid + "&lang=" + lang); + String responseContent = this.wxMpService.get(USER_INFO_URL, "openid=" + openid + "&lang=" + lang); return WxMpUser.fromJson(responseContent); } @Override public WxMpUserList userList(String nextOpenid) throws WxErrorException { - String responseContent = this.wxMpService.get(USER_GET_URL, - nextOpenid == null ? null : "next_openid=" + nextOpenid); + String responseContent = this.wxMpService.get(USER_GET_URL, nextOpenid == null ? null : "next_openid=" + nextOpenid); return WxMpUserList.fromJson(responseContent); } @Override public List changeOpenid(String fromAppid, List openidList) throws WxErrorException { - Map map = new HashMap<>(); + Map map = new HashMap<>(2); map.put("from_appid", fromAppid); map.put("openid_list", openidList); String responseContent = this.wxMpService.post(USER_CHANGE_OPENID_URL, WxMpGsonBuilder.create().toJson(map)); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserTagServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserTagServiceImpl.java index 6a37741b8..bf4696e49 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserTagServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserTagServiceImpl.java @@ -4,6 +4,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; +import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; @@ -16,51 +17,43 @@ import org.apache.commons.lang3.StringUtils; import java.util.List; +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.UserTag.*; + /** * Created by Binary Wang on 2016/9/2. * * @author Binary Wang */ +@RequiredArgsConstructor public class WxMpUserTagServiceImpl implements WxMpUserTagService { - private static final String API_URL_PREFIX = "https://api.weixin.qq.com/cgi-bin/tags"; - - private WxMpService wxMpService; - - public WxMpUserTagServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public WxUserTag tagCreate(String name) throws WxErrorException { - String url = API_URL_PREFIX + "/create"; JsonObject json = new JsonObject(); JsonObject tagJson = new JsonObject(); tagJson.addProperty("name", name); json.add("tag", tagJson); - String responseContent = this.wxMpService.post(url, json.toString()); + String responseContent = this.wxMpService.post(TAGS_CREATE, json.toString()); return WxUserTag.fromJson(responseContent); } @Override public List tagGet() throws WxErrorException { - String url = API_URL_PREFIX + "/get"; - - String responseContent = this.wxMpService.get(url, null); + String responseContent = this.wxMpService.get(TAGS_GET, null); return WxUserTag.listFromJson(responseContent); } @Override public Boolean tagUpdate(Long id, String name) throws WxErrorException { - String url = API_URL_PREFIX + "/update"; - JsonObject json = new JsonObject(); JsonObject tagJson = new JsonObject(); tagJson.addProperty("id", id); tagJson.addProperty("name", name); json.add("tag", tagJson); - String responseContent = this.wxMpService.post(url, json.toString()); + String responseContent = this.wxMpService.post(TAGS_UPDATE, json.toString()); WxError wxError = WxError.fromJson(responseContent, WxType.MP); if (wxError.getErrorCode() == 0) { return true; @@ -71,14 +64,12 @@ public class WxMpUserTagServiceImpl implements WxMpUserTagService { @Override public Boolean tagDelete(Long id) throws WxErrorException { - String url = API_URL_PREFIX + "/delete"; - JsonObject json = new JsonObject(); JsonObject tagJson = new JsonObject(); tagJson.addProperty("id", id); json.add("tag", tagJson); - String responseContent = this.wxMpService.post(url, json.toString()); + String responseContent = this.wxMpService.post(TAGS_DELETE, json.toString()); WxError wxError = WxError.fromJson(responseContent, WxType.MP); if (wxError.getErrorCode() == 0) { return true; @@ -88,23 +79,17 @@ public class WxMpUserTagServiceImpl implements WxMpUserTagService { } @Override - public WxTagListUser tagListUser(Long tagId, String nextOpenid) - throws WxErrorException { - String url = "https://api.weixin.qq.com/cgi-bin/user/tag/get"; - + public WxTagListUser tagListUser(Long tagId, String nextOpenid) throws WxErrorException { JsonObject json = new JsonObject(); json.addProperty("tagid", tagId); json.addProperty("next_openid", StringUtils.trimToEmpty(nextOpenid)); - String responseContent = this.wxMpService.post(url, json.toString()); + String responseContent = this.wxMpService.post(TAG_GET, json.toString()); return WxTagListUser.fromJson(responseContent); } @Override - public boolean batchTagging(Long tagId, String[] openids) - throws WxErrorException { - String url = API_URL_PREFIX + "/members/batchtagging"; - + public boolean batchTagging(Long tagId, String[] openids) throws WxErrorException { JsonObject json = new JsonObject(); json.addProperty("tagid", tagId); JsonArray openidArrayJson = new JsonArray(); @@ -113,7 +98,7 @@ public class WxMpUserTagServiceImpl implements WxMpUserTagService { } json.add("openid_list", openidArrayJson); - String responseContent = this.wxMpService.post(url, json.toString()); + String responseContent = this.wxMpService.post(TAGS_MEMBERS_BATCHTAGGING, json.toString()); WxError wxError = WxError.fromJson(responseContent, WxType.MP); if (wxError.getErrorCode() == 0) { return true; @@ -123,10 +108,7 @@ public class WxMpUserTagServiceImpl implements WxMpUserTagService { } @Override - public boolean batchUntagging(Long tagId, String[] openids) - throws WxErrorException { - String url = API_URL_PREFIX + "/members/batchuntagging"; - + public boolean batchUntagging(Long tagId, String[] openids) throws WxErrorException { JsonObject json = new JsonObject(); json.addProperty("tagid", tagId); JsonArray openidArrayJson = new JsonArray(); @@ -135,7 +117,7 @@ public class WxMpUserTagServiceImpl implements WxMpUserTagService { } json.add("openid_list", openidArrayJson); - String responseContent = this.wxMpService.post(url, json.toString()); + String responseContent = this.wxMpService.post(TAGS_MEMBERS_BATCHUNTAGGING, json.toString()); WxError wxError = WxError.fromJson(responseContent, WxType.MP); if (wxError.getErrorCode() == 0) { return true; @@ -146,12 +128,10 @@ public class WxMpUserTagServiceImpl implements WxMpUserTagService { @Override public List userTagList(String openid) throws WxErrorException { - String url = API_URL_PREFIX + "/getidlist"; - JsonObject json = new JsonObject(); json.addProperty("openid", openid); - String responseContent = this.wxMpService.post(url, json.toString()); + String responseContent = this.wxMpService.post(TAGS_GETIDLIST, json.toString()); return WxMpGsonBuilder.create().fromJson( new JsonParser().parse(responseContent).getAsJsonObject().get("tagid_list"), 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 f87c784b8..357ae5801 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 @@ -1,10 +1,14 @@ package me.chanjar.weixin.mp.api.impl; import com.google.gson.JsonObject; +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.WxMpWifiShopListResult; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Wifi.*; /** * @@ -13,19 +17,16 @@ import me.chanjar.weixin.mp.bean.wifi.WxMpWifiShopListResult; * * @author Binary Wang */ +@RequiredArgsConstructor public class WxMpWifiServiceImpl implements WxMpWifiService { - private WxMpService wxMpService; - - public WxMpWifiServiceImpl(WxMpService wxMpService) { - this.wxMpService = wxMpService; - } + private final WxMpService wxMpService; @Override public WxMpWifiShopListResult listShop(int pageIndex, int pageSize) throws WxErrorException { JsonObject json = new JsonObject(); json.addProperty("pageindex", pageIndex); json.addProperty("pagesize", pageSize); - final String result = this.wxMpService.post("https://api.weixin.qq.com/bizwifi/shop/list", json.toString()); + final String result = this.wxMpService.post(BIZWIFI_SHOP_LIST, json.toString()); return WxMpWifiShopListResult.fromJson(result); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java index c97f88f2f..506101089 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java @@ -9,11 +9,10 @@ import java.io.Serializable; /** * . * @author leeis - * @Date 2018/12/29 + * @date 2018/12/29 */ @Data public class Card implements Serializable { - private static final long serialVersionUID = -3697110761983756780L; /** 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 new file mode 100644 index 000000000..2ab5fd701 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java @@ -0,0 +1,837 @@ +package me.chanjar.weixin.mp.enums; + +import lombok.AllArgsConstructor; + +/** + *+ * 公众号接口api地址 + * Created by BinaryWang on 2019-06-03. + *+ * + * @author Binary Wang + */ +public interface WxMpApiUrl { + String WX_API_BASE_URL = "https://api.weixin.qq.com"; + String WX_MP_BASE_URL = "https://mp.weixin.qq.com"; + String WX_OPEN_BASE_URL = "https://open.weixin.qq.com"; + + /** + * 得到api完整地址. + * + * @return api地址 + */ + String getUrl(); + + @AllArgsConstructor + enum Device implements WxMpApiUrl { + /** + * get_bind_device. + */ + DEVICE_GET_BIND_DEVICE(WX_API_BASE_URL, "/device/get_bind_device"), + /** + * get_openid. + */ + DEVICE_GET_OPENID(WX_API_BASE_URL, "/device/get_openid"), + /** + * compel_unbind. + */ + DEVICE_COMPEL_UNBIND(WX_API_BASE_URL, "/device/compel_unbind?"), + /** + * unbind. + */ + DEVICE_UNBIND(WX_API_BASE_URL, "/device/unbind?"), + /** + * compel_bind. + */ + DEVICE_COMPEL_BIND(WX_API_BASE_URL, "/device/compel_bind"), + /** + * bind. + */ + DEVICE_BIND(WX_API_BASE_URL, "/device/bind"), + /** + * authorize_device. + */ + DEVICE_AUTHORIZE_DEVICE(WX_API_BASE_URL, "/device/authorize_device"), + /** + * getqrcode. + */ + DEVICE_GETQRCODE(WX_API_BASE_URL, "/device/getqrcode"), + /** + * transmsg. + */ + DEVICE_TRANSMSG(WX_API_BASE_URL, "/device/transmsg"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + + @AllArgsConstructor + enum Other implements WxMpApiUrl { + /** + * 获取access_token. + */ + GET_ACCESS_TOKEN_URL(WX_API_BASE_URL, "/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"), + /** + * 获得各种类型的ticket. + */ + GET_TICKET_URL(WX_API_BASE_URL, "/cgi-bin/ticket/getticket?type="), + /** + * 长链接转短链接接口. + */ + SHORTURL_API_URL(WX_API_BASE_URL, "/cgi-bin/shorturl"), + /** + * 语义查询接口. + */ + SEMANTIC_SEMPROXY_SEARCH_URL(WX_API_BASE_URL, "/semantic/semproxy/search"), + /** + * 用code换取oauth2的access token. + */ + OAUTH2_ACCESS_TOKEN_URL(WX_API_BASE_URL, "/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"), + /** + * 刷新oauth2的access token. + */ + OAUTH2_REFRESH_TOKEN_URL(WX_API_BASE_URL, "/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s"), + /** + * 用oauth2获取用户信息. + */ + OAUTH2_USERINFO_URL(WX_API_BASE_URL, "/sns/userinfo?access_token=%s&openid=%s&lang=%s"), + /** + * 验证oauth2的access token是否有效. + */ + OAUTH2_VALIDATE_TOKEN_URL(WX_API_BASE_URL, "/sns/auth?access_token=%s&openid=%s"), + /** + * 获取微信服务器IP地址. + */ + GET_CALLBACK_IP_URL(WX_API_BASE_URL, "/cgi-bin/getcallbackip"), + /** + * 第三方使用网站应用授权登录的url. + */ + QRCONNECT_URL(WX_OPEN_BASE_URL, "/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect"), + /** + * oauth2授权的url连接. + */ + CONNECT_OAUTH2_AUTHORIZE_URL(WX_OPEN_BASE_URL, "/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s&connect_redirect=1#wechat_redirect"), + /** + * 获取公众号的自动回复规则. + */ + GET_CURRENT_AUTOREPLY_INFO_URL(WX_API_BASE_URL, "/cgi-bin/get_current_autoreply_info"), + /** + * 公众号调用或第三方平台帮公众号调用对公众号的所有api调用(包括第三方帮其调用)次数进行清零. + */ + CLEAR_QUOTA_URL(WX_API_BASE_URL, "/cgi-bin/clear_quota"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum Marketing implements WxMpApiUrl { + /** + * sets add. + */ + USER_ACTION_SETS_ADD(WX_API_BASE_URL, "/marketing/user_action_sets/add?version=v1.0"), + /** + * get. + */ + USER_ACTION_SETS_GET(WX_API_BASE_URL, "/marketing/user_action_sets/get"), + /** + * add. + */ + USER_ACTIONS_ADD(WX_API_BASE_URL, "/marketing/user_actions/add?version=v1.0"), + /** + * get. + */ + WECHAT_AD_LEADS_GET(WX_API_BASE_URL, "/marketing/wechat_ad_leads/get"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum Menu implements WxMpApiUrl { + /** + * get_current_selfmenu_info. + */ + GET_CURRENT_SELFMENU_INFO(WX_API_BASE_URL, "/cgi-bin/get_current_selfmenu_info"), + /** + * trymatch. + */ + MENU_TRYMATCH(WX_API_BASE_URL, "/cgi-bin/menu/trymatch"), + /** + * get. + */ + MENU_GET(WX_API_BASE_URL, "/cgi-bin/menu/get"), + /** + * delconditional. + */ + MENU_DELCONDITIONAL(WX_API_BASE_URL, "/cgi-bin/menu/delconditional"), + /** + * delete. + */ + MENU_DELETE(WX_API_BASE_URL, "/cgi-bin/menu/delete"), + /** + * create. + */ + MENU_CREATE(WX_API_BASE_URL, "/cgi-bin/menu/create"), + /** + * addconditional. + */ + MENU_ADDCONDITIONAL(WX_API_BASE_URL, "/cgi-bin/menu/addconditional"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + + @AllArgsConstructor + enum Qrcode implements WxMpApiUrl { + /** + * create. + */ + QRCODE_CREATE(WX_API_BASE_URL, "/cgi-bin/qrcode/create"), + /** + * showqrcode. + */ + SHOW_QRCODE(WX_MP_BASE_URL, "/cgi-bin/showqrcode"), + /** + * showqrcode. + */ + SHOW_QRCODE_WITH_TICKET(WX_MP_BASE_URL, "/cgi-bin/showqrcode?ticket=%s"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum ShakeAround implements WxMpApiUrl { + /** + * getshakeinfo. + */ + SHAKEAROUND_USER_GETSHAKEINFO(WX_API_BASE_URL, "/shakearound/user/getshakeinfo"), + /** + * add. + */ + SHAKEAROUND_PAGE_ADD(WX_API_BASE_URL, "/shakearound/page/add"), + /** + * bindpage. + */ + SHAKEAROUND_DEVICE_BINDPAGE(WX_API_BASE_URL, "/shakearound/device/bindpage"), + /** + * search. + */ + SHAKEAROUND_RELATION_SEARCH(WX_API_BASE_URL, "/shakearound/relation/search"); + + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum SubscribeMsg implements WxMpApiUrl { + /** + * subscribemsg. + */ + SUBSCRIBE_MESSAGE_AUTHORIZE_URL(WX_MP_BASE_URL, "/mp/subscribemsg?action=get_confirm&appid=%s&scene=%d&template_id=%s&redirect_url=%s&reserved=%s#wechat_redirect"), + /** + * subscribe. + */ + SEND_MESSAGE_URL(WX_API_BASE_URL, "/cgi-bin/message/template/subscribe"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum TemplateMsg implements WxMpApiUrl { + /** + * send. + */ + MESSAGE_TEMPLATE_SEND(WX_API_BASE_URL, "/cgi-bin/message/template/send"), + /** + * api_set_industry. + */ + TEMPLATE_API_SET_INDUSTRY(WX_API_BASE_URL, "/cgi-bin/template/api_set_industry"), + /** + * get_industry. + */ + TEMPLATE_GET_INDUSTRY(WX_API_BASE_URL, "/cgi-bin/template/get_industry"), + /** + * api_add_template. + */ + TEMPLATE_API_ADD_TEMPLATE(WX_API_BASE_URL, "/cgi-bin/template/api_add_template"), + /** + * get_all_private_template. + */ + TEMPLATE_GET_ALL_PRIVATE_TEMPLATE(WX_API_BASE_URL, "/cgi-bin/template/get_all_private_template"), + /** + * del_private_template. + */ + TEMPLATE_DEL_PRIVATE_TEMPLATE(WX_API_BASE_URL, "/cgi-bin/template/del_private_template"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum UserBlacklist implements WxMpApiUrl { + /** + * getblacklist. + */ + GETBLACKLIST(WX_API_BASE_URL, "/cgi-bin/tags/members/getblacklist"), + /** + * batchblacklist. + */ + BATCHBLACKLIST(WX_API_BASE_URL, "/cgi-bin/tags/members/batchblacklist"), + /** + * batchunblacklist. + */ + BATCHUNBLACKLIST(WX_API_BASE_URL, "/cgi-bin/tags/members/batchunblacklist"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum UserTag implements WxMpApiUrl { + /** + * create. + */ + TAGS_CREATE(WX_API_BASE_URL, "/cgi-bin/tags/create"), + /** + * get. + */ + TAGS_GET(WX_API_BASE_URL, "/cgi-bin/tags/get"), + /** + * update. + */ + TAGS_UPDATE(WX_API_BASE_URL, "/cgi-bin/tags/update"), + /** + * delete. + */ + TAGS_DELETE(WX_API_BASE_URL, "/cgi-bin/tags/delete"), + /** + * get. + */ + TAG_GET(WX_API_BASE_URL, "/cgi-bin/user/tag/get"), + /** + * batchtagging. + */ + TAGS_MEMBERS_BATCHTAGGING(WX_API_BASE_URL, "/cgi-bin/tags/members/batchtagging"), + /** + * batchuntagging. + */ + TAGS_MEMBERS_BATCHUNTAGGING(WX_API_BASE_URL, "/cgi-bin/tags/members/batchuntagging"), + /** + * getidlist. + */ + TAGS_GETIDLIST(WX_API_BASE_URL, "/cgi-bin/tags/getidlist"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum Wifi implements WxMpApiUrl { + /** + * list. + */ + BIZWIFI_SHOP_LIST(WX_API_BASE_URL, "/bizwifi/shop/list"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum AiOpen implements WxMpApiUrl { + /** + * translatecontent. + */ + TRANSLATE_URL(WX_API_BASE_URL, "/cgi-bin/media/voice/translatecontent?lfrom=%s<o=%s"), + /** + * addvoicetorecofortext. + */ + VOICE_UPLOAD_URL(WX_API_BASE_URL, "/cgi-bin/media/voice/addvoicetorecofortext?format=%s&voice_id=%s&lang=%s"), + /** + * queryrecoresultfortext. + */ + VOICE_QUERY_RESULT_URL(WX_API_BASE_URL, "/cgi-bin/media/voice/queryrecoresultfortext"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum Card implements WxMpApiUrl { + /** + * create. + */ + CARD_CREATE(WX_API_BASE_URL, "/card/create"), + /** + * get. + */ + CARD_GET(WX_API_BASE_URL, "/card/get"), + /** + * wx_card. + */ + CARD_GET_TICKET(WX_API_BASE_URL, "/cgi-bin/ticket/getticket?type=wx_card"), + /** + * decrypt. + */ + CARD_CODE_DECRYPT(WX_API_BASE_URL, "/card/code/decrypt"), + /** + * get. + */ + CARD_CODE_GET(WX_API_BASE_URL, "/card/code/get"), + /** + * consume. + */ + CARD_CODE_CONSUME(WX_API_BASE_URL, "/card/code/consume"), + /** + * mark. + */ + CARD_CODE_MARK(WX_API_BASE_URL, "/card/code/mark"), + /** + * set. + */ + CARD_TEST_WHITELIST(WX_API_BASE_URL, "/card/testwhitelist/set"), + /** + * create. + */ + CARD_QRCODE_CREATE(WX_API_BASE_URL, "/card/qrcode/create"), + /** + * create. + */ + CARD_LANDING_PAGE_CREATE(WX_API_BASE_URL, "/card/landingpage/create"), + /** + * 将用户的卡券设置为失效状态. + */ + CARD_CODE_UNAVAILABLE(WX_API_BASE_URL, "/card/code/unavailable"), + /** + * 卡券删除. + */ + CARD_DELETE(WX_API_BASE_URL, "/card/delete"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum DataCube implements WxMpApiUrl { + /** + * getusersummary. + */ + GET_USER_SUMMARY(WX_API_BASE_URL, "/datacube/getusersummary"), + /** + * getusercumulate. + */ + GET_USER_CUMULATE(WX_API_BASE_URL, "/datacube/getusercumulate"), + /** + * getarticlesummary. + */ + GET_ARTICLE_SUMMARY(WX_API_BASE_URL, "/datacube/getarticlesummary"), + /** + * getarticletotal. + */ + GET_ARTICLE_TOTAL(WX_API_BASE_URL, "/datacube/getarticletotal"), + /** + * getuserread. + */ + GET_USER_READ(WX_API_BASE_URL, "/datacube/getuserread"), + /** + * getuserreadhour. + */ + GET_USER_READ_HOUR(WX_API_BASE_URL, "/datacube/getuserreadhour"), + /** + * getusershare. + */ + GET_USER_SHARE(WX_API_BASE_URL, "/datacube/getusershare"), + /** + * getusersharehour. + */ + GET_USER_SHARE_HOUR(WX_API_BASE_URL, "/datacube/getusersharehour"), + /** + * getupstreammsg. + */ + GET_UPSTREAM_MSG(WX_API_BASE_URL, "/datacube/getupstreammsg"), + /** + * getupstreammsghour. + */ + GET_UPSTREAM_MSG_HOUR(WX_API_BASE_URL, "/datacube/getupstreammsghour"), + /** + * getupstreammsgweek. + */ + GET_UPSTREAM_MSG_WEEK(WX_API_BASE_URL, "/datacube/getupstreammsgweek"), + /** + * getupstreammsgmonth. + */ + GET_UPSTREAM_MSG_MONTH(WX_API_BASE_URL, "/datacube/getupstreammsgmonth"), + /** + * getupstreammsgdist. + */ + GET_UPSTREAM_MSG_DIST(WX_API_BASE_URL, "/datacube/getupstreammsgdist"), + /** + * getupstreammsgdistweek. + */ + GET_UPSTREAM_MSG_DIST_WEEK(WX_API_BASE_URL, "/datacube/getupstreammsgdistweek"), + /** + * getupstreammsgdistmonth. + */ + GET_UPSTREAM_MSG_DIST_MONTH(WX_API_BASE_URL, "/datacube/getupstreammsgdistmonth"), + /** + * getinterfacesummary. + */ + GET_INTERFACE_SUMMARY(WX_API_BASE_URL, "/datacube/getinterfacesummary"), + /** + * getinterfacesummaryhour. + */ + GET_INTERFACE_SUMMARY_HOUR(WX_API_BASE_URL, "/datacube/getinterfacesummaryhour"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum Kefu implements WxMpApiUrl { + /** + * send. + */ + MESSAGE_CUSTOM_SEND(WX_API_BASE_URL, "/cgi-bin/message/custom/send"), + /** + * getkflist. + */ + GET_KF_LIST(WX_API_BASE_URL, "/cgi-bin/customservice/getkflist"), + /** + * getonlinekflist. + */ + GET_ONLINE_KF_LIST(WX_API_BASE_URL, "/cgi-bin/customservice/getonlinekflist"), + /** + * add. + */ + KFACCOUNT_ADD(WX_API_BASE_URL, "/customservice/kfaccount/add"), + /** + * update. + */ + KFACCOUNT_UPDATE(WX_API_BASE_URL, "/customservice/kfaccount/update"), + /** + * inviteworker. + */ + KFACCOUNT_INVITE_WORKER(WX_API_BASE_URL, "/customservice/kfaccount/inviteworker"), + /** + * uploadheadimg. + */ + KFACCOUNT_UPLOAD_HEAD_IMG(WX_API_BASE_URL, "/customservice/kfaccount/uploadheadimg?kf_account=%s"), + /** + * del kfaccount. + */ + KFACCOUNT_DEL(WX_API_BASE_URL, "/customservice/kfaccount/del?kf_account=%s"), + /** + * create. + */ + KFSESSION_CREATE(WX_API_BASE_URL, "/customservice/kfsession/create"), + /** + * close. + */ + KFSESSION_CLOSE(WX_API_BASE_URL, "/customservice/kfsession/close"), + /** + * getsession. + */ + KFSESSION_GET_SESSION(WX_API_BASE_URL, "/customservice/kfsession/getsession?openid=%s"), + /** + * getsessionlist. + */ + KFSESSION_GET_SESSION_LIST(WX_API_BASE_URL, "/customservice/kfsession/getsessionlist?kf_account=%s"), + /** + * getwaitcase. + */ + KFSESSION_GET_WAIT_CASE(WX_API_BASE_URL, "/customservice/kfsession/getwaitcase"), + /** + * getmsglist. + */ + MSG_RECORD_LIST(WX_API_BASE_URL, "/customservice/msgrecord/getmsglist"), + /** + * typing. + */ + CUSTOM_TYPING(WX_API_BASE_URL, "/cgi-bin/message/custom/typing"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum MassMessage implements WxMpApiUrl { + /** + * 上传群发用的图文消息. + */ + MEDIA_UPLOAD_NEWS_URL(WX_API_BASE_URL, "/cgi-bin/media/uploadnews"), + /** + * 上传群发用的视频. + */ + MEDIA_UPLOAD_VIDEO_URL(WX_API_BASE_URL, "/cgi-bin/media/uploadvideo"), + /** + * 分组群发消息. + */ + MESSAGE_MASS_SENDALL_URL(WX_API_BASE_URL, "/cgi-bin/message/mass/sendall"), + /** + * 按openId列表群发消息. + */ + MESSAGE_MASS_SEND_URL(WX_API_BASE_URL, "/cgi-bin/message/mass/send"), + /** + * 群发消息预览接口. + */ + MESSAGE_MASS_PREVIEW_URL(WX_API_BASE_URL, "/cgi-bin/message/mass/preview"), + /** + * 删除群发接口. + */ + MESSAGE_MASS_DELETE_URL(WX_API_BASE_URL, "/cgi-bin/message/mass/delete"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum Material implements WxMpApiUrl { + /** + * get. + */ + MEDIA_GET_URL(WX_API_BASE_URL, "/cgi-bin/media/get"), + /** + * upload. + */ + MEDIA_UPLOAD_URL(WX_API_BASE_URL, "/cgi-bin/media/upload?type=%s"), + /** + * uploadimg. + */ + IMG_UPLOAD_URL(WX_API_BASE_URL, "/cgi-bin/media/uploadimg"), + /** + * add_material. + */ + MATERIAL_ADD_URL(WX_API_BASE_URL, "/cgi-bin/material/add_material?type=%s"), + /** + * add_news. + */ + NEWS_ADD_URL(WX_API_BASE_URL, "/cgi-bin/material/add_news"), + /** + * get_material. + */ + MATERIAL_GET_URL(WX_API_BASE_URL, "/cgi-bin/material/get_material"), + /** + * update_news. + */ + NEWS_UPDATE_URL(WX_API_BASE_URL, "/cgi-bin/material/update_news"), + /** + * del_material. + */ + MATERIAL_DEL_URL(WX_API_BASE_URL, "/cgi-bin/material/del_material"), + /** + * get_materialcount. + */ + MATERIAL_GET_COUNT_URL(WX_API_BASE_URL, "/cgi-bin/material/get_materialcount"), + /** + * batchget_material. + */ + MATERIAL_BATCHGET_URL(WX_API_BASE_URL, "/cgi-bin/material/batchget_material"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum MemberCard implements WxMpApiUrl { + /** + * create. + */ + MEMBER_CARD_CREATE(WX_API_BASE_URL, "/card/create"), + /** + * activate. + */ + MEMBER_CARD_ACTIVATE(WX_API_BASE_URL, "/card/membercard/activate"), + /** + * get userinfo. + */ + MEMBER_CARD_USER_INFO_GET(WX_API_BASE_URL, "/card/membercard/userinfo/get"), + /** + * updateuser. + */ + MEMBER_CARD_UPDATE_USER(WX_API_BASE_URL, "/card/membercard/updateuser"), + /** + * 会员卡激活之微信开卡接口(wx_activate=true情况调用). + */ + MEMBER_CARD_ACTIVATE_USER_FORM(WX_API_BASE_URL, "/card/membercard/activateuserform/set"), + /** + * 获取会员卡开卡插件参数. + */ + MEMBER_CARD_ACTIVATE_URL(WX_API_BASE_URL, "/card/membercard/activate/geturl"), + /** + * 会员卡信息更新. + */ + MEMBER_CARD_UPDATE(WX_API_BASE_URL, "/card/update"), + /** + * 跳转型会员卡开卡字段. + * 获取用户提交资料(wx_activate=true情况调用),开发者根据activate_ticket获取到用户填写的信息 + */ + MEMBER_CARD_ACTIVATE_TEMP_INFO(WX_API_BASE_URL, "/card/membercard/activatetempinfo/get"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + @AllArgsConstructor + enum Store implements WxMpApiUrl { + /** + * getwxcategory. + */ + POI_GET_WX_CATEGORY_URL(WX_API_BASE_URL, "/cgi-bin/poi/getwxcategory"), + /** + * updatepoi. + */ + POI_UPDATE_URL(WX_API_BASE_URL, "/cgi-bin/poi/updatepoi"), + /** + * getpoilist. + */ + POI_LIST_URL(WX_API_BASE_URL, "/cgi-bin/poi/getpoilist"), + /** + * delpoi. + */ + POI_DEL_URL(WX_API_BASE_URL, "/cgi-bin/poi/delpoi"), + /** + * getpoi. + */ + POI_GET_URL(WX_API_BASE_URL, "/cgi-bin/poi/getpoi"), + /** + * addpoi. + */ + POI_ADD_URL(WX_API_BASE_URL, "/cgi-bin/poi/addpoi"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } + + + @AllArgsConstructor + enum User implements WxMpApiUrl { + /** + * batchget. + */ + USER_INFO_BATCH_GET_URL(WX_API_BASE_URL, "/cgi-bin/user/info/batchget"), + /** + * get. + */ + USER_GET_URL(WX_API_BASE_URL, "/cgi-bin/user/get"), + /** + * info. + */ + USER_INFO_URL(WX_API_BASE_URL, "/cgi-bin/user/info"), + /** + * updateremark. + */ + USER_INFO_UPDATE_REMARK_URL(WX_API_BASE_URL, "/cgi-bin/user/info/updateremark"), + /** + * changeopenid. + */ + USER_CHANGE_OPENID_URL(WX_API_BASE_URL, "/cgi-bin/changeopenid"); + + private String prefix; + private String path; + + @Override + public String getUrl() { + return this.prefix + this.path; + } + } +} diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpBusyRetryTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpBusyRetryTest.java index 507ab31b6..1f0a01b46 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpBusyRetryTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpBusyRetryTest.java @@ -1,5 +1,6 @@ package me.chanjar.weixin.mp.api; +import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.http.RequestExecutor; @@ -12,6 +13,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; @Test +@Slf4j public class WxMpBusyRetryTest { @DataProvider(name = "getService") @@ -22,7 +24,7 @@ public class WxMpBusyRetryTest { public synchronizedT executeInternal( RequestExecutor executor, String uri, E data) throws WxErrorException { - this.log.info("Executed"); + log.info("Executed"); throw new WxErrorException(WxError.builder().errorCode(-1).build()); } }; @@ -34,7 +36,7 @@ public class WxMpBusyRetryTest { @Test(dataProvider = "getService", expectedExceptions = RuntimeException.class) public void testRetry(WxMpService service) throws WxErrorException { - service.execute(null, null, null); + service.execute(null, (String)null, null); } @Test(dataProvider = "getService") @@ -47,7 +49,7 @@ public class WxMpBusyRetryTest { try { System.out.println("====================="); System.out.println(Thread.currentThread().getName() + ": testRetry"); - service.execute(null, null, null); + service.execute(null, (String)null, null); } catch (WxErrorException e) { throw new RuntimeException(e); } catch (RuntimeException e) { diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpJsAPITest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpJsAPITest.java index 0b14d9564..c9df2c815 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpJsAPITest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpJsAPITest.java @@ -3,24 +3,22 @@ package me.chanjar.weixin.mp.api; import com.google.inject.Inject; import me.chanjar.weixin.common.util.crypto.SHA1; import me.chanjar.weixin.mp.api.test.ApiTestModule; -import org.testng.*; -import org.testng.annotations.*; +import org.testng.Assert; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; /** * 测试jsapi ticket接口 * * @author chanjarster */ -@Test(groups = "jsAPI", dependsOnGroups = "baseAPI") +@Test @Guice(modules = ApiTestModule.class) public class WxMpJsAPITest { @Inject protected WxMpService wxService; - - - public void test() { long timestamp = 1419835025L; String url = "http://omstest.vmall.com:23568/thirdparty/wechat/vcode/gotoshare?quantity=1&batchName=MATE7"; diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImplTest.java index fa73b8f4d..89069bd29 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImplTest.java @@ -1,25 +1,27 @@ package me.chanjar.weixin.mp.api.impl; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import me.chanjar.weixin.mp.api.WxMpUserService; -import me.chanjar.weixin.mp.bean.result.WxMpChangeOpenid; -import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; -import org.testng.*; -import org.testng.annotations.*; - 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.api.test.TestConfigStorage; import me.chanjar.weixin.mp.bean.WxMpUserQuery; +import me.chanjar.weixin.mp.bean.result.WxMpChangeOpenid; import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.bean.result.WxMpUserList; +import me.chanjar.weixin.mp.enums.WxMpApiUrl; +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; +import org.testng.Assert; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static me.chanjar.weixin.mp.enums.WxMpApiUrl.User.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -86,8 +88,7 @@ public class WxMpUserServiceImplTest { public void testChangeOpenid() throws WxErrorException { List openids = new ArrayList<>(); openids.add(this.configProvider.getOpenid()); - List wxMpChangeOpenidList = this.wxService.getUserService() - .changeOpenid("原公众号appid", openids); + List wxMpChangeOpenidList = this.wxService.getUserService().changeOpenid("原公众号appid", openids); Assert.assertNotNull(wxMpChangeOpenidList); Assert.assertEquals(1, wxMpChangeOpenidList.size()); WxMpChangeOpenid wxMpChangeOpenid = wxMpChangeOpenidList.get(0); @@ -98,6 +99,7 @@ public class WxMpUserServiceImplTest { public static class MockTest { private WxMpService wxService = mock(WxMpService.class); + @Test public void testMockChangeOpenid() throws WxErrorException { List openids = new ArrayList<>(); @@ -109,9 +111,8 @@ public class WxMpUserServiceImplTest { map.put("openid_list", openids); String returnJson = "{\"errcode\": 0,\"errmsg\": \"ok\",\"result_list\": [{\"ori_openid\": \"oEmYbwN-n24jxvk4Sox81qedINkQ\",\"new_openid\": \"o2FwqwI9xCsVadFah_HtpPfaR-X4\",\"err_msg\": \"ok\"},{\"ori_openid\": \"oEmYbwH9uVd4RKJk7ZZg6SzL6tTo\",\"err_msg\": \"ori_openid error\"}]}"; - when(wxService.post(WxMpUserService.USER_CHANGE_OPENID_URL, WxMpGsonBuilder.create().toJson(map))).thenReturn(returnJson); - List wxMpChangeOpenidList = this.wxService.getUserService() - .changeOpenid(fromAppid, openids); + when(wxService.post(USER_CHANGE_OPENID_URL, WxMpGsonBuilder.create().toJson(map))).thenReturn(returnJson); + List wxMpChangeOpenidList = this.wxService.getUserService().changeOpenid(fromAppid, openids); Assert.assertNotNull(wxMpChangeOpenidList); Assert.assertEquals(2, wxMpChangeOpenidList.size()); WxMpChangeOpenid wxMpChangeOpenid = wxMpChangeOpenidList.get(0);