From 3512930237e5d418fa4a46283322ce95b0aa0ac5 Mon Sep 17 00:00:00 2001 From: S Date: Fri, 20 Sep 2019 11:18:50 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20#1213=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=BE=AE=E4=BF=A1=E5=8D=A1=E5=88=B8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/common/error/WxMpErrorMsgEnum.java | 12 +- .../weixin/mp/api/WxMpCardService.java | 76 ++++++++++++ .../weixin/mp/api/WxMpMassMessageService.java | 34 ++++++ .../mp/api/impl/WxMpCardServiceImpl.java | 114 +++++++++++++++++- .../api/impl/WxMpMassMessageServiceImpl.java | 27 +++++ .../card/WxMpCardCodeCheckcodeResult.java | 38 ++++++ .../card/WxMpCardCodeDepositCountResult.java | 34 ++++++ .../bean/card/WxMpCardCodeDepositResult.java | 46 +++++++ .../card/WxMpCardMpnewsGethtmlResult.java | 33 +++++ .../mp/bean/result/WxMpMassGetResult.java | 34 ++++++ .../bean/result/WxMpMassSpeedGetResult.java | 38 ++++++ .../weixin/mp/bean/result/WxMpResult.java | 33 +++++ .../chanjar/weixin/mp/enums/WxMpApiUrl.java | 63 +++++++++- 13 files changed, 576 insertions(+), 6 deletions(-) create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeCheckcodeResult.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeDepositCountResult.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeDepositResult.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardMpnewsGethtmlResult.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassGetResult.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassSpeedGetResult.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpResult.java diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java index 782e471e3..c75f75966 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/error/WxMpErrorMsgEnum.java @@ -632,7 +632,17 @@ public enum WxMpErrorMsgEnum { /** * 查询起始值 begin 不合法. */ - CODE_9001036(9001036, "查询起始值 begin 不合法"); + CODE_9001036(9001036, "查询起始值 begin 不合法"), + + /** + * 设置的 speed 参数不在0到4的范围内 + */ + CODE_45083(45083, "设置的 speed 参数不在0到4的范围内"), + + /** + * 没有设置 speed 参数 + */ + CODE_45084(45084, "没有设置 speed 参数"); private int code; private String msg; 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 903fd94d9..2202f5568 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 @@ -4,6 +4,8 @@ import me.chanjar.weixin.common.bean.WxCardApiSignature; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.bean.card.*; +import java.util.List; + /** * 卡券相关接口. * @@ -207,4 +209,78 @@ public interface WxMpCardService { */ WxMpCardDeleteResult deleteCard(String cardId) throws WxErrorException; + + /** + * 导入自定义code(仅对自定义code商户) + * + * @param cardId 卡券id + * @param codeList 需导入微信卡券后台的自定义code,上限为100个。 + */ + WxMpCardCodeDepositResult cardCodeDeposit(String cardId, List codeList) throws WxErrorException; + + /** + * 查询导入code数目接口 + * + * @param cardId 卡券id + */ + WxMpCardCodeDepositCountResult cardCodeDepositCount(String cardId) throws WxErrorException; + + + /** + * 核查code接口 + * + * @param cardId 卡券id + * @param codeList 已经微信卡券后台的自定义code,上限为100个 + */ + WxMpCardCodeCheckcodeResult cardCodeCheckcode(String cardId, List codeList) throws WxErrorException; + + /** + * 图文消息群发卡券获取内嵌html + * + * @param cardId 卡券id + */ + WxMpCardMpnewsGethtmlResult cardMpnewsGethtml(String cardId) throws WxErrorException; + + + /** + * 修改库存接口 + * https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Managing_Coupons_Vouchers_and_Cards.html#5 + * + * @param cardId 卡券ID + * @param changeValue 库存变更值,负值为减少库存 + */ + void cardModifyStock(String cardId, Integer changeValue) throws WxErrorException; + + + /** + * 更改Code接口 + * https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Managing_Coupons_Vouchers_and_Cards.html#6 + * + * @param cardId 卡券ID + * @param oldCode 需变更的Code码 + * @param newCode 变更后的有效Code码 + */ + void cardCodeUpdate(String cardId, String oldCode, String newCode) throws WxErrorException; + + /** + * 设置买单接口 + * https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Create_a_Coupon_Voucher_or_Card.html#12 + * + * @param cardId 卡券ID + * @param isOpen 是否开启买单功能,填true/false + */ + void cardPaycellSet(String cardId, Boolean isOpen) throws WxErrorException; + + /** + * 设置自助核销 + * https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Create_a_Coupon_Voucher_or_Card.html#14 + * + * @param cardId 卡券ID + * @param isOpen 是否开启自助核销功能 + * @param needVerifyCod 用户核销时是否需要输入验证码, 填true/false, 默认为false + * @param needRemarkAmount 用户核销时是否需要备注核销金额, 填true/false, 默认为false + */ + void cardSelfConsumeCellSet(String cardId, Boolean isOpen, + Boolean needVerifyCod, Boolean needRemarkAmount) throws WxErrorException; + } 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 c986e53e3..df5d03e0c 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 @@ -2,7 +2,9 @@ package me.chanjar.weixin.mp.api; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.bean.*; +import me.chanjar.weixin.mp.bean.result.WxMpMassGetResult; import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; +import me.chanjar.weixin.mp.bean.result.WxMpMassSpeedGetResult; import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; /** @@ -92,4 +94,36 @@ public interface WxMpMassMessageService { */ void delete(Long msgId, Integer articleIndex) throws WxErrorException; + + /** + * 获取群发速度 + * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Batch_Sends_and_Originality_Checks.html#9 + */ + WxMpMassSpeedGetResult messageMassSpeedGet() throws WxErrorException; + + + /** + * 设置群发速度 + * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Batch_Sends_and_Originality_Checks.html#9 + * + * @param speed 群发速度的级别,是一个0到4的整数,数字越大表示群发速度越慢。 + * speed realspeed + * 0 80w/分钟 + * 1 60w/分钟 + * 2 45w/分钟 + * 3 30w/分钟 + * 4 10w/分钟 + */ + void messageMassSpeedSet(Integer speed) throws WxErrorException; + + + /** + * 查询群发消息发送状态【订阅号与服务号认证后均可用】 + * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Batch_Sends_and_Originality_Checks.html#%E6%9F%A5%E8%AF%A2%E7%BE%A4%E5%8F%91%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E7%8A%B6%E6%80%81%E3%80%90%E8%AE%A2%E9%98%85%E5%8F%B7%E4%B8%8E%E6%9C%8D%E5%8A%A1%E5%8F%B7%E8%AE%A4%E8%AF%81%E5%90%8E%E5%9D%87%E5%8F%AF%E7%94%A8%E3%80%91 + * + * @param msgId 群发消息后返回的消息id + * @return 消息发送后的状态,SEND_SUCCESS表示发送成功,SENDING表示发送中,SEND_FAIL表示发送失败,DELETE表示已删除 + */ + WxMpMassGetResult messageMassGet(Long msgId) throws WxErrorException; + } 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 2854ec16b..ddcab47a0 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 @@ -9,9 +9,11 @@ import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.RandomUtils; import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; 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.bean.result.WxMpResult; import me.chanjar.weixin.mp.enums.TicketType; import me.chanjar.weixin.mp.enums.WxMpApiUrl; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; @@ -19,6 +21,7 @@ import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import java.util.Arrays; +import java.util.List; import java.util.concurrent.locks.Lock; /** @@ -241,12 +244,117 @@ public class WxMpCardServiceImpl implements WxMpCardService { @Override public WxMpCardDeleteResult deleteCard(String cardId) throws WxErrorException { - if (StringUtils.isEmpty(cardId)) { - throw new WxErrorException(WxError.builder().errorCode(41012).errorMsg("cardId不能为空").build()); - } + checkCardId(cardId); JsonObject param = new JsonObject(); param.addProperty("card_id", cardId); String response = this.wxMpService.post(WxMpApiUrl.Card.CARD_DELETE, param.toString()); return WxMpCardDeleteResult.fromJson(response); } + + + @Override + public WxMpCardCodeDepositResult cardCodeDeposit(String cardId, List codeList) throws WxErrorException { + checkCardId(cardId); + if (codeList.size() == 0 || codeList.size() > 100) { + throw new WxErrorException(WxError.builder().errorCode(40109).errorMsg("code数量为0或者code数量超过100个").build()); + } + JsonObject param = new JsonObject(); + param.addProperty("card_id", cardId); + param.add("code", + WxGsonBuilder.create().toJsonTree(codeList, new TypeToken>() { + }.getType()).getAsJsonArray()); + String response = this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_DEPOSIT, param.toString()); + return WxMpCardCodeDepositResult.fromJson(response); + } + + + @Override + public WxMpCardCodeDepositCountResult cardCodeDepositCount(String cardId) throws WxErrorException { + checkCardId(cardId); + JsonObject param = new JsonObject(); + param.addProperty("card_id", cardId); + String response = this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_DEPOSIT_COUNT, param.toString()); + return WxMpCardCodeDepositCountResult.fromJson(response); + } + + + @Override + public WxMpCardCodeCheckcodeResult cardCodeCheckcode(String cardId, List codeList) throws WxErrorException { + checkCardId(cardId); + if (codeList.size() == 0 || codeList.size() > 100) { + throw new WxErrorException(WxError.builder().errorCode(40109).errorMsg("code数量为0或者code数量超过100个").build()); + } + JsonObject param = new JsonObject(); + param.addProperty("card_id", cardId); + param.add("code", + WxGsonBuilder.create().toJsonTree(codeList, new TypeToken>() { + }.getType()).getAsJsonArray()); + String response = this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_CHECKCODE, param.toString()); + return WxMpCardCodeCheckcodeResult.fromJson(response); + } + + + @Override + public WxMpCardMpnewsGethtmlResult cardMpnewsGethtml(String cardId) throws WxErrorException { + checkCardId(cardId); + JsonObject param = new JsonObject(); + param.addProperty("card_id", cardId); + String response = this.wxMpService.post(WxMpApiUrl.Card.CARD_MPNEWS_GETHTML, param.toString()); + return WxMpCardMpnewsGethtmlResult.fromJson(response); + } + + + @Override + public void cardModifyStock(String cardId, Integer changeValue) throws WxErrorException { + checkCardId(cardId); + JsonObject param = new JsonObject(); + param.addProperty("card_id", cardId); + if (changeValue > 0) { + param.addProperty("increase_stock_value", changeValue); + } else { + param.addProperty("reduce_stock_value", Math.abs(changeValue)); + } + this.wxMpService.post(WxMpApiUrl.Card.CARD_MODIFY_STOCK, param.toString()); + } + + + @Override + public void cardCodeUpdate(String cardId, String oldCode, String newCode) throws WxErrorException { + checkCardId(cardId); + JsonObject param = new JsonObject(); + param.addProperty("card_id", cardId); + param.addProperty("code", oldCode); + param.addProperty("new_code", newCode); + this.wxMpService.post(WxMpApiUrl.Card.CARD_CODE_UPDATE, param.toString()); + } + + + @Override + public void cardPaycellSet(String cardId, Boolean isOpen) throws WxErrorException { + checkCardId(cardId); + JsonObject param = new JsonObject(); + param.addProperty("card_id", cardId); + param.addProperty("is_open", isOpen); + this.wxMpService.post(WxMpApiUrl.Card.CARD_PAYCELL_SET, param.toString()); + } + + + @Override + public void cardSelfConsumeCellSet(String cardId, Boolean isOpen, + Boolean needVerifyCod, Boolean needRemarkAmount) throws WxErrorException { + checkCardId(cardId); + JsonObject param = new JsonObject(); + param.addProperty("card_id", cardId); + param.addProperty("is_open", isOpen); + param.addProperty("need_verify_cod", needVerifyCod); + param.addProperty("need_remark_amount", needRemarkAmount); + this.wxMpService.post(WxMpApiUrl.Card.CARD_SELF_CONSUME_CELL_SET, param.toString()); + } + + + private void checkCardId(String cardId) throws WxErrorException { + if (StringUtils.isEmpty(cardId)) { + throw new WxErrorException(WxError.builder().errorCode(41012).errorMsg("cardId不能为空").build()); + } + } } 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 caca3cd05..dcae606da 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 @@ -7,7 +7,9 @@ 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.WxMpMassGetResult; import me.chanjar.weixin.mp.bean.result.WxMpMassSendResult; +import me.chanjar.weixin.mp.bean.result.WxMpMassSpeedGetResult; import me.chanjar.weixin.mp.bean.result.WxMpMassUploadResult; import me.chanjar.weixin.mp.enums.WxMpApiUrl; @@ -64,4 +66,29 @@ public class WxMpMassMessageServiceImpl implements WxMpMassMessageService { this.wxMpService.post(MassMessage.MESSAGE_MASS_DELETE_URL, jsonObject.toString()); } + + @Override + public WxMpMassSpeedGetResult messageMassSpeedGet() throws WxErrorException { + JsonObject jsonObject = new JsonObject(); + String response = this.wxMpService.post(MassMessage.MESSAGE_MASS_SPEED_GET_URL, jsonObject.toString()); + return WxMpMassSpeedGetResult.fromJson(response); + } + + + @Override + public void messageMassSpeedSet(Integer speed) throws WxErrorException { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("speed", speed); + this.wxMpService.post(MassMessage.MESSAGE_MASS_SPEED_SET_URL, jsonObject.toString()); + } + + + @Override + public WxMpMassGetResult messageMassGet(Long msgId) throws WxErrorException { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("msg_id", msgId); + String response = this.wxMpService.post(MassMessage.MESSAGE_MASS_GET_URL, jsonObject.toString()); + return WxMpMassGetResult.fromJson(response); + } + } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeCheckcodeResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeCheckcodeResult.java new file mode 100644 index 000000000..84768c091 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeCheckcodeResult.java @@ -0,0 +1,38 @@ +package me.chanjar.weixin.mp.bean.card; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.mp.bean.result.WxMpResult; +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; + +import java.io.Serializable; +import java.util.List; + + +@Data +public class WxMpCardCodeCheckcodeResult extends WxMpResult implements Serializable { + + private static final long serialVersionUID = -5128692403997016750L; + + /** + * 已经成功存入的code数目 + */ + @SerializedName("exist_code") + private List existCode; + + @SerializedName("not_exist_code") + private List notExistCode; + + + public static WxMpCardCodeCheckcodeResult fromJson(String json) { + return WxMpGsonBuilder.create().fromJson(json, WxMpCardCodeCheckcodeResult.class); + } + + + @Override + public String toString() { + return WxMpGsonBuilder.create().toJson(this); + } + +} + diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeDepositCountResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeDepositCountResult.java new file mode 100644 index 000000000..a7a114bf5 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeDepositCountResult.java @@ -0,0 +1,34 @@ +package me.chanjar.weixin.mp.bean.card; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.mp.bean.result.WxMpResult; +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; + +import java.io.Serializable; + + +@Data +public class WxMpCardCodeDepositCountResult extends WxMpResult implements Serializable { + + private static final long serialVersionUID = -6707587956061215868L; + + /** + * 已经成功存入的code数目 + */ + @SerializedName("count") + private Integer count; + + + public static WxMpCardCodeDepositCountResult fromJson(String json) { + return WxMpGsonBuilder.create().fromJson(json, WxMpCardCodeDepositCountResult.class); + } + + + @Override + public String toString() { + return WxMpGsonBuilder.create().toJson(this); + } + +} + diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeDepositResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeDepositResult.java new file mode 100644 index 000000000..aeb1246b8 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCodeDepositResult.java @@ -0,0 +1,46 @@ +package me.chanjar.weixin.mp.bean.card; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.mp.bean.result.WxMpResult; +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; + +import java.io.Serializable; + + +@Data +public class WxMpCardCodeDepositResult extends WxMpResult implements Serializable { + + private static final long serialVersionUID = 2955588617765355420L; + + /** + * 成功个数 + */ + @SerializedName("succ_code") + private Integer succCode; + + /** + * 重复导入的code会自动被过滤 + */ + @SerializedName("duplicate_code") + private Integer duplicateCode; + + /** + * 失败个数 + */ + @SerializedName("fail_code") + private Integer failCode; + + + public static WxMpCardCodeDepositResult fromJson(String json) { + return WxMpGsonBuilder.create().fromJson(json, WxMpCardCodeDepositResult.class); + } + + + @Override + public String toString() { + return WxMpGsonBuilder.create().toJson(this); + } + +} + diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardMpnewsGethtmlResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardMpnewsGethtmlResult.java new file mode 100644 index 000000000..d55950666 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardMpnewsGethtmlResult.java @@ -0,0 +1,33 @@ +package me.chanjar.weixin.mp.bean.card; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.mp.bean.result.WxMpResult; +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; + +import java.io.Serializable; +import java.util.List; + + +@Data +public class WxMpCardMpnewsGethtmlResult extends WxMpResult implements Serializable { + + private static final long serialVersionUID = 6435268886823478711L; + + /** + * 返回一段html代码,可以直接嵌入到图文消息的正文里。即可以把这段代码嵌入到 上传图文消息素材接口 中的content字段里 + */ + @SerializedName("content") + private String content; + + public static WxMpCardMpnewsGethtmlResult fromJson(String json) { + return WxMpGsonBuilder.create().fromJson(json, WxMpCardMpnewsGethtmlResult.class); + } + + @Override + public String toString() { + return WxMpGsonBuilder.create().toJson(this); + } + +} + diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassGetResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassGetResult.java new file mode 100644 index 000000000..c1f43feb0 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassGetResult.java @@ -0,0 +1,34 @@ +package me.chanjar.weixin.mp.bean.result; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; + +import java.io.Serializable; + +/** + *
+ * 查询群发消息发送状态【订阅号与服务号认证后均可用】
+ * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Batch_Sends_and_Originality_Checks.html#%E6%9F%A5%E8%AF%A2%E7%BE%A4%E5%8F%91%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E7%8A%B6%E6%80%81%E3%80%90%E8%AE%A2%E9%98%85%E5%8F%B7%E4%B8%8E%E6%9C%8D%E5%8A%A1%E5%8F%B7%E8%AE%A4%E8%AF%81%E5%90%8E%E5%9D%87%E5%8F%AF%E7%94%A8%E3%80%91
+ */
+@Data
+public class WxMpMassGetResult extends WxMpResult implements Serializable {
+
+  private static final long serialVersionUID = -2909694117357278557L;
+
+  @SerializedName("msg_id")
+  private Long msgId;
+
+  @SerializedName("msg_status")
+  private String msgstatus;
+
+  public static WxMpMassGetResult fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(json, WxMpMassGetResult.class);
+  }
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+
+}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassSpeedGetResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassSpeedGetResult.java
new file mode 100644
index 000000000..ef53b5beb
--- /dev/null
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpMassSpeedGetResult.java
@@ -0,0 +1,38 @@
+package me.chanjar.weixin.mp.bean.result;
+
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 
+ * 获取群发速度
+ * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Batch_Sends_and_Originality_Checks.html#9
+ * speed	realspeed
+ * 0	80w/分钟
+ * 1	60w/分钟
+ * 2	45w/分钟
+ * 3	30w/分钟
+ * 4	10w/分钟
+ * 
+ */ +@Data +public class WxMpMassSpeedGetResult implements Serializable { + + private static final long serialVersionUID = -6478157575168068334L; + + private Integer speed; + + private Integer realspeed; + + public static WxMpMassSpeedGetResult fromJson(String json) { + return WxMpGsonBuilder.create().fromJson(json, WxMpMassSpeedGetResult.class); + } + + @Override + public String toString() { + return WxMpGsonBuilder.create().toJson(this); + } + +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpResult.java new file mode 100644 index 000000000..9be4b7e8c --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpResult.java @@ -0,0 +1,33 @@ +package me.chanjar.weixin.mp.bean.result; + +import lombok.Data; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; + +/** + * 基础的微信公众号平台请求结果. + */ +@Data +public class WxMpResult implements Serializable { + private static final long serialVersionUID = 2101652152604850904L; + protected String errcode; + protected String errmsg; + + /** + * 请求是否成功. + */ + public boolean isSuccess() { + return StringUtils.equalsIgnoreCase(errcode, "0"); + } + + public static WxMpResult fromJson(String json) { + return WxGsonBuilder.create().fromJson(json, WxMpResult.class); + } + + @Override + public String toString() { + return WxGsonBuilder.create().toJson(this); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java index d85c74f44..5a10dea48 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java @@ -506,7 +506,48 @@ public interface WxMpApiUrl { /** * 卡券删除. */ - CARD_DELETE(API_DEFAULT_HOST_URL, "/card/delete"); + CARD_DELETE(API_DEFAULT_HOST_URL, "/card/delete"), + + /** + * 导入code接口. + */ + CARD_CODE_DEPOSIT(API_DEFAULT_HOST_URL, "/card/code/deposit"), + + /** + * 查询导入code数目接口 + */ + CARD_CODE_DEPOSIT_COUNT(API_DEFAULT_HOST_URL, "/card/code/getdepositcount"), + + /** + * 核查code接口 + */ + CARD_CODE_CHECKCODE(API_DEFAULT_HOST_URL, "/card/code/checkcode"), + + /** + * 图文消息群发卡券 + */ + CARD_MPNEWS_GETHTML(API_DEFAULT_HOST_URL, "/card/mpnews/gethtml"), + + /** + * 修改库存接口 + */ + CARD_MODIFY_STOCK(API_DEFAULT_HOST_URL, "/card/modifystock"), + + /** + * 更改Code接口 + */ + CARD_CODE_UPDATE(API_DEFAULT_HOST_URL, "/card/code/update"), + + /** + * 设置买单接口 + */ + CARD_PAYCELL_SET(API_DEFAULT_HOST_URL, "/card/paycell/set"), + + /** + * 设置自助核销接口 + */ + CARD_SELF_CONSUME_CELL_SET(API_DEFAULT_HOST_URL, "/card/selfconsumecell/set"), + ; private String prefix; private String path; @@ -694,7 +735,25 @@ public interface WxMpApiUrl { /** * 删除群发接口. */ - MESSAGE_MASS_DELETE_URL(API_DEFAULT_HOST_URL, "/cgi-bin/message/mass/delete"); + MESSAGE_MASS_DELETE_URL(API_DEFAULT_HOST_URL, "/cgi-bin/message/mass/delete"), + + + /** + * 获取群发速度. + */ + MESSAGE_MASS_SPEED_GET_URL(API_DEFAULT_HOST_URL, "/cgi-bin/message/mass/speed/get"), + + + /** + * 设置群发速度. + */ + MESSAGE_MASS_SPEED_SET_URL(API_DEFAULT_HOST_URL, "/cgi-bin/message/mass/speed/set"), + + + /** + * 查询群发消息发送状态【订阅号与服务号认证后均可用】 + */ + MESSAGE_MASS_GET_URL(API_DEFAULT_HOST_URL, "/cgi-bin/message/mass/get"); private String prefix; private String path;