diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaScheduleService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaScheduleService.java new file mode 100644 index 000000000..c5b75bce1 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaScheduleService.java @@ -0,0 +1,88 @@ +package me.chanjar.weixin.cp.api; + +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.cp.bean.oa.WxCpOaSchedule; + +import java.util.List; + +/** + * 企业微信日程接口. + * 官方文档:https://work.weixin.qq.com/api/doc/90000/90135/93648 + * + * @author Binary Wang + * @date 2020 -12-25 + */ +public interface WxCpOaScheduleService { + /** + * 创建日程 + *

+ * 该接口用于在日历中创建一个日程。 + *

+ * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/schedule/add?access_token=ACCESS_TOKEN + * + * @param schedule the schedule + * @param agentId 授权方安装的应用agentid。仅旧的第三方多应用套件需要填此参数 + * @return 日程ID string + * @throws WxErrorException the wx error exception + */ + String add(WxCpOaSchedule schedule, Integer agentId) throws WxErrorException; + + /** + * 更新日程 + *

+ * 该接口用于在日历中更新指定的日程。 + *

+ * 注意,更新操作是覆盖式,而不是增量式 + * 不可更新组织者和日程所属日历ID + *

+ * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/schedule/update?access_token=ACCESS_TOKEN + * + * @param schedule the schedule + * @throws WxErrorException the wx error exception + */ + void update(WxCpOaSchedule schedule) throws WxErrorException; + + /** + * 获取日程详情 + *

+ * 该接口用于获取指定的日程详情。 + *

+ * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/schedule/get?access_token=ACCESS_TOKEN + * + * @param scheduleIds the schedule ids + * @return the details + * @throws WxErrorException the wx error exception + */ + List getDetails(List scheduleIds) throws WxErrorException; + + /** + * 取消日程 + * 该接口用于取消指定的日程。 + *

+ * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/schedule/del?access_token=ACCESS_TOKEN + * + * @param scheduleId 日程id + * @throws WxErrorException the wx error exception + */ + void delete(String scheduleId) throws WxErrorException; + + /** + * 获取日历下的日程列表 + * 该接口用于获取指定的日历下的日程列表。 + * 仅可获取应用自己创建的日历下的日程。 + *

+ * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/oa/schedule/get_by_calendar?access_token=ACCESS_TOKEN + * + * @param calId 日历ID + * @param offset 分页,偏移量, 默认为0 + * @param limit 分页,预期请求的数据量,默认为500,取值范围 1 ~ 1000 + * @return the string + * @throws WxErrorException the wx error exception + */ + List listByCalendar(String calId, Integer offset, Integer limit) throws WxErrorException; +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java index 1933c1469..be681de41 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java @@ -1,7 +1,5 @@ package me.chanjar.weixin.cp.api; -import com.google.gson.JsonObject; -import me.chanjar.weixin.common.bean.ToJson; import me.chanjar.weixin.common.bean.WxJsapiSignature; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.service.WxService; @@ -39,7 +37,7 @@ public interface WxCpService extends WxService { * * @return the access token * @throws WxErrorException the wx error exception - * @see #getAccessToken(boolean) #getAccessToken(boolean) + * @see #getAccessToken(boolean) #getAccessToken(boolean)#getAccessToken(boolean) */ String getAccessToken() throws WxErrorException; @@ -63,7 +61,7 @@ public interface WxCpService extends WxService { * * @return the jsapi ticket * @throws WxErrorException the wx error exception - * @see #getJsapiTicket(boolean) #getJsapiTicket(boolean) + * @see #getJsapiTicket(boolean) #getJsapiTicket(boolean)#getJsapiTicket(boolean) */ String getJsapiTicket() throws WxErrorException; @@ -90,7 +88,7 @@ public interface WxCpService extends WxService { * * @return the agent jsapi ticket * @throws WxErrorException the wx error exception - * @see #getJsapiTicket(boolean) #getJsapiTicket(boolean) + * @see #getJsapiTicket(boolean) #getJsapiTicket(boolean)#getJsapiTicket(boolean) */ String getAgentJsapiTicket() throws WxErrorException; @@ -376,10 +374,17 @@ public interface WxCpService extends WxService { /** * 获取日历相关接口的服务类对象 * - * @return the menu service + * @return the oa calendar service */ WxCpOaCalendarService getOaCalendarService(); + /** + * 获取日程相关接口的服务类对象 + * + * @return the oa schedule service + */ + WxCpOaScheduleService getOaScheduleService(); + /** * 获取群机器人消息推送服务 * @@ -387,11 +392,11 @@ public interface WxCpService extends WxService { */ WxCpGroupRobotService getGroupRobotService(); - /* + /** * 获取工作台服务 * * @return the workbench service - * */ + */ WxCpAgentWorkBenchService getWorkBenchService(); /** diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java index d356819e0..65ba5dce5 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java @@ -55,6 +55,7 @@ public abstract class BaseWxCpServiceImpl implements WxCpService, RequestH private WxCpGroupRobotService groupRobotService = new WxCpGroupRobotServiceImpl(this); private WxCpMessageService messageService = new WxCpMessageServiceImpl(this); private WxCpOaCalendarService oaCalendarService = new WxCpOaCalendarServiceImpl(this); + private WxCpOaScheduleService oaScheduleService = new WxCpOaOaScheduleServiceImpl(this); private WxCpAgentWorkBenchService workBenchService = new WxCpAgentWorkBenchServiceImpl(this); /** @@ -512,4 +513,9 @@ public abstract class BaseWxCpServiceImpl implements WxCpService, RequestH public void setAgentService(WxCpAgentService agentService) { this.agentService = agentService; } + + @Override + public WxCpOaScheduleService getOaScheduleService() { + return this.oaScheduleService; + } } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaOaScheduleServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaOaScheduleServiceImpl.java new file mode 100644 index 000000000..ca33f7c66 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaOaScheduleServiceImpl.java @@ -0,0 +1,82 @@ +package me.chanjar.weixin.cp.api.impl; + +import com.google.common.collect.ImmutableMap; +import com.google.gson.reflect.TypeToken; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; +import me.chanjar.weixin.cp.api.WxCpOaScheduleService; +import me.chanjar.weixin.cp.api.WxCpService; +import me.chanjar.weixin.cp.bean.oa.WxCpOaSchedule; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Oa.*; + +/** + * 企业微信日程接口实现类. + * + * @author Binary Wang + * @date 2020-12-25 + */ +@Slf4j +@RequiredArgsConstructor +public class WxCpOaOaScheduleServiceImpl implements WxCpOaScheduleService { + private final WxCpService cpService; + + @Override + public String add(WxCpOaSchedule schedule, Integer agentId) throws WxErrorException { + Map param; + if (agentId == null) { + param = ImmutableMap.of("schedule", schedule); + } else { + param = ImmutableMap.of("schedule", schedule, "agentid", agentId); + } + + return this.cpService.post(this.cpService.getWxCpConfigStorage().getApiUrl(SCHEDULE_ADD), + WxCpGsonBuilder.create().toJson(param)); + } + + @Override + public void update(WxCpOaSchedule schedule) throws WxErrorException { + this.cpService.post(this.cpService.getWxCpConfigStorage().getApiUrl(SCHEDULE_UPDATE), + WxCpGsonBuilder.create().toJson(ImmutableMap.of("schedule", schedule))); + } + + @Override + public List getDetails(List scheduleIds) throws WxErrorException { + final String response = this.cpService.post(this.cpService.getWxCpConfigStorage().getApiUrl(SCHEDULE_GET), + WxCpGsonBuilder.create().toJson(ImmutableMap.of("schedule_id_list", scheduleIds))); + return WxCpGsonBuilder.create().fromJson(GsonParser.parse(response).get("schedule_list"), + new TypeToken>() { + }.getType()); + } + + @Override + public void delete(String scheduleId) throws WxErrorException { + this.cpService.post(this.cpService.getWxCpConfigStorage().getApiUrl(SCHEDULE_DEL), + WxCpGsonBuilder.create().toJson(ImmutableMap.of("schedule_id", scheduleId))); + } + + @Override + public List listByCalendar(String calId, Integer offset, Integer limit) throws WxErrorException { + final Map param = new HashMap<>(3); + param.put("cal_id", calId); + if (offset != null) { + param.put("offset", offset); + } + if (limit != null) { + param.put("limit", limit); + } + final String response = this.cpService.post(this.cpService.getWxCpConfigStorage().getApiUrl(SCHEDULE_LIST), + WxCpGsonBuilder.create().toJson(param)); + return WxCpGsonBuilder.create().fromJson(GsonParser.parse(response).get("schedule_list"), + new TypeToken>() { + }.getType()); + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java index 7fa1212c7..6a02ef1fd 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpMessage.java @@ -199,7 +199,7 @@ public class WxCpMessage implements Serializable { if (this.getDuplicateCheckInterval() != null) { messageJson.addProperty("duplicate_check_interval", this.getDuplicateCheckInterval()); } - + this.handleMsgType(messageJson); if (StringUtils.isNotBlank(this.getSafe())) { diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpOaSchedule.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpOaSchedule.java new file mode 100644 index 000000000..2e8315dbd --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/oa/WxCpOaSchedule.java @@ -0,0 +1,194 @@ +package me.chanjar.weixin.cp.bean.oa; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.experimental.Accessors; +import me.chanjar.weixin.common.bean.ToJson; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; +import java.util.List; + +/** + * 日程信息bean. + * + * @author Binary Wang + * @date 2020-12-25 + */ +@Data +@Accessors(chain = true) +public class WxCpOaSchedule implements Serializable, ToJson { + private static final long serialVersionUID = -6821274247372646346L; + /** + * 日程id + */ + @SerializedName("schedule_id") + private String scheduleId; + /** + * 日程编号,是一个自增数字 + */ + @SerializedName("sequence") + private Integer sequence; + /** + * 组织者。不多于64字节 + */ + @SerializedName("organizer") + private String organizer; + /** + * 日程参与者列表。最多支持2000人 + */ + @SerializedName("attendees") + private List attendees; + /** + * 日程标题。0 ~ 128 字符。不填会默认显示为“新建事件” + */ + @SerializedName("summary") + private String summary; + /** + * 日程描述。不多于512个字符 + */ + @SerializedName("description") + private String description; + /** + * 提醒相关信息 + */ + @SerializedName("reminders") + private Reminder reminders; + /** + * 日程地址。 + * 不多于128个字符 + */ + @SerializedName("location") + private String location; + /** + * 日程开始时间,Unix时间戳 + */ + @SerializedName("start_time") + private Long startTime; + /** + * 日程结束时间,Unix时间戳 + */ + @SerializedName("end_time") + private Long endTime; + /** + * + */ + @SerializedName("status") + private Integer status; + /** + * 日程所属日历ID。该日历必须是access_token所对应应用所创建的日历。 + * 注意,这个日历必须是属于组织者(organizer)的日历; + * 如果不填,那么插入到组织者的默认日历上。 + * 第三方应用必须指定cal_id + * 不多于64字节 + */ + @SerializedName("cal_id") + private String calId; + + @Override + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + + @Data + @Accessors(chain = true) + public static class Attendee implements Serializable { + private static final long serialVersionUID = 5419000348428480645L; + /** + * 日程参与者ID, + * 不多于64字节 + */ + @SerializedName("userid") + private String userid; + /** + * 日程参与者的接受状态。 + * 0 - 未处理 + * 1 - 待定 + * 2 - 全部接受 + * 3 - 仅接受一次 + * 4 - 拒绝 + */ + @SerializedName("response_status") + private Integer responseStatus; + } + + @Data + @Accessors(chain = true) + public static class Reminder implements Serializable { + private static final long serialVersionUID = 5030527150838243356L; + + /** + * 是否需要提醒。0-否;1-是 + */ + @SerializedName("is_remind") + private Integer isRemind; + /** + * 是否重复日程。0-否;1-是 + */ + @SerializedName("is_repeat") + private Integer isRepeat; + /** + * 日程开始(start_time)前多少秒提醒,当is_remind为1时有效。 + * 例如: 300表示日程开始前5分钟提醒。目前仅支持以下数值: + * 0 - 事件开始时 + * 300 - 事件开始前5分钟 + * 900 - 事件开始前15分钟 + * 3600 - 事件开始前1小时 + * 86400 - 事件开始前1天 + */ + @SerializedName("remind_before_event_secs") + private Integer remindBeforeEventSecs; + /** + * 重复类型,当is_repeat为1时有效。目前支持如下类型: + * 0 - 每日 + * 1 - 每周 + * 2 - 每月 + * 5 - 每年 + * 7 - 工作日 + */ + @SerializedName("repeat_type") + private Integer repeatType; + /** + * 重复结束时刻,Unix时间戳。不填或填0表示一直重复 + */ + @SerializedName("repeat_until") + private Long repeatUntil; + /** + * 是否自定义重复。0-否;1-是 + */ + @SerializedName("is_custom_repeat") + private Integer isCustomRepeat; + /** + * 重复间隔 + * 仅当指定为自定义重复时有效 + * 该字段随repeat_type不同而含义不同 + * 例如: + * repeat_interval指定为3,repeat_type指定为每周重复,那么每3周重复一次; + * repeat_interval指定为3,repeat_type指定为每月重复,那么每3个月重复一次 + */ + @SerializedName("repeat_interval") + private Integer repeatInterval; + /** + * 每周周几重复 + * 仅当指定为自定义重复且重复类型为每周时有效 + * 取值范围:1 ~ 7,分别表示周一至周日 + */ + @SerializedName("repeat_day_of_week") + private List repeatDayOfWeek; + /** + * 每月哪几天重复 + * 仅当指定为自定义重复且重复类型为每月时有效 + * 取值范围:1 ~ 31,分别表示1~31号 + */ + @SerializedName("repeat_day_of_month") + private List repeatDayOfMonth; + /** + * 时区。UTC偏移量表示(即偏离零时区的小时数),东区为正数,西区为负数。 + * 例如:+8 表示北京时间东八区 + * 默认为北京时间东八区 + * 取值范围:-12 ~ +12 + */ + @SerializedName("timezone") + private Integer timezone; + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java index bac4dd96e..304bbe5a6 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java @@ -113,6 +113,12 @@ public final class WxCpApiPathConsts { public static final String CALENDAR_UPDATE = "/cgi-bin/oa/calendar/update"; public static final String CALENDAR_GET = "/cgi-bin/oa/calendar/get"; public static final String CALENDAR_DEL = "/cgi-bin/oa/calendar/del"; + + public static final String SCHEDULE_ADD = "/cgi-bin/oa/schedule/add"; + public static final String SCHEDULE_UPDATE = "/cgi-bin/oa/schedule/update"; + public static final String SCHEDULE_GET = "/cgi-bin/oa/schedule/get"; + public static final String SCHEDULE_DEL = "/cgi-bin/oa/schedule/del"; + public static final String SCHEDULE_LIST = "/cgi-bin/oa/schedule/get_by_calendar"; } @UtilityClass diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaScheduleServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaScheduleServiceImplTest.java new file mode 100644 index 000000000..09cbf874d --- /dev/null +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpOaScheduleServiceImplTest.java @@ -0,0 +1,54 @@ +package me.chanjar.weixin.cp.api.impl; + +import com.google.inject.Inject; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.cp.api.ApiTestModule; +import me.chanjar.weixin.cp.api.WxCpService; +import me.chanjar.weixin.cp.bean.oa.WxCpOaSchedule; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import java.util.Arrays; + + +/** + * 单元测试类. + * + * @author Binary Wang + * @date 2020-12-25 + */ +@Test +@Guice(modules = ApiTestModule.class) +public class WxCpOaScheduleServiceImplTest { + @Inject + protected WxCpService wxService; + + @Test + public void testAdd() throws WxErrorException { + this.wxService.getOaScheduleService().add(new WxCpOaSchedule().setOrganizer("userid1") + .setDescription("description").setStartTime(111111111111L).setEndTime(222222222222L) + .setSummary("summary"), null); + } + + @Test + public void testUpdate() throws WxErrorException { + this.wxService.getOaScheduleService().update(new WxCpOaSchedule().setScheduleId("2222").setOrganizer("userid1") + .setDescription("description").setStartTime(111111111111L).setEndTime(222222222222L) + .setSummary("summary")); + } + + @Test + public void testGetDetails() throws WxErrorException { + this.wxService.getOaScheduleService().getDetails(Arrays.asList("11111")); + } + + @Test + public void testDelete() throws WxErrorException { + this.wxService.getOaScheduleService().delete("111"); + } + + @Test + public void testListByCalendar() throws WxErrorException { + this.wxService.getOaScheduleService().listByCalendar("111", null, null); + } +} 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 998939ca8..afccd004e 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 @@ -50,8 +50,9 @@ public interface WxMpMaterialService { * * @param mediaType 媒体类型, 请看{@link me.chanjar.weixin.common.api.WxConsts} * @param file 文件对象 - * @throws WxErrorException - * @see #mediaUpload(String, String, InputStream) + * @return the wx media upload result + * @throws WxErrorException the wx error exception + * @see #mediaUpload(String, String, InputStream) #mediaUpload(String, String, InputStream) */ WxMediaUploadResult mediaUpload(String mediaType, File file) throws WxErrorException; @@ -67,8 +68,9 @@ public interface WxMpMaterialService { * @param mediaType 媒体类型, 请看{@link me.chanjar.weixin.common.api.WxConsts} * @param fileType 文件类型,请看{@link me.chanjar.weixin.common.api.WxConsts} * @param inputStream 输入流 - * @throws WxErrorException - * @see #mediaUpload(java.lang.String, java.io.File) + * @return the wx media upload result + * @throws WxErrorException the wx error exception + * @see #mediaUpload(java.lang.String, java.io.File) #mediaUpload(java.lang.String, java.io.File) */ WxMediaUploadResult mediaUpload(String mediaType, String fileType, InputStream inputStream) throws WxErrorException; @@ -83,8 +85,8 @@ public interface WxMpMaterialService { * * * @param mediaId 媒体文件Id - * @return 保存到本地的临时文件 - * @throws WxErrorException + * @return 保存到本地的临时文件 file + * @throws WxErrorException the wx error exception */ File mediaDownload(String mediaId) throws WxErrorException; @@ -99,8 +101,8 @@ public interface WxMpMaterialService { * * * @param mediaId 媒体文件Id - * @return 保存到本地的临时文件 - * @throws WxErrorException + * @return 保存到本地的临时文件 file + * @throws WxErrorException the wx error exception */ File jssdkMediaDownload(String mediaId) throws WxErrorException; @@ -114,7 +116,7 @@ public interface WxMpMaterialService { * * @param file 上传的文件对象 * @return WxMediaImgUploadResult 返回图片url - * @throws WxErrorException + * @throws WxErrorException the wx error exception */ WxMediaImgUploadResult mediaImgUpload(File file) throws WxErrorException; @@ -139,6 +141,8 @@ public interface WxMpMaterialService { * * @param mediaType 媒体类型, 请看{@link me.chanjar.weixin.common.api.WxConsts} * @param material 上传的素材, 请看{@link WxMpMaterial} + * @return the wx mp material upload result + * @throws WxErrorException the wx error exception */ WxMpMaterialUploadResult materialFileUpload(String mediaType, WxMpMaterial material) throws WxErrorException; @@ -159,6 +163,8 @@ public interface WxMpMaterialService { * * * @param news 上传的图文消息, 请看{@link WxMpMaterialNews} + * @return the wx mp material upload result + * @throws WxErrorException the wx error exception */ WxMpMaterialUploadResult materialNewsUpload(WxMpMaterialNews news) throws WxErrorException; @@ -171,6 +177,8 @@ public interface WxMpMaterialService { * * * @param mediaId 永久素材的id + * @return the input stream + * @throws WxErrorException the wx error exception */ InputStream materialImageOrVoiceDownload(String mediaId) throws WxErrorException; @@ -183,6 +191,8 @@ public interface WxMpMaterialService { * * * @param mediaId 永久素材的id + * @return the wx mp material video info result + * @throws WxErrorException the wx error exception */ WxMpMaterialVideoInfoResult materialVideoInfo(String mediaId) throws WxErrorException; @@ -195,6 +205,8 @@ public interface WxMpMaterialService { * * * @param mediaId 永久素材的id + * @return the wx mp material news + * @throws WxErrorException the wx error exception */ WxMpMaterialNews materialNewsInfo(String mediaId) throws WxErrorException; @@ -207,6 +219,8 @@ public interface WxMpMaterialService { * * * @param wxMpMaterialArticleUpdate 用来更新图文素材的bean, 请看{@link WxMpMaterialArticleUpdate} + * @return the boolean + * @throws WxErrorException the wx error exception */ boolean materialNewsUpdate(WxMpMaterialArticleUpdate wxMpMaterialArticleUpdate) throws WxErrorException; @@ -223,6 +237,8 @@ public interface WxMpMaterialService { * * * @param mediaId 永久素材的id + * @return the boolean + * @throws WxErrorException the wx error exception */ boolean materialDelete(String mediaId) throws WxErrorException; @@ -238,6 +254,9 @@ public interface WxMpMaterialService { * 详情请见: 获取素材总数 * 接口url格式:https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=ACCESS_TOKEN * + * + * @return the wx mp material count result + * @throws WxErrorException the wx error exception */ WxMpMaterialCountResult materialCount() throws WxErrorException; @@ -251,6 +270,8 @@ public interface WxMpMaterialService { * * @param offset 从全部素材的该偏移位置开始返回,0表示从第一个素材 返回 * @param count 返回素材的数量,取值在1到20之间 + * @return the wx mp material news batch get result + * @throws WxErrorException the wx error exception */ WxMpMaterialNewsBatchGetResult materialNewsBatchGet(int offset, int count) throws WxErrorException; @@ -265,6 +286,8 @@ public interface WxMpMaterialService { * @param type 媒体类型, 请看{@link me.chanjar.weixin.common.api.WxConsts} * @param offset 从全部素材的该偏移位置开始返回,0表示从第一个素材 返回 * @param count 返回素材的数量,取值在1到20之间 + * @return the wx mp material file batch get result + * @throws WxErrorException the wx error exception */ WxMpMaterialFileBatchGetResult materialFileBatchGet(String type, int offset, int count) throws WxErrorException; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java index 87e4fcef5..4c95249b2 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java @@ -69,7 +69,7 @@ public interface WxPayService { /** * 发送post请求,得到响应字符串. - * + *

* 部分字段会包含敏感信息,所以在提交前需要在请求头中会包含"Wechatpay-Serial"信息 * * @param url 请求地址 @@ -82,7 +82,7 @@ public interface WxPayService { /** * 发送post请求,得到响应字符串. * - * @param url 请求地址 + * @param url 请求地址 * @param httpPost 请求信息 * @return 返回请求结果字符串 string * @throws WxPayException the wx pay exception @@ -102,7 +102,7 @@ public interface WxPayService { * 发送下载 V3请求,得到响应流. * * @param url 请求地址 - * @return 返回请求响应流 + * @return 返回请求响应流 input stream * @throws WxPayException the wx pay exception */ InputStream downloadV3(URI url) throws WxPayException; @@ -117,7 +117,7 @@ public interface WxPayService { /** * 获取红包接口服务类. * - * @return . + * @return . redpack service */ RedpackService getRedpackService(); @@ -138,13 +138,15 @@ public interface WxPayService { /** * 获取电商收付通服务类 - * @return + * + * @return the ecommerce service */ EcommerceService getEcommerceService(); /** - * 微信支付通用媒体服务类 - * @return + * 获取微信支付通用媒体服务类 + * + * @return the merchant media service */ MerchantMediaService getMerchantMediaService(); @@ -243,11 +245,12 @@ public interface WxPayService { /** * 调用统一下单接口,并组装生成支付所需参数对象. * + * @param the type parameter * @param specificTradeType 将使用的交易方式,不能为 null * @param request 统一下单请求参数,设定的 tradeType 及配置里的 tradeType 将被忽略,转而使用 specificTradeType * @return 返回 {@link WxPayConstants.TradeType.Specific} 指定的类 * @throws WxPayException the wx pay exception - * @see WxPayService#createOrder(WxPayUnifiedOrderRequest) + * @see WxPayService#createOrder(WxPayUnifiedOrderRequest) WxPayService#createOrder(WxPayUnifiedOrderRequest) */ T createOrder(WxPayConstants.TradeType.Specific specificTradeType, WxPayUnifiedOrderRequest request) throws WxPayException; @@ -423,7 +426,7 @@ public interface WxPayService { * 解析扫码支付回调通知 * 详见https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4 * - * @param xmlData the xml data + * @param xmlData the xml data * @param signType 签名类型 * @return the wx scan pay notify result * @throws WxPayException the wx pay exception @@ -518,7 +521,7 @@ public interface WxPayService { * @param billType 账单类型 bill_type ALL,返回当日所有订单信息,默认值,SUCCESS,返回当日成功支付的订单,REFUND,返回当日退款订单 * @param tarType 压缩账单 tar_type 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。 * @param deviceInfo 设备号 device_info 非必传参数,终端设备号 - * @return 对账内容原始字符串 + * @return 对账内容原始字符串 string * @throws WxPayException the wx pay exception */ String downloadRawBill(String billDate, String billType, String tarType, String deviceInfo) throws WxPayException; @@ -537,7 +540,7 @@ public interface WxPayService { * * * @param request 下载对账单请求 - * @return 对账内容原始字符串 + * @return 对账内容原始字符串 string * @throws WxPayException the wx pay exception */ String downloadRawBill(WxPayDownloadBillRequest request) throws WxPayException; @@ -684,7 +687,7 @@ public interface WxPayService { * @param longUrl 需要被压缩的网址 * @return the string * @throws WxPayException the wx pay exception - * @see WxPayService#shorturl(WxPayShorturlRequest) WxPayService#shorturl(WxPayShorturlRequest) + * @see WxPayService#shorturl(WxPayShorturlRequest) WxPayService#shorturl(WxPayShorturlRequest)WxPayService#shorturl(WxPayShorturlRequest) */ String shorturl(String longUrl) throws WxPayException; @@ -712,7 +715,7 @@ public interface WxPayService { * @param authCode 授权码 * @return openid string * @throws WxPayException the wx pay exception - * @see WxPayService#authcode2Openid(WxPayAuthcode2OpenidRequest) WxPayService#authcode2Openid(WxPayAuthcode2OpenidRequest) + * @see WxPayService#authcode2Openid(WxPayAuthcode2OpenidRequest) WxPayService#authcode2Openid(WxPayAuthcode2OpenidRequest)WxPayService#authcode2Openid(WxPayAuthcode2OpenidRequest) */ String authcode2Openid(String authCode) throws WxPayException; @@ -860,7 +863,7 @@ public interface WxPayService { * * @param feeType 外币币种 * @param date 日期,格式为yyyyMMdd,如2009年12月25日表示为20091225。时区为GMT+8 beijing - * @return . + * @return . wx pay query exchange rate result * @throws WxPayException . */ WxPayQueryExchangeRateResult queryExchangeRate(String feeType, String date) throws WxPayException; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java index 476fd3b9e..4c14cda09 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java @@ -50,25 +50,18 @@ import static com.github.binarywang.wxpay.constant.WxPayConstants.TarType; public abstract class BaseWxPayServiceImpl implements WxPayService { private static final String TOTAL_FUND_COUNT = "资金流水总笔数"; - /** - * The Log. - */ + final Logger log = LoggerFactory.getLogger(this.getClass()); - /** - * The constant wxApiData. - */ + static ThreadLocal wxApiData = new ThreadLocal<>(); private EntPayService entPayService = new EntPayServiceImpl(this); - private ProfitSharingService profitSharingService = new ProfitSharingServiceImpl(this); - private RedpackService redpackService = new RedpackServiceImpl(this); - private PayScoreService payScoreService = new PayScoreServiceImpl(this); - private EcommerceService ecommerceService = new EcommerceServiceImpl(this); - private MerchantMediaService merchantMediaService =new MerchantMediaServiceImpl(this); + private final ProfitSharingService profitSharingService = new ProfitSharingServiceImpl(this); + private final RedpackService redpackService = new RedpackServiceImpl(this); + private final PayScoreService payScoreService = new PayScoreServiceImpl(this); + private final EcommerceService ecommerceService = new EcommerceServiceImpl(this); + private final MerchantMediaService merchantMediaService = new MerchantMediaServiceImpl(this); - /** - * The Config. - */ protected WxPayConfig config; @Override @@ -98,7 +91,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { @Override public MerchantMediaService getMerchantMediaService() { - return merchantMediaService; + return this.merchantMediaService; } @Override diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantMediaServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantMediaServiceImpl.java index 811d61f6b..7952513f5 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantMediaServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/MerchantMediaServiceImpl.java @@ -19,7 +19,6 @@ import java.net.URI; @Slf4j @RequiredArgsConstructor public class MerchantMediaServiceImpl implements MerchantMediaService { - private final WxPayService payService; @Override