From 1f3f133772e3cb1b2a2023373ce366386323bd41 Mon Sep 17 00:00:00 2001 From: 0katekate0 <32161300+0katekate0@users.noreply.github.com> Date: Tue, 14 Jun 2022 09:48:27 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20#2692=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=A2=9E=E5=8A=A0=E5=AE=B6=E6=A0=A1?= =?UTF-8?q?=E5=BA=94=E7=94=A8-=E7=8F=AD=E7=BA=A7=E6=94=B6=E6=AC=BE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...MediaInputStreamUploadRequestExecutor.java | 2 +- .../weixin/cp/api/WxCpSchoolService.java | 25 +++++++ .../cp/api/impl/WxCpSchoolServiceImpl.java | 21 ++++++ .../cp/bean/school/WxCpPaymentResult.java | 65 +++++++++++++++++++ .../weixin/cp/bean/school/WxCpTrade.java | 39 +++++++++++ .../weixin/cp/constant/WxCpApiPathConsts.java | 3 + .../chanjar/weixin/cp/api/WxCpSchoolTest.java | 30 +++++++++ 7 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/WxCpPaymentResult.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/WxCpTrade.java diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMediaInputStreamUploadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMediaInputStreamUploadRequestExecutor.java index d0591aee9..479844e42 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMediaInputStreamUploadRequestExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMediaInputStreamUploadRequestExecutor.java @@ -4,7 +4,7 @@ import jodd.http.HttpConnectionProvider; import jodd.http.HttpRequest; import jodd.http.HttpResponse; import jodd.http.ProxyInfo; -import jodd.http.up.ByteArrayUploadable; +import jodd.http.upload.ByteArrayUploadable; import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; import me.chanjar.weixin.common.enums.WxType; import me.chanjar.weixin.common.error.WxError; diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolService.java index 2e97bf075..1a4366491 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpSchoolService.java @@ -2,7 +2,9 @@ package me.chanjar.weixin.cp.api; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.bean.school.WxCpCustomizeHealthInfo; +import me.chanjar.weixin.cp.bean.school.WxCpPaymentResult; import me.chanjar.weixin.cp.bean.school.WxCpResultList; +import me.chanjar.weixin.cp.bean.school.WxCpTrade; import javax.validation.constraints.NotNull; import java.util.List; @@ -57,4 +59,27 @@ public interface WxCpSchoolService { */ WxCpResultList getHealthQrCode(@NotNull List userIds, @NotNull Integer type) throws WxErrorException; + /** + * 获取学生付款结果 + * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/school/get_payment_result?access_token=ACCESS_TOKEN + * + * @param paymentId + * @return + * @throws WxErrorException + */ + WxCpPaymentResult getPaymentResult(@NotNull String paymentId) throws WxErrorException; + + /** + * 获取订单详情 + * 请求方式: POST(HTTPS) + * 请求地址: https://qyapi.weixin.qq.com/cgi-bin/school/get_trade?access_token=ACCESS_TOKEN + * + * @param paymentId + * @param tradeNo + * @return + * @throws WxErrorException + */ + WxCpTrade getTrade(@NotNull String paymentId, @NotNull String tradeNo) throws WxErrorException; + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolServiceImpl.java index 329c92406..023ee6056 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpSchoolServiceImpl.java @@ -7,7 +7,9 @@ import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.api.WxCpSchoolService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.school.WxCpCustomizeHealthInfo; +import me.chanjar.weixin.cp.bean.school.WxCpPaymentResult; import me.chanjar.weixin.cp.bean.school.WxCpResultList; +import me.chanjar.weixin.cp.bean.school.WxCpTrade; import javax.validation.constraints.NotNull; import java.util.List; @@ -64,4 +66,23 @@ public class WxCpSchoolServiceImpl implements WxCpSchoolService { return WxCpResultList.fromJson(responseContent); } + @Override + public WxCpPaymentResult getPaymentResult(@NotNull String paymentId) throws WxErrorException { + String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_PAYMENT_RESULT); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("payment_id", paymentId); + String responseContent = this.cpService.post(apiUrl, jsonObject.toString()); + return WxCpPaymentResult.fromJson(responseContent); + } + + @Override + public WxCpTrade getTrade(@NotNull String paymentId, @NotNull String tradeNo) throws WxErrorException { + String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(GET_TRADE); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("payment_id", paymentId); + jsonObject.addProperty("trade_no", tradeNo); + String responseContent = this.cpService.post(apiUrl, jsonObject.toString()); + return WxCpTrade.fromJson(responseContent); + } + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/WxCpPaymentResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/WxCpPaymentResult.java new file mode 100644 index 000000000..e707ba918 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/WxCpPaymentResult.java @@ -0,0 +1,65 @@ +package me.chanjar.weixin.cp.bean.school; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import me.chanjar.weixin.cp.bean.WxCpBaseResp; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; +import java.util.List; + +/** + * 获取学生付款结果. + * + * @author Wang_Wong + */ +@Data +public class WxCpPaymentResult extends WxCpBaseResp implements Serializable { + private static final long serialVersionUID = -5028321625142879581L; + + @SerializedName("project_name") + private String projectName; + + @SerializedName("amount") + private Integer amount; + + @SerializedName("payment_result") + private List paymentResult; + + @Setter + @Getter + public static class PaymentResult{ + + @SerializedName("student_userid") + private String studentUserId; + + @SerializedName("trade_no") + private String tradeNo; + + @SerializedName("payer_parent_userid") + private String payerParentUserId; + + @SerializedName("trade_state") + private Integer tradeState; + + public static PaymentResult fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, PaymentResult.class); + } + + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + + } + + public static WxCpPaymentResult fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpPaymentResult.class); + } + + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/WxCpTrade.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/WxCpTrade.java new file mode 100644 index 000000000..8283174b2 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/school/WxCpTrade.java @@ -0,0 +1,39 @@ +package me.chanjar.weixin.cp.bean.school; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.cp.bean.WxCpBaseResp; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.io.Serializable; + +/** + * 获取订单详情. + * + * @author Wang_Wong + */ +@Data +public class WxCpTrade extends WxCpBaseResp implements Serializable { + private static final long serialVersionUID = -5028321625142879581L; + + /** + * 微信交易单号 + */ + @SerializedName("transaction_id") + private String transactionId; + + /** + * 交易时间 + */ + @SerializedName("pay_time") + private Long payTime; + + public static WxCpTrade fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpTrade.class); + } + + public String toJson() { + return WxCpGsonBuilder.create().toJson(this); + } + +} 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 8ea37c36a..d2b5ccaaf 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 @@ -182,6 +182,9 @@ public interface WxCpApiPathConsts { String GET_TEACHER_CUSTOMIZE_HEALTH_INFO = "/cgi-bin/school/user/get_teacher_customize_health_info"; String GET_STUDENT_CUSTOMIZE_HEALTH_INFO = "/cgi-bin/school/user/get_student_customize_health_info"; String GET_HEALTH_QRCODE = "/cgi-bin/school/user/get_health_qrcode"; + + String GET_PAYMENT_RESULT = "/cgi-bin/school/get_payment_result"; + String GET_TRADE = "/cgi-bin/school/get_trade"; } interface Living { diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolTest.java index ddb1d47c0..5f2896d7a 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/WxCpSchoolTest.java @@ -5,7 +5,9 @@ import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl; import me.chanjar.weixin.cp.bean.school.WxCpCustomizeHealthInfo; +import me.chanjar.weixin.cp.bean.school.WxCpPaymentResult; import me.chanjar.weixin.cp.bean.school.WxCpResultList; +import me.chanjar.weixin.cp.bean.school.WxCpTrade; import me.chanjar.weixin.cp.config.WxCpConfigStorage; import me.chanjar.weixin.cp.demo.WxCpDemoInMemoryConfigStorage; import org.testng.annotations.Test; @@ -44,6 +46,34 @@ public class WxCpSchoolTest { String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + /** + * 获取学生付款结果 + * https://developer.work.weixin.qq.com/document/path/94553 + */ + String paymentResultStr = "{\"errcode\":0,\"errmsg\":\"ok\",\"project_name\":\"学费\",\"amount\":998,\"payment_result\":[{\"student_userid\":\"xxxx\",\"trade_state\":1,\"trade_no\":\"xxxxx\",\"payer_parent_userid\":\"zhangshan\"}]}"; + WxCpPaymentResult cpPaymentResult = WxCpPaymentResult.fromJson(paymentResultStr); + log.info("cpPaymentResult:{}", cpPaymentResult.toJson()); + + WxCpPaymentResult paymentResult = cpService.getSchoolService().getPaymentResult(""); + log.info("paymentResult:{}", paymentResult.toJson()); + + /** + * 获取订单详情 + * https://developer.work.weixin.qq.com/document/path/94554 + */ + String tradeStr = "{\n" + + "\t\"errcode\":0,\n" + + "\t\"errmsg\":\"ok\",\n" + + "\t\"transaction_id\":\"xxxxx\", \t \n" + + "\t\"pay_time\":12345\n" + + "}"; + WxCpTrade wxCpTrade = WxCpTrade.fromJson(tradeStr); + log.info("wxCpTrade:{}", wxCpTrade.toJson()); + + WxCpTrade trade = cpService.getSchoolService().getTrade("", ""); + log.info("trade:{}", trade.toJson()); + + /** * 获取老师健康信息 * https://developer.work.weixin.qq.com/document/path/93744