From 3bb6250385acd2a5b5757e6527f1368da939f4a0 Mon Sep 17 00:00:00 2001 From: Kit Date: Fri, 22 Nov 2019 16:10:56 +0800 Subject: [PATCH 01/21] =?UTF-8?q?=E5=85=BC=E5=AE=B9JDK9+=E7=9A=84=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E8=BF=9B=E8=A1=8Cmaven=E7=BC=96=E8=AF=91=E6=89=93?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weixin4j-base/pom.xml | 7 +++++++ weixin4j-pay/pom.xml | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/weixin4j-base/pom.xml b/weixin4j-base/pom.xml index 4d1bfdcc..74987345 100644 --- a/weixin4j-base/pom.xml +++ b/weixin4j-base/pom.xml @@ -76,5 +76,12 @@ bcprov-jdk16 1.46 + + + javax.xml.bind + jaxb-api + 2.2.11 + provided + \ No newline at end of file diff --git a/weixin4j-pay/pom.xml b/weixin4j-pay/pom.xml index aa887ef8..a3158ed4 100644 --- a/weixin4j-pay/pom.xml +++ b/weixin4j-pay/pom.xml @@ -39,6 +39,13 @@ weixin4j-base 1.9.0-SNAPSHOT + + + javax.xml.bind + jaxb-api + 2.2.11 + provided + junit junit From 57811ef3d506a1247564e8196c9f3906eabf59c8 Mon Sep 17 00:00:00 2001 From: Kit Date: Fri, 22 Nov 2019 16:14:44 +0800 Subject: [PATCH 02/21] fix fastjson serialize problem --- .../pay/payment/face/PayfaceAuthinfo.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/face/PayfaceAuthinfo.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/face/PayfaceAuthinfo.java index 2fdd46bf..b78c199f 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/face/PayfaceAuthinfo.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/face/PayfaceAuthinfo.java @@ -34,6 +34,22 @@ public class PayfaceAuthinfo extends MerchantResult { */ private String authinfo; + public int getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(int expiresIn) { + this.expiresIn = expiresIn; + } + + public String getAuthinfo() { + return authinfo; + } + + public void setAuthinfo(String authinfo) { + this.authinfo = authinfo; + } + @Override public String toString() { return "PayfaceAuthinfo{" + From e8ac8f594f6489cef91468c54b6dc94ebe787e25 Mon Sep 17 00:00:00 2001 From: Niko <1377382065@qq.com> Date: Mon, 6 Jan 2020 18:08:50 +0800 Subject: [PATCH 03/21] add SubscribeMessageApi --- .../foxinmy/weixin4j/wxa/WeixinAppFacade.java | 12 +++ .../weixin4j/wxa/api/SubscribeMessageApi.java | 42 ++++++++ .../wxa/api/SubscribeMessageParameter.java | 101 ++++++++++++++++++ .../model/subscribemessage/ParameterType.java | 90 ++++++++++++++++ .../model/subscribemessage/package-info.java | 6 ++ .../weixin4j/wxa/api/weixin.properties | 2 + 6 files changed, 253 insertions(+) create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/ParameterType.java create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/package-info.java diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinAppFacade.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinAppFacade.java index 70984cb2..aae4a24f 100644 --- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinAppFacade.java +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/WeixinAppFacade.java @@ -15,6 +15,7 @@ import com.foxinmy.weixin4j.wxa.api.QrCodeApi; import com.foxinmy.weixin4j.wxa.api.SecCheckApi; import com.foxinmy.weixin4j.wxa.api.TemplateApi; import com.foxinmy.weixin4j.wxa.api.TemplateMessageApi; +import com.foxinmy.weixin4j.wxa.api.SubscribeMessageApi; /** * The facade of WeChat Mini Program APIs. @@ -29,6 +30,7 @@ public class WeixinAppFacade { private final TemplateMessageApi templateMessageApi; private final CustomMessageApi customMessageApi; private final SecCheckApi secCheckApi; + private final SubscribeMessageApi subscribeMessageApi; /** * Constructs {@link WeixinAppFacade} using {@link FileCacheStorager}. @@ -111,6 +113,7 @@ public class WeixinAppFacade { this.templateMessageApi = new TemplateMessageApi(tokenManager, properties); this.customMessageApi = new CustomMessageApi(tokenManager, properties); this.secCheckApi = new SecCheckApi(tokenManager, properties); + this.subscribeMessageApi = new SubscribeMessageApi(tokenManager, properties); } /** @@ -149,6 +152,15 @@ public class WeixinAppFacade { return templateMessageApi; } + /** + * 获取订阅消息相关的 API。 + * + * @return 模板消息相关的 API。 + */ + public SubscribeMessageApi getSubscribeMessageApi() { + return subscribeMessageApi; + } + /** * 获取客服消息相关的 API。 * diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java new file mode 100644 index 00000000..b815e276 --- /dev/null +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java @@ -0,0 +1,42 @@ +package com.foxinmy.weixin4j.wxa.api; + +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.token.TokenManager; + +import java.util.Map; +import java.util.Properties; + +public class SubscribeMessageApi extends TokenManagerApi { + + public SubscribeMessageApi(TokenManager tokenManager) { + super(tokenManager, null); + } + + public SubscribeMessageApi(TokenManager tokenManager, Properties properties) { + super(tokenManager, properties); + } + /** + * 发送订阅消息 + * + * @param toUser 接收者(用户)的 openid。 + * @param templateId 所需下发的订阅模板id + * @param page 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 + * @param data 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } } + * @throws WeixinException indicates getting access token failed, or sending template message failed. + * @see 发送订阅消息 + */ + public void sendSubscribeMessageMessage( + String toUser, + String templateId, + String page, + Map data + ) throws WeixinException { + + final SubscribeMessageParameter message = new SubscribeMessageParameter( + toUser, templateId, page, data + ); + WxaApiResult r = this.post("wxopen_subscribe_message_send", message, WxaApiResult.TYPE_REFERENCE); + r.checkErrCode(); + } + +} diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java new file mode 100644 index 00000000..1a683f96 --- /dev/null +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java @@ -0,0 +1,101 @@ +package com.foxinmy.weixin4j.wxa.api; + +import com.alibaba.fastjson.annotation.JSONField; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +public class SubscribeMessageParameter { + + private static final long serialVersionUID = 2018052601L; + + private String toUser; + private String templateId; + private String page; + private Map data; + + public SubscribeMessageParameter() { + + } + + public SubscribeMessageParameter( + String toUser, + String templateId, + String page, + Map data + ) { + this.toUser = toUser; + this.templateId = templateId; + this.page = page; + if (data != null) { + this.data = new HashMap(data.size()); + for (Map.Entry entry : data.entrySet()) { + this.data.put(entry.getKey(), new SubscribeMessageData(entry.getValue())); + } + } + } + + @JSONField(name = "touser") + public String getToUser() { + return toUser; + } + + public void setToUser(String toUser) { + this.toUser = toUser; + } + + @JSONField(name = "template_id") + public String getTemplateId() { + return templateId; + } + + public void setTemplateId(String templateId) { + this.templateId = templateId; + } + + public String getPage() { + return page; + } + + public void setPage(String page) { + this.page = page; + } + + public Map getData() { + return data; + } + + public void setData(Map data) { + this.data = data; + } + + + /** + * SubscribeMessageData + */ + public static class SubscribeMessageData implements Serializable { + + private static final long serialVersionUID = 2018052601L; + + private String value; + + public SubscribeMessageData() { + + } + + public SubscribeMessageData(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + } + +} diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/ParameterType.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/ParameterType.java new file mode 100644 index 00000000..16507e0c --- /dev/null +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/ParameterType.java @@ -0,0 +1,90 @@ +package com.foxinmy.weixin4j.wxa.model.subscribemessage; + +/** + * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html + */ +public enum ParameterType { + + /** + * 20个以内字符 可汉字、数字、字母或符号组合 + * 可汉字、数字、字母或符号组合 + */ + THING("thing"), + + /** + * 24小时制时间格式(支持+年月日) + * 例如:15:01,或:2019年10月1日 15:01 + */ + TIME("time"), + + /** + * 年月日格式(支持+24小时制时间) + * 例如:2019年10月1日,或:2019年10月1日 15:01 + */ + DATE("date"), + + /** + * 10个以内纯汉字或20个以内纯字母或符号 + * 中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内 + */ + NAME("name"), + + /** + * 32位以内数字 + * 只能数字,可带小数 + */ + NUMBER("number"), + + /** + * 32位以内字母 + * 只能字母 + */ + LETTER("letter"), + + /** + * 5位以内符号 + * 只能符号 + */ + SYMBOL("symbol"), + + /** + * 5个以内汉字 + * 5个以内纯汉字,例如:配送中 + */ + PHRASE("phrase"), + + /** + * 1个币种符号+10位以内纯数字,可带小数,结尾可带“元” + * 可带小数 + */ + AMOUNT("amount"), + + /** + * 8位以内,第一位与最后一位可为汉字,其余为字母或数字 + * 车牌号码:粤A8Z888挂 + */ + CAR_NUMBER("car_number"), + + /** + * 17位以内,数字、符号 + * 电话号码,例:+86-0766-66888866 + */ + PHONE_NUMBER("phone_number"), + + /** + * 32位以内数字、字母或符号 + * 可数字、字母或符号组合 + */ + CHARACTER_STRING("character_string"); + + private final String value; + + ParameterType(final String value) { + this.value = value; + } + + @Override + public String toString() { + return this.value; + } +} diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/package-info.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/package-info.java new file mode 100644 index 00000000..90c16f6e --- /dev/null +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/model/subscribemessage/package-info.java @@ -0,0 +1,6 @@ +/** + * Models for {@link com.foxinmy.weixin4j.wxa.api.TemplateApi}. + * + * @since 1.8 + */ +package com.foxinmy.weixin4j.wxa.model.subscribemessage; diff --git a/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties b/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties index 0c1a3b25..3e869824 100644 --- a/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties +++ b/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties @@ -38,6 +38,8 @@ wxopen_template_del={api_cgi_url}/wxopen/template/del?access_token=%s # \u53d1\u9001\u6a21\u7248\u6d88\u606f wxopen_template_message_send={api_cgi_url}/message/wxopen/template/send?access_token=%s +# \u53d1\u9001\u8ba2\u9605\u6d88\u606f +wxopen_subscribe_message_send={api_cgi_url}/message/subscribe/send?access_token=%s # \u53d1\u9001\u5ba2\u670d\u6d88\u606f message_custom_send={api_cgi_url}/message/custom/send?access_token=%s From d3044f045d47d8d19a3194e3373f2e67fe020e9b Mon Sep 17 00:00:00 2001 From: Niko <1377382065@qq.com> Date: Tue, 7 Jan 2020 10:13:52 +0800 Subject: [PATCH 04/21] SubscribeMessageParameter public to package --- .../com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java index 1a683f96..f7c07fb2 100644 --- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageParameter.java @@ -6,7 +6,7 @@ import java.io.Serializable; import java.util.HashMap; import java.util.Map; -public class SubscribeMessageParameter { +class SubscribeMessageParameter { private static final long serialVersionUID = 2018052601L; From 9dcef8c5962db8df343bc3c009ea2b81933f8797 Mon Sep 17 00:00:00 2001 From: Niko <1377382065@qq.com> Date: Tue, 7 Jan 2020 10:36:27 +0800 Subject: [PATCH 05/21] sendSubscribeMessageMessage to sendSubscribeMessage --- .../java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java index b815e276..582fb334 100644 --- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SubscribeMessageApi.java @@ -25,7 +25,7 @@ public class SubscribeMessageApi extends TokenManagerApi { * @throws WeixinException indicates getting access token failed, or sending template message failed. * @see 发送订阅消息 */ - public void sendSubscribeMessageMessage( + public void sendSubscribeMessage( String toUser, String templateId, String page, From c2eebc2ad8c54bbab23f5cb4491584e240be2b83 Mon Sep 17 00:00:00 2001 From: Kit Date: Thu, 16 Jan 2020 14:56:49 +0800 Subject: [PATCH 06/21] =?UTF-8?q?=E9=83=A8=E5=88=86=E5=8D=B3=E5=B0=86?= =?UTF-8?q?=E5=BA=9F=E5=BC=83=E7=9A=84API=E6=89=93=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E6=A0=87=E5=BF=97=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?1.4.0=E5=90=8E=E6=96=B0=E5=A2=9E=E7=9A=84JSAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/foxinmy/weixin4j/jssdk/JSSDKAPI.java | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java index b162a935..bf143cc7 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java @@ -15,23 +15,41 @@ package com.foxinmy.weixin4j.jssdk; * 企业号JSSDK */ public enum JSSDKAPI { + /** + * + * 自定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0) + */ + updateAppMessageShareData, + /** + * + * 自定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0) + */ + updateTimelineShareData, /*** * 分享接口-获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 + * >分享接口-获取“分享到朋友圈”按钮点击状态及自定义分享内容接口(即将废弃) + * @deprecated */ + @Deprecated onMenuShareTimeline, /*** * 分享接口-获取“分享给朋友”按钮点击状态及自定义分享内容接口 + * >分享接口-获取“分享给朋友”按钮点击状态及自定义分享内容接口(即将废弃) + * @deprecated */ + @Deprecated onMenuShareAppMessage, /*** * 分享接口-获取“分享到QQ”按钮点击状态及自定义分享内容接口 + * >分享接口-获取“分享到QQ”按钮点击状态及自定义分享内容接口(即将废弃) + * @deprecated */ + @Deprecated onMenuShareQQ, /*** * Date: Fri, 17 Jan 2020 15:55:52 +0800 Subject: [PATCH 07/21] Fix dependency version conflict of Bouncy Castle. --- pom.xml | 5 +++++ weixin4j-base/pom.xml | 1 - weixin4j-wxa/pom.xml | 5 ----- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 8d90565a..826febe3 100644 --- a/pom.xml +++ b/pom.xml @@ -260,6 +260,11 @@ + + org.bouncycastle + bcprov-jdk16 + 1.46 + junit junit diff --git a/weixin4j-base/pom.xml b/weixin4j-base/pom.xml index 74987345..46ef56fd 100644 --- a/weixin4j-base/pom.xml +++ b/weixin4j-base/pom.xml @@ -74,7 +74,6 @@ org.bouncycastle bcprov-jdk16 - 1.46 diff --git a/weixin4j-wxa/pom.xml b/weixin4j-wxa/pom.xml index 0d35ed4d..0ccfa0fa 100644 --- a/weixin4j-wxa/pom.xml +++ b/weixin4j-wxa/pom.xml @@ -35,11 +35,6 @@ commons-codec 1.10 - - org.bouncycastle - bcprov-jdk15on - 1.55 - junit junit From 48eb468eb79bb0fbfcc05db27037a2fe198a09e3 Mon Sep 17 00:00:00 2001 From: Kit Date: Mon, 10 Feb 2020 14:25:18 +0800 Subject: [PATCH 08/21] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=8C=85=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weixin4j-example/pom.xml | 6 ++++++ .../src/main/resources/spring-weixin4j-proxy.xml | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/weixin4j-example/pom.xml b/weixin4j-example/pom.xml index e7a67f43..1779ddf3 100644 --- a/weixin4j-example/pom.xml +++ b/weixin4j-example/pom.xml @@ -49,6 +49,12 @@ weixin4j-mp ${project.version} + + + com.foxinmy + weixin4j-pay + 1.0.0-SNAPSHOT + com.foxinmy diff --git a/weixin4j-example/src/main/resources/spring-weixin4j-proxy.xml b/weixin4j-example/src/main/resources/spring-weixin4j-proxy.xml index 0ff7e3d5..a6b5d351 100644 --- a/weixin4j-example/src/main/resources/spring-weixin4j-proxy.xml +++ b/weixin4j-example/src/main/resources/spring-weixin4j-proxy.xml @@ -38,7 +38,7 @@ - + diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java index 6888862e..60a18620 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java @@ -1,7 +1,7 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.type.mch.RedpacketSceneType; +import com.foxinmy.weixin4j.pay.type.mch.RedpacketSceneType; import com.foxinmy.weixin4j.util.DateUtil; import javax.xml.bind.annotation.XmlAccessType; From b494c0a64f0bc27dac9ded28d9d06f6a8768470b Mon Sep 17 00:00:00 2001 From: loeveol Date: Sat, 15 Feb 2020 11:55:08 +0800 Subject: [PATCH 09/21] Update TemplateMessage.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 官方文档在模板消息跳转小程序的参数存在错误,提交的miniprogram参数中的pagepath实际为page,这里只对Json的编码修正即可。 --- .../java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java | 1 + 1 file changed, 1 insertion(+) diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java index f20b0b0d..5016e4c7 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java @@ -214,6 +214,7 @@ public class TemplateMessage implements Serializable { /** * 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar) */ + @JSONField(name = "page") private String pagepath; public Miniprogram(String appid, String pagepath) { this.appid = appid; From b6acbaa0fc4dd8492aaccfe47cc502e24b202111 Mon Sep 17 00:00:00 2001 From: Sutra Zhou Date: Thu, 20 Feb 2020 19:43:48 +0800 Subject: [PATCH 10/21] Implement mediaCheckAsync. --- .../foxinmy/weixin4j/wxa/api/SecCheckApi.java | 18 +++++++++++++ .../weixin4j/wxa/api/WxaApiAsyncResult.java | 26 +++++++++++++++++++ .../weixin4j/wxa/api/weixin.properties | 3 +++ 3 files changed, 47 insertions(+) create mode 100644 weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/WxaApiAsyncResult.java diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SecCheckApi.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SecCheckApi.java index 3a2714b6..0e023721 100644 --- a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SecCheckApi.java +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/SecCheckApi.java @@ -95,4 +95,22 @@ public class SecCheckApi extends TokenManagerApi { r.checkErrCode(); } + /** + * 异步校验图片/音频是否含有违法违规内容。 + * + * @param mediaUrl 要检测的多媒体 URL + * @param mediaType {@code 1}: 音频; {@code 2}: 图片 + * @return 任务 ID,用于匹配异步推送结果 + * @throws WeixinException indicates getting access token failed. + * @see security.mediaCheckAsync + */ + public String mediaCheckAsync(String mediaUrl, int mediaType) throws WeixinException { + final Map params = new HashMap(2); + params.put("media_url", mediaUrl); + params.put("media_type", mediaType); + final WxaApiAsyncResult r = this.post("wxa_media_check_async", params, WxaApiAsyncResult.TYPE_REFERENCE); + r.checkErrCode(); + return r.getTraceId(); + } + } diff --git a/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/WxaApiAsyncResult.java b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/WxaApiAsyncResult.java new file mode 100644 index 00000000..0c3f015c --- /dev/null +++ b/weixin4j-wxa/src/main/java/com/foxinmy/weixin4j/wxa/api/WxaApiAsyncResult.java @@ -0,0 +1,26 @@ +package com.foxinmy.weixin4j.wxa.api; + +import com.alibaba.fastjson.TypeReference; + +class WxaApiAsyncResult extends WxaApiResult { + + private static final long serialVersionUID = 2020022001L; + + public static final TypeReference TYPE_REFERENCE + = new TypeReference() { + }; + + private String traceId; + + public WxaApiAsyncResult() { + } + + public String getTraceId() { + return traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } + +} diff --git a/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties b/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties index 3e869824..afc6991e 100644 --- a/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties +++ b/weixin4j-wxa/src/main/resources/com/foxinmy/weixin4j/wxa/api/weixin.properties @@ -50,5 +50,8 @@ message_custom_typing={api_cgi_url}/message/custom/typing?access_token=%s # imgSecCheck wxa_img_sec_check={api_wxa_url}/img_sec_check?access_token=%s +# mediaCheckAsync +wxa_media_check_async={api_wxa_url}/media_check_async?access_token=%s + # msgSecCheck wxa_msg_sec_check={api_wxa_url}/msg_sec_check?access_token=%s From d6cb7bf87f76665cc9cf46329f5264b51151a80f Mon Sep 17 00:00:00 2001 From: loeveol Date: Sat, 22 Feb 2020 14:59:24 +0800 Subject: [PATCH 11/21] =?UTF-8?q?Revert=20"=E6=A8=A1=E6=9D=BF=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E8=B7=B3=E8=BD=AC=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=9A=84?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=AD=98=E5=9C=A8=E9=94=99=E8=AF=AF=EF=BC=8C?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E6=96=87=E6=A1=A3=E6=9C=89=E8=AF=AF=E3=80=82?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java | 1 - 1 file changed, 1 deletion(-) diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java index 5016e4c7..f20b0b0d 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/message/TemplateMessage.java @@ -214,7 +214,6 @@ public class TemplateMessage implements Serializable { /** * 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar) */ - @JSONField(name = "page") private String pagepath; public Miniprogram(String appid, String pagepath) { this.appid = appid; From a2b23c237ba97de6f604ec8fd4a5e593e4967014 Mon Sep 17 00:00:00 2001 From: "Kit.lee" Date: Wed, 1 Apr 2020 15:10:56 +0800 Subject: [PATCH 12/21] Fixed model classes that lost data during fastjson serialization --- weixin4j-pay/pom.xml | 2 +- .../main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java | 2 +- .../main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java | 2 +- .../foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java | 2 +- .../foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java | 2 +- .../java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java | 2 +- .../main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java | 2 +- .../main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java | 2 +- .../java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java | 2 +- .../foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java | 2 +- .../java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java | 2 +- .../java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java | 2 +- .../java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java | 2 +- .../com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/weixin4j-pay/pom.xml b/weixin4j-pay/pom.xml index a3158ed4..34f28c52 100644 --- a/weixin4j-pay/pom.xml +++ b/weixin4j-pay/pom.xml @@ -10,7 +10,7 @@ 4.0.0 weixin4j-pay weixin4j-pay - 1.0.0-SNAPSHOT + 1.0.1-SNAPSHOT https://github.com/foxinmy/weixin4j/tree/master/weixin4j-pay 微信支付商户平台API diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java index e652828f..aa8b59f5 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java @@ -81,7 +81,7 @@ public class PayPackage extends MerchantResult { @JSONField(name = "goods_tag") private String goodsTag; - protected PayPackage() { + public PayPackage() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java index 365bf49c..2672b767 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java @@ -33,7 +33,7 @@ public class PayRequest extends PayBaseInfo { private String partnerId; - protected PayRequest() { + public PayRequest() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java index eb53a222..747e1c2d 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java @@ -51,7 +51,7 @@ public class OrderCouponInfo implements Serializable { @JSONField(name = "coupon_fee") private Integer couponFee; - protected OrderCouponInfo() { + public OrderCouponInfo() { // jaxb requried } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java index 796bea15..cbba5c5d 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java @@ -42,7 +42,7 @@ public class RefundCouponInfo implements Serializable { @JSONField(name = "coupon_refund_fee") private Integer couponFee; - protected RefundCouponInfo() { + public RefundCouponInfo() { // jaxb requried } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java index b5f5816f..311021e9 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java @@ -64,7 +64,7 @@ public class CorpPayment extends MerchantResult { @JSONField(name = "spbill_create_ip") private String clientIp; - protected CorpPayment() { + public CorpPayment() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java index 5d93cc0a..6a600c5b 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java @@ -93,7 +93,7 @@ public class CorpPaymentRecord extends MerchantResult { @XmlElement(name = "check_name_result") private String checkNameResult; - protected CorpPaymentRecord() { + public CorpPaymentRecord() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java index dc4b67b7..24974702 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java @@ -43,7 +43,7 @@ public class CorpPaymentResult extends MerchantResult { @XmlElement(name = "payment_time") private String paymentTime; - protected CorpPaymentResult() { + public CorpPaymentResult() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java index 8bf5d703..4af89e72 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java @@ -27,7 +27,7 @@ public class MICROPayRequest extends Order implements MchPayRequest { @JSONField(serialize = false) private WeixinPayAccount paymentAccount; - protected MICROPayRequest() { + public MICROPayRequest() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java index 1934e8fc..2aefc2fd 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java @@ -90,7 +90,7 @@ public class MchPayPackage extends PayPackage { @JSONField(name = "deposit") private DepositType deposit; - protected MchPayPackage() { + public MchPayPackage() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java index ddebf2e2..5aa8a41b 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java @@ -75,7 +75,7 @@ public class MerchantResult extends XmlResult { */ private String recall; - protected MerchantResult() { + public MerchantResult() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java index 57c9b697..b195aa4a 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java @@ -34,7 +34,7 @@ public class NativePayNotify extends OpenIdResult { @JSONField(name = "product_id") private String productId; - protected NativePayNotify() { + public NativePayNotify() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java index 04b2f253..67f43dad 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java @@ -30,7 +30,7 @@ public class NativePayResponse extends MerchantResult { @JSONField(name = "prepay_id") private String prepayId; - protected NativePayResponse() { + public NativePayResponse() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java index 9265c63c..353c4022 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java @@ -120,7 +120,7 @@ public class Order extends MerchantTradeResult { @JSONField(name = "sub_is_subscribe") private String subIsSubscribe; - protected Order() { + public Order() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java index a8059fbe..0741e80a 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java @@ -39,7 +39,7 @@ public class PrePay extends MerchantResult { @XmlElement(name = "mweb_url") }) private String payUrl; - protected PrePay() { + public PrePay() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java index 6888862e..e5cd8997 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java @@ -110,7 +110,7 @@ public class Redpacket extends MerchantResult { @JSONField(name = "risk_info") private String risk; - protected Redpacket() { + public Redpacket() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java index 741c9e29..c7a0f625 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java @@ -54,7 +54,7 @@ public class RedpacketSendResult extends MerchantResult { @JSONField(name = "send_listid") private String sendListid; - protected RedpacketSendResult() { + public RedpacketSendResult() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java index 8d81f4ee..3bea6fb0 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java @@ -29,7 +29,7 @@ import java.util.List; public class RefundDetail implements Serializable { private static final long serialVersionUID = 1402738803019986864L; - protected RefundDetail() { + public RefundDetail() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java index 9de5fd05..012cad78 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java @@ -42,7 +42,7 @@ public class RefundRecord extends MerchantTradeResult { @ListsuffixResult({ ".*(_\\d)$" }) private List refundList; - protected RefundRecord() { + public RefundRecord() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java index 717c4bc5..419dbc7c 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java @@ -63,7 +63,7 @@ public class RefundResult extends MerchantTradeResult { @ListsuffixResult({ ".*(_\\d)$" }) private List refundList; - protected RefundResult() { + public RefundResult() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java index 501abd03..509a214c 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java @@ -87,7 +87,7 @@ public class SettlementRecord extends MerchantResult { @JSONField(name = "poundage_fee") private int poundageFee; - protected SettlementRecord() { + public SettlementRecord() { // jaxb required } From 73d46426175c6addb8b868babdac31a1ef3f1e16 Mon Sep 17 00:00:00 2001 From: "Kit.lee" Date: Wed, 1 Apr 2020 18:00:02 +0800 Subject: [PATCH 13/21] =?UTF-8?q?=E8=A1=A5=E5=85=85setter=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../type/mch/CorpPaymentCheckNameType.java | 1 - .../weixin4j/pay/payment/JsPayNotify.java | 8 ++ .../weixin4j/pay/payment/PayPackage.java | 6 +- .../weixin4j/pay/payment/PayRequest.java | 2 +- .../pay/payment/coupon/CouponDetail.java | 84 +++++++++++++++++++ .../pay/payment/coupon/CouponResult.java | 32 +++++++ .../pay/payment/coupon/CouponStock.java | 60 +++++++++++++ .../pay/payment/coupon/OrderCouponInfo.java | 18 +++- .../pay/payment/coupon/RefundCouponInfo.java | 14 +++- .../weixin4j/pay/payment/mch/CorpPayment.java | 34 ++++++-- .../pay/payment/mch/CorpPaymentRecord.java | 50 ++++++++++- .../pay/payment/mch/CorpPaymentResult.java | 14 +++- .../pay/payment/mch/CustomsOrder.java | 8 +- .../pay/payment/mch/CustomsOrderResult.java | 2 +- .../pay/payment/mch/MICROPayRequest.java | 2 +- .../pay/payment/mch/MchPayPackage.java | 22 ++++- .../pay/payment/mch/MerchantResult.java | 2 +- .../pay/payment/mch/MerchantTradeResult.java | 26 +++++- .../pay/payment/mch/NativePayNotify.java | 10 ++- .../pay/payment/mch/NativePayResponse.java | 6 +- .../pay/payment/mch/OpenIdResult.java | 8 ++ .../weixin4j/pay/payment/mch/Order.java | 62 ++++++++++++-- .../weixin4j/pay/payment/mch/PrePay.java | 6 +- .../weixin4j/pay/payment/mch/Redpacket.java | 44 +++++++++- .../pay/payment/mch/RedpacketRecord.java | 6 +- .../pay/payment/mch/RedpacketRisk.java | 4 + .../pay/payment/mch/RedpacketSendResult.java | 22 ++++- .../pay/payment/mch/RefundDetail.java | 52 +++++++++++- .../pay/payment/mch/RefundRecord.java | 10 ++- .../pay/payment/mch/RefundResult.java | 28 ++++++- .../pay/payment/mch/SceneInfoApp.java | 16 ++++ .../pay/payment/mch/SettlementRecord.java | 2 +- .../foxinmy/weixin4j/pay/type/TradeState.java | 1 - 33 files changed, 614 insertions(+), 48 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/mch/CorpPaymentCheckNameType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/mch/CorpPaymentCheckNameType.java index 40631c48..3515fb2b 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/mch/CorpPaymentCheckNameType.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/mch/CorpPaymentCheckNameType.java @@ -8,7 +8,6 @@ package com.foxinmy.weixin4j.type.mch; * @date 2015年4月1日 * @since JDK 1.6 * @see - * @deprecated 迁移到子模块weixin4j-pay */ @Deprecated public enum CorpPaymentCheckNameType { diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/JsPayNotify.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/JsPayNotify.java index 14af1807..00ef75ab 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/JsPayNotify.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/JsPayNotify.java @@ -43,10 +43,18 @@ public class JsPayNotify extends PayBaseInfo { return openId; } + public void setOpenId(String openId) { + this.openId = openId; + } + public int getIsSubscribe() { return isSubscribe; } + public void setIsSubscribe(int isSubscribe) { + this.isSubscribe = isSubscribe; + } + @JSONField(serialize = false) public boolean getFormatIsSubscribe() { return isSubscribe == 1; diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java index aa8b59f5..980a1398 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayPackage.java @@ -81,7 +81,7 @@ public class PayPackage extends MerchantResult { @JSONField(name = "goods_tag") private String goodsTag; - public PayPackage() { + protected PayPackage() { // jaxb required } @@ -194,6 +194,10 @@ public class PayPackage extends MerchantResult { public int getTotalFee() { return totalFee; } + + public void setTotalFee(int totalFee) { + this.totalFee = totalFee; + } /** * 调用接口获取单位为分,get方法转换为元方便使用 diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java index 2672b767..365bf49c 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/PayRequest.java @@ -33,7 +33,7 @@ public class PayRequest extends PayBaseInfo { private String partnerId; - public PayRequest() { + protected PayRequest() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponDetail.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponDetail.java index 949e02bb..84a25107 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponDetail.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponDetail.java @@ -178,10 +178,18 @@ public class CouponDetail extends MerchantResult { return couponStockId; } + public void setCouponStockId(String couponStockId) { + this.couponStockId = couponStockId; + } + public int getCouponStockType() { return couponStockType; } + public void setCouponStockType(int couponStockType) { + this.couponStockType = couponStockType; + } + @JSONField(serialize = false) public CouponStockType getFormatCouponStockType() { for (CouponStockType couponStockType : CouponStockType.values()) { @@ -196,10 +204,18 @@ public class CouponDetail extends MerchantResult { return couponId; } + public void setCouponId(String couponId) { + this.couponId = couponId; + } + public int getCouponValue() { return couponValue; } + public void setCouponValue(int couponValue) { + this.couponValue = couponValue; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -214,6 +230,10 @@ public class CouponDetail extends MerchantResult { return couponMininum; } + public void setCouponMininum(int couponMininum) { + this.couponMininum = couponMininum; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -228,10 +248,18 @@ public class CouponDetail extends MerchantResult { return couponName; } + public void setCouponName(String couponName) { + this.couponName = couponName; + } + public int getCouponStatus() { return couponStatus; } + public void setCouponStatus(int couponStatus) { + this.couponStatus = couponStatus; + } + @JSONField(serialize = false) public CouponStatus getFormatCouponStatus() { for (CouponStatus couponStatus : CouponStatus.values()) { @@ -246,6 +274,10 @@ public class CouponDetail extends MerchantResult { return couponType; } + public void setCouponType(int couponType) { + this.couponType = couponType; + } + @JSONField(deserialize = false, serialize = false) public CouponType getFormatCouponType() { for (CouponType couponType : CouponType.values()) { @@ -260,10 +292,18 @@ public class CouponDetail extends MerchantResult { return couponDesc; } + public void setCouponDesc(String couponDesc) { + this.couponDesc = couponDesc; + } + public int getCouponUseValue() { return couponUseValue; } + public void setCouponUseValue(int couponUseValue) { + this.couponUseValue = couponUseValue; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -288,10 +328,18 @@ public class CouponDetail extends MerchantResult { return couponRemainValue / 100d; } + public void setCouponRemainValue(int couponRemainValue) { + this.couponRemainValue = couponRemainValue; + } + public String getBeginTime() { return beginTime; } + public void setBeginTime(String beginTime) { + this.beginTime = beginTime; + } + @JSONField(serialize = false) public Date getFormatBeginTime() { return beginTime != null ? DateUtil.parse2yyyyMMddHHmmss(beginTime) @@ -302,6 +350,10 @@ public class CouponDetail extends MerchantResult { return endTime; } + public void setEndTime(String endTime) { + this.endTime = endTime; + } + @JSONField(serialize = false) public Date getFormatEndTime() { return endTime != null ? DateUtil.parse2yyyyMMddHHmmss(endTime) : null; @@ -311,6 +363,10 @@ public class CouponDetail extends MerchantResult { return sendTime; } + public void setSendTime(String sendTime) { + this.sendTime = sendTime; + } + @JSONField(serialize = false) public Date getFormatSendTime() { return sendTime != null ? DateUtil.parse2yyyyMMddHHmmss(sendTime) @@ -326,26 +382,50 @@ public class CouponDetail extends MerchantResult { return useTime != null ? DateUtil.parse2yyyyMMddHHmmss(useTime) : null; } + public void setUseTime(String useTime) { + this.useTime = useTime; + } + public String getTradeNo() { return tradeNo; } + public void setTradeNo(String tradeNo) { + this.tradeNo = tradeNo; + } + public String getConsumerMchId() { return consumerMchId; } + public void setConsumerMchId(String consumerMchId) { + this.consumerMchId = consumerMchId; + } + public String getConsumerMchName() { return consumerMchName; } + public void setConsumerMchName(String consumerMchName) { + this.consumerMchName = consumerMchName; + } + public String getConsumerMchAppid() { return consumerMchAppid; } + public void setConsumerMchAppid(String consumerMchAppid) { + this.consumerMchAppid = consumerMchAppid; + } + public String getSendSource() { return sendSource; } + public void setSendSource(String sendSource) { + this.sendSource = sendSource; + } + public int getIsPartialUse() { return isPartialUse; } @@ -355,6 +435,10 @@ public class CouponDetail extends MerchantResult { return isPartialUse == 1; } + public void setIsPartialUse(int isPartialUse) { + this.isPartialUse = isPartialUse; + } + @Override public String toString() { return "CouponDetail [couponStockId=" + couponStockId diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponResult.java index afe82022..697a3ff3 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponResult.java @@ -80,18 +80,38 @@ public class CouponResult extends MerchantResult { return couponStockId; } + public void setCouponStockId(String couponStockId) { + this.couponStockId = couponStockId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + public int getResponseCount() { return responseCount; } + public void setResponseCount(int responseCount) { + this.responseCount = responseCount; + } + public int getSuccessCount() { return successCount; } + public void setSuccessCount(int successCount) { + this.successCount = successCount; + } + public int getFailedCount() { return failedCount; } + public void setFailedCount(int failedCount) { + this.failedCount = failedCount; + } + public String getOpenId() { return openId; } @@ -100,14 +120,26 @@ public class CouponResult extends MerchantResult { return retCode; } + public void setRetCode(String retCode) { + this.retCode = retCode; + } + public String getCouponId() { return couponId; } + public void setCouponId(String couponId) { + this.couponId = couponId; + } + public String getRetMsg() { return retMsg; } + public void setRetMsg(String retMsg) { + this.retMsg = retMsg; + } + @Override public String toString() { return "CouponResult [couponStockId=" + couponStockId diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponStock.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponStock.java index d1d2be64..0d8e5288 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponStock.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/CouponStock.java @@ -126,14 +126,26 @@ public class CouponStock extends MerchantResult { return couponStockId; } + public void setCouponStockId(String couponStockId) { + this.couponStockId = couponStockId; + } + public String getCouponName() { return couponName; } + public void setCouponName(String couponName) { + this.couponName = couponName; + } + public int getCouponValue() { return couponValue; } + public void setCouponValue(int couponValue) { + this.couponValue = couponValue; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -148,6 +160,10 @@ public class CouponStock extends MerchantResult { return couponMininumn; } + public void setCouponMininumn(Integer couponMininumn) { + this.couponMininumn = couponMininumn; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -172,6 +188,10 @@ public class CouponStock extends MerchantResult { return null; } + public void setCouponType(int couponType) { + this.couponType = couponType; + } + public int getCouponStockStatus() { return couponStockStatus; } @@ -186,14 +206,26 @@ public class CouponStock extends MerchantResult { return null; } + public void setCouponStockStatus(int couponStockStatus) { + this.couponStockStatus = couponStockStatus; + } + public int getCouponTotal() { return couponTotal; } + public void setCouponTotal(int couponTotal) { + this.couponTotal = couponTotal; + } + public Integer getMaxQuota() { return maxQuota; } + public void setMaxQuota(Integer maxQuota) { + this.maxQuota = maxQuota; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -208,6 +240,10 @@ public class CouponStock extends MerchantResult { return lockedNum; } + public void setLockedNum(Integer lockedNum) { + this.lockedNum = lockedNum; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -222,6 +258,10 @@ public class CouponStock extends MerchantResult { return usedNum; } + public void setUsedNum(Integer usedNum) { + this.usedNum = usedNum; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -236,6 +276,10 @@ public class CouponStock extends MerchantResult { return sendNum; } + public void setSendNum(Integer sendNum) { + this.sendNum = sendNum; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -250,6 +294,10 @@ public class CouponStock extends MerchantResult { return beginTime; } + public void setBeginTime(String beginTime) { + this.beginTime = beginTime; + } + @JSONField(serialize = false) public Date getFormatBeginTime() { return beginTime != null ? DateUtil.parse2yyyyMMddHHmmss(beginTime) @@ -260,6 +308,10 @@ public class CouponStock extends MerchantResult { return endTime; } + public void setEndTime(String endTime) { + this.endTime = endTime; + } + @JSONField(serialize = false) public Date getFormatEndTime() { return endTime != null ? DateUtil.parse2yyyyMMddHHmmss(endTime) : null; @@ -269,6 +321,10 @@ public class CouponStock extends MerchantResult { return createTime; } + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + @JSONField(serialize = false) public Date getFormatCreateTime() { return createTime != null ? DateUtil.parse2yyyyMMddHHmmss(createTime) @@ -279,6 +335,10 @@ public class CouponStock extends MerchantResult { return couponBudget; } + public void setCouponBudget(Integer couponBudget) { + this.couponBudget = couponBudget; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java index 747e1c2d..cbdfa2a8 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/OrderCouponInfo.java @@ -51,7 +51,7 @@ public class OrderCouponInfo implements Serializable { @JSONField(name = "coupon_fee") private Integer couponFee; - public OrderCouponInfo() { + protected OrderCouponInfo() { // jaxb requried } @@ -59,10 +59,18 @@ public class OrderCouponInfo implements Serializable { return couponBatchId; } + public void setCouponBatchId(String couponBatchId) { + this.couponBatchId = couponBatchId; + } + public String getCouponType() { return couponType; } + public void setCouponType(String couponType) { + this.couponType = couponType; + } + @JSONField(serialize = false) public CouponType getFormatCouponType() { return couponType != null ? CouponType @@ -73,10 +81,18 @@ public class OrderCouponInfo implements Serializable { return couponId; } + public void setCouponId(String couponId) { + this.couponId = couponId; + } + public Integer getCouponFee() { return couponFee; } + public void setCouponFee(Integer couponFee) { + this.couponFee = couponFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java index cbba5c5d..48afd85f 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/coupon/RefundCouponInfo.java @@ -42,7 +42,7 @@ public class RefundCouponInfo implements Serializable { @JSONField(name = "coupon_refund_fee") private Integer couponFee; - public RefundCouponInfo() { + protected RefundCouponInfo() { // jaxb requried } @@ -50,14 +50,26 @@ public class RefundCouponInfo implements Serializable { return couponBatchId; } + public void setCouponBatchId(String couponBatchId) { + this.couponBatchId = couponBatchId; + } + public String getCouponId() { return couponId; } + public void setCouponId(String couponId) { + this.couponId = couponId; + } + public Integer getCouponFee() { return couponFee; } + public void setCouponFee(Integer couponFee) { + this.couponFee = couponFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java index 311021e9..e55a27dd 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPayment.java @@ -1,7 +1,7 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.type.mch.CorpPaymentCheckNameType; +import com.foxinmy.weixin4j.pay.type.mch.CorpPaymentCheckNameType; import com.foxinmy.weixin4j.util.DateUtil; import javax.xml.bind.annotation.XmlAccessType; @@ -38,7 +38,7 @@ public class CorpPayment extends MerchantResult { /** * 校验用户姓名选项 * - * @see CorpPaymentCheckNameType.type.MPPaymentCheckNameType + * @see CorpPaymentCheckNameType */ @XmlElement(name = "check_name") @JSONField(name = "check_name") @@ -64,7 +64,7 @@ public class CorpPayment extends MerchantResult { @JSONField(name = "spbill_create_ip") private String clientIp; - public CorpPayment() { + protected CorpPayment() { // jaxb required } @@ -99,25 +99,49 @@ public class CorpPayment extends MerchantResult { return outTradeNo; } + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; + } + public String getOpenId() { return openId; } + public void setOpenId(String openId) { + this.openId = openId; + } + public CorpPaymentCheckNameType getCheckNameType() { return checkNameType; } + public void setCheckNameType(CorpPaymentCheckNameType checkNameType) { + this.checkNameType = checkNameType; + } + public String getUserName() { return userName; } + public void setUserName(String userName) { + this.userName = userName; + } + public String getDesc() { return desc; } + public void setDesc(String desc) { + this.desc = desc; + } + public int getAmount() { return amount; } + + public void setAmount(int amount) { + this.amount = amount; + } /** * 调用接口获取单位为分,get方法转换为元方便使用 @@ -133,8 +157,8 @@ public class CorpPayment extends MerchantResult { return clientIp; } - public void setUserName(String userName) { - this.userName = userName; + public void setClientIp(String clientIp) { + this.clientIp = clientIp; } @Override diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java index 6a600c5b..1a3286eb 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentRecord.java @@ -1,7 +1,7 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.type.mch.CorpPaymentCheckNameType; +import com.foxinmy.weixin4j.pay.type.mch.CorpPaymentCheckNameType; import com.foxinmy.weixin4j.util.DateUtil; import javax.xml.bind.annotation.XmlAccessType; @@ -76,7 +76,7 @@ public class CorpPaymentRecord extends MerchantResult { /** * 校验用户姓名选项 * - * @see CorpPaymentCheckNameType.type.MPPaymentCheckNameType + * @see CorpPaymentCheckNameType */ @XmlElement(name = "check_name") @JSONField(name = "check_name") @@ -93,7 +93,7 @@ public class CorpPaymentRecord extends MerchantResult { @XmlElement(name = "check_name_result") private String checkNameResult; - public CorpPaymentRecord() { + protected CorpPaymentRecord() { // jaxb required } @@ -101,14 +101,26 @@ public class CorpPaymentRecord extends MerchantResult { return transactionId; } + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } + public String getOutTradeNo() { return outTradeNo; } + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; + } + public String getTransactionStatus() { return transactionStatus; } + public void setTransactionStatus(String transactionStatus) { + this.transactionStatus = transactionStatus; + } + /** * 格式化交易状态 * @@ -123,18 +135,34 @@ public class CorpPaymentRecord extends MerchantResult { return failureReason; } + public void setFailureReason(String failureReason) { + this.failureReason = failureReason; + } + public String getOpenId() { return openId; } + public void setOpenId(String openId) { + this.openId = openId; + } + public String getTransferName() { return transferName; } + public void setTransferName(String transferName) { + this.transferName = transferName; + } + public int getPaymentAmount() { return paymentAmount; } + public void setPaymentAmount(int paymentAmount) { + this.paymentAmount = paymentAmount; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -149,6 +177,10 @@ public class CorpPaymentRecord extends MerchantResult { return transferTime; } + public void setTransferTime(String transferTime) { + this.transferTime = transferTime; + } + /** * 格式化转账时间 * @@ -164,6 +196,10 @@ public class CorpPaymentRecord extends MerchantResult { return checkNameType; } + public void setCheckNameType(String checkNameType) { + this.checkNameType = checkNameType; + } + @JSONField(serialize = false) public CorpPaymentCheckNameType getFormatCheckNameType() { return checkNameType != null ? CorpPaymentCheckNameType @@ -174,10 +210,18 @@ public class CorpPaymentRecord extends MerchantResult { return desc; } + public void setDesc(String desc) { + this.desc = desc; + } + public String getCheckNameResult() { return checkNameResult; } + public void setCheckNameResult(String checkNameResult) { + this.checkNameResult = checkNameResult; + } + /** * 格式化交易状态 * diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java index 24974702..1843bf55 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CorpPaymentResult.java @@ -43,7 +43,7 @@ public class CorpPaymentResult extends MerchantResult { @XmlElement(name = "payment_time") private String paymentTime; - public CorpPaymentResult() { + protected CorpPaymentResult() { // jaxb required } @@ -51,14 +51,26 @@ public class CorpPaymentResult extends MerchantResult { return transactionId; } + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } + public String getOutTradeNo() { return outTradeNo; } + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; + } + public String getPaymentTime() { return paymentTime; } + public void setPaymentTime(String paymentTime) { + this.paymentTime = paymentTime; + } + @JSONField(serialize = false) public Date getFormatPaymentTime() { return paymentTime != null ? DateUtil.parseDate(paymentTime, diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CustomsOrder.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CustomsOrder.java index e21da276..90dda051 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CustomsOrder.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CustomsOrder.java @@ -1,9 +1,9 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.type.CredentialType; -import com.foxinmy.weixin4j.type.CurrencyType; -import com.foxinmy.weixin4j.type.CustomsCity; +import com.foxinmy.weixin4j.pay.type.CredentialType; +import com.foxinmy.weixin4j.pay.type.CurrencyType; +import com.foxinmy.weixin4j.pay.type.CustomsCity; import javax.xml.bind.annotation.XmlElement; @@ -40,7 +40,7 @@ public class CustomsOrder extends MerchantResult { /** * 货币类型,符合 ISO 4217 标准的三位字母代码,默认人民币:CNY * - * @see com.foxinmy.weixin4j.mp.type.CurrencyType + * @see com.foxinmy.weixin4j.pay.type.CurrencyType */ @XmlElement(name = "fee_type") @JSONField(name = "fee_type") diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CustomsOrderResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CustomsOrderResult.java index ba58c2cf..c26a805a 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CustomsOrderResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/CustomsOrderResult.java @@ -1,7 +1,7 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.type.CustomsSatus; +import com.foxinmy.weixin4j.pay.type.CustomsSatus; import com.foxinmy.weixin4j.util.DateUtil; import javax.xml.bind.annotation.XmlElement; diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java index 4af89e72..8bf5d703 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MICROPayRequest.java @@ -27,7 +27,7 @@ public class MICROPayRequest extends Order implements MchPayRequest { @JSONField(serialize = false) private WeixinPayAccount paymentAccount; - public MICROPayRequest() { + protected MICROPayRequest() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java index 2aefc2fd..e081b23c 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java @@ -90,7 +90,7 @@ public class MchPayPackage extends PayPackage { @JSONField(name = "deposit") private DepositType deposit; - public MchPayPackage() { + protected MchPayPackage() { // jaxb required } @@ -193,22 +193,42 @@ public class MchPayPackage extends PayPackage { return tradeType; } + public void setTradeType(String tradeType) { + this.tradeType = tradeType; + } + public String getFeeType() { return feeType; } + public void setFeeType(String feeType) { + this.feeType = feeType; + } + public String getOpenId() { return openId; } + public void setOpenId(String openId) { + this.openId = openId; + } + public String getAuthCode() { return authCode; } + public void setAuthCode(String authCode) { + this.authCode = authCode; + } + public String getProductId() { return productId; } + public void setProductId(String productId) { + this.productId = productId; + } + public String getLimitPay() { return limitPay; } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java index 5aa8a41b..ddebf2e2 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantResult.java @@ -75,7 +75,7 @@ public class MerchantResult extends XmlResult { */ private String recall; - public MerchantResult() { + protected MerchantResult() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantTradeResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantTradeResult.java index d257f11b..0ba7b988 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantTradeResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MerchantTradeResult.java @@ -1,7 +1,7 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.type.CurrencyType; +import com.foxinmy.weixin4j.pay.type.CurrencyType; import javax.xml.bind.annotation.XmlElement; @@ -60,6 +60,10 @@ public class MerchantTradeResult extends MerchantResult { return cashFee; } + public void setCashFee(Integer cashFee) { + this.cashFee = cashFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -74,6 +78,10 @@ public class MerchantTradeResult extends MerchantResult { return totalFee; } + public void setTotalFee(Integer totalFee) { + this.totalFee = totalFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -94,18 +102,34 @@ public class MerchantTradeResult extends MerchantResult { return feeType; } + public void setFeeType(String feeType) { + this.feeType = feeType; + } + public String getTransactionId() { return transactionId; } + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } + public String getOutTradeNo() { return outTradeNo; } + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; + } + public Integer getSettlementTotalFee() { return settlementTotalFee; } + public void setSettlementTotalFee(Integer settlementTotalFee) { + this.settlementTotalFee = settlementTotalFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java index b195aa4a..b998c737 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayNotify.java @@ -34,7 +34,7 @@ public class NativePayNotify extends OpenIdResult { @JSONField(name = "product_id") private String productId; - public NativePayNotify() { + protected NativePayNotify() { // jaxb required } @@ -42,10 +42,18 @@ public class NativePayNotify extends OpenIdResult { return productId; } + public void setIsSubscribe(String isSubscribe) { + this.isSubscribe = isSubscribe; + } + public String getIsSubscribe() { return isSubscribe; } + public void setProductId(String productId) { + this.productId = productId; + } + @Override public String toString() { return "NativePayNotify [productId=" + productId + ", isSubscribe=" diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java index 67f43dad..15996c5b 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/NativePayResponse.java @@ -30,7 +30,7 @@ public class NativePayResponse extends MerchantResult { @JSONField(name = "prepay_id") private String prepayId; - public NativePayResponse() { + protected NativePayResponse() { // jaxb required } @@ -71,6 +71,10 @@ public class NativePayResponse extends MerchantResult { return prepayId; } + public void setPrepayId(String prepayId) { + this.prepayId = prepayId; + } + @Override public String toString() { return "NativePayResponse [prepayId=" + prepayId + ", " diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/OpenIdResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/OpenIdResult.java index 3c4cfd95..b3d664c8 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/OpenIdResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/OpenIdResult.java @@ -40,10 +40,18 @@ public class OpenIdResult extends MerchantResult { return openId; } + public void setOpenId(String openId) { + this.openId = openId; + } + public String getSubOpenId() { return subOpenId; } + public void setSubOpenId(String subOpenId) { + this.subOpenId = subOpenId; + } + @Override public String toString() { return "OpenIdResult [openId=" + openId + ", subOpenId=" + subOpenId diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java index 353c4022..945ef736 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Order.java @@ -2,10 +2,10 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.pay.payment.coupon.OrderCouponInfo; -import com.foxinmy.weixin4j.type.BankType; -import com.foxinmy.weixin4j.type.CurrencyType; -import com.foxinmy.weixin4j.type.TradeState; -import com.foxinmy.weixin4j.type.TradeType; +import com.foxinmy.weixin4j.pay.type.BankType; +import com.foxinmy.weixin4j.pay.type.CurrencyType; +import com.foxinmy.weixin4j.pay.type.TradeState; +import com.foxinmy.weixin4j.pay.type.TradeType; import com.foxinmy.weixin4j.util.DateUtil; import com.foxinmy.weixin4j.xml.ListsuffixResult; @@ -120,7 +120,7 @@ public class Order extends MerchantTradeResult { @JSONField(name = "sub_is_subscribe") private String subIsSubscribe; - public Order() { + protected Order() { // jaxb required } @@ -134,10 +134,18 @@ public class Order extends MerchantTradeResult { return openId; } + public void setOpenId(String openId) { + this.openId = openId; + } + public String getIsSubscribe() { return isSubscribe; } + public void setIsSubscribe(String isSubscribe) { + this.isSubscribe = isSubscribe; + } + @JSONField(serialize = false) public boolean getFormatIsSubscribe() { return isSubscribe != null && isSubscribe.equalsIgnoreCase("y"); @@ -153,6 +161,10 @@ public class Order extends MerchantTradeResult { return bankType; } + public void setBankType(String bankType) { + this.bankType = bankType; + } + @JSONField(serialize = false) public BankType getFormatBankType() { return bankType != null ? BankType.valueOf(bankType.toUpperCase()) @@ -163,6 +175,10 @@ public class Order extends MerchantTradeResult { return couponFee; } + public void setCouponFee(Integer couponFee) { + this.couponFee = couponFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -177,22 +193,42 @@ public class Order extends MerchantTradeResult { return couponCount; } + public void setCouponCount(Integer couponCount) { + this.couponCount = couponCount; + } + public String getTradeState() { return tradeState; } + public void setTradeState(String tradeState) { + this.tradeState = tradeState; + } + public String getTradeType() { return tradeType; } + public void setTradeType(String tradeType) { + this.tradeType = tradeType; + } + public String getAttach() { return attach; } + public void setAttach(String attach) { + this.attach = attach; + } + public String getTimeEnd() { return timeEnd; } + public void setTimeEnd(String timeEnd) { + this.timeEnd = timeEnd; + } + @JSONField(serialize = false) public Date getFormatTimeEnd() { return timeEnd != null ? DateUtil.parse2yyyyMMddHHmmss(timeEnd) : null; @@ -202,6 +238,10 @@ public class Order extends MerchantTradeResult { return tradeStateDesc; } + public void setTradeStateDesc(String tradeStateDesc) { + this.tradeStateDesc = tradeStateDesc; + } + public List getCouponList() { return couponList; } @@ -214,10 +254,18 @@ public class Order extends MerchantTradeResult { return subOpenId; } + public void setSubOpenId(String subOpenId) { + this.subOpenId = subOpenId; + } + public String getSubIsSubscribe() { return subIsSubscribe; } + public void setSubIsSubscribe(String subIsSubscribe) { + this.subIsSubscribe = subIsSubscribe; + } + @JSONField(serialize = false) public boolean getFormatSubIsSubscribe() { return subIsSubscribe != null && subIsSubscribe.equalsIgnoreCase("y"); @@ -227,6 +275,10 @@ public class Order extends MerchantTradeResult { return cashFeeType; } + public void setCashFeeType(String cashFeeType) { + this.cashFeeType = cashFeeType; + } + @JSONField(serialize = false) public CurrencyType getFormatCashFeeType() { return cashFeeType != null ? CurrencyType.valueOf(cashFeeType diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java index 0741e80a..acd557e2 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/PrePay.java @@ -1,6 +1,6 @@ package com.foxinmy.weixin4j.pay.payment.mch; -import com.foxinmy.weixin4j.type.TradeType; +import com.foxinmy.weixin4j.pay.type.TradeType; import javax.xml.bind.annotation.*; @@ -22,7 +22,7 @@ public class PrePay extends MerchantResult { /** * 调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP, * - * @see com.foxinmy.weixin4j.mp.type.TradeType + * @see com.foxinmy.weixin4j.pay.type.TradeType */ @XmlElement(name = "trade_type") private TradeType tradeType; @@ -39,7 +39,7 @@ public class PrePay extends MerchantResult { @XmlElement(name = "mweb_url") }) private String payUrl; - public PrePay() { + protected PrePay() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java index e5cd8997..d10b4d2f 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/Redpacket.java @@ -1,7 +1,7 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.type.mch.RedpacketSceneType; +import com.foxinmy.weixin4j.pay.type.mch.RedpacketSceneType; import com.foxinmy.weixin4j.util.DateUtil; import javax.xml.bind.annotation.XmlAccessType; @@ -110,7 +110,7 @@ public class Redpacket extends MerchantResult { @JSONField(name = "risk_info") private String risk; - public Redpacket() { + protected Redpacket() { // jaxb required } @@ -174,18 +174,34 @@ public class Redpacket extends MerchantResult { return outTradeNo; } + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; + } + public String getOpenId() { return openId; } + public void setOpenId(String openId) { + this.openId = openId; + } + public String getSendName() { return sendName; } + public void setSendName(String sendName) { + this.sendName = sendName; + } + public int getTotalAmount() { return totalAmount; } + public void setTotalAmount(int totalAmount) { + this.totalAmount = totalAmount; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -200,26 +216,50 @@ public class Redpacket extends MerchantResult { return totalNum; } + public void setTotalNum(int totalNum) { + this.totalNum = totalNum; + } + public String getWishing() { return wishing; } + public void setWishing(String wishing) { + this.wishing = wishing; + } + public String getAmtType() { return amtType; } + public void setAmtType(String amtType) { + this.amtType = amtType; + } + public String getClientIp() { return clientIp; } + public void setClientIp(String clientIp) { + this.clientIp = clientIp; + } + public String getActName() { return actName; } + public void setActName(String actName) { + this.actName = actName; + } + public String getRemark() { return remark; } + public void setRemark(String remark) { + this.remark = remark; + } + public String getMsgAppId() { return msgAppId; } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketRecord.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketRecord.java index 2cee591b..00bda846 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketRecord.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketRecord.java @@ -2,9 +2,9 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.http.weixin.XmlResult; -import com.foxinmy.weixin4j.type.mch.RedpacketSendType; -import com.foxinmy.weixin4j.type.mch.RedpacketStatus; -import com.foxinmy.weixin4j.type.mch.RedpacketType; +import com.foxinmy.weixin4j.pay.type.mch.RedpacketSendType; +import com.foxinmy.weixin4j.pay.type.mch.RedpacketStatus; +import com.foxinmy.weixin4j.pay.type.mch.RedpacketType; import com.foxinmy.weixin4j.util.DateUtil; import javax.xml.bind.annotation.*; diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketRisk.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketRisk.java index 05127d0b..0451a36d 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketRisk.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketRisk.java @@ -72,6 +72,10 @@ public class RedpacketRisk { return risk; } + public void setRisk(Map risk) { + this.risk = risk; + } + public String toContent() { if (risk.isEmpty()) return null; diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java index c7a0f625..d2f63fd0 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RedpacketSendResult.java @@ -54,7 +54,7 @@ public class RedpacketSendResult extends MerchantResult { @JSONField(name = "send_listid") private String sendListid; - public RedpacketSendResult() { + protected RedpacketSendResult() { // jaxb required } @@ -62,14 +62,26 @@ public class RedpacketSendResult extends MerchantResult { return outTradeNo; } + public void setOutTradeNo(String outTradeNo) { + this.outTradeNo = outTradeNo; + } + public String getOpenId() { return openId; } + public void setOpenId(String openId) { + this.openId = openId; + } + public int getTotalAmount() { return totalAmount; } + public void setTotalAmount(int totalAmount) { + this.totalAmount = totalAmount; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -84,6 +96,10 @@ public class RedpacketSendResult extends MerchantResult { return sendTime; } + public void setSendTime(String sendTime) { + this.sendTime = sendTime; + } + @JSONField(serialize = false) public Date getFormatSendTime() { return DateUtil.parse2yyyyMMddHHmmss(sendTime); @@ -93,6 +109,10 @@ public class RedpacketSendResult extends MerchantResult { return sendListid; } + public void setSendListid(String sendListid) { + this.sendListid = sendListid; + } + @Override public String toString() { return "RedpacketSendResult [outTradeNo=" + outTradeNo + ", openId=" diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java index 3bea6fb0..65190bc2 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundDetail.java @@ -2,9 +2,9 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.pay.payment.coupon.RefundCouponInfo; -import com.foxinmy.weixin4j.type.mch.CouponType; -import com.foxinmy.weixin4j.type.mch.RefundChannel; -import com.foxinmy.weixin4j.type.mch.RefundStatus; +import com.foxinmy.weixin4j.pay.type.mch.CouponType; +import com.foxinmy.weixin4j.pay.type.mch.RefundChannel; +import com.foxinmy.weixin4j.pay.type.mch.RefundStatus; import com.foxinmy.weixin4j.util.DateUtil; import com.foxinmy.weixin4j.xml.ListsuffixResult; @@ -29,7 +29,7 @@ import java.util.List; public class RefundDetail implements Serializable { private static final long serialVersionUID = 1402738803019986864L; - public RefundDetail() { + protected RefundDetail() { // jaxb required } @@ -113,14 +113,26 @@ public class RefundDetail implements Serializable { return outRefundNo; } + public void setOutRefundNo(String outRefundNo) { + this.outRefundNo = outRefundNo; + } + public String getRefundId() { return refundId; } + public void setRefundId(String refundId) { + this.refundId = refundId; + } + public String getRefundChannel() { return refundChannel; } + public void setRefundChannel(String refundChannel) { + this.refundChannel = refundChannel; + } + @JSONField(serialize = false) public RefundChannel getFormatRefundChannel() { return refundChannel != null ? RefundChannel.valueOf(refundChannel @@ -131,10 +143,18 @@ public class RefundDetail implements Serializable { return refundFee; } + public void setRefundFee(int refundFee) { + this.refundFee = refundFee; + } + public String getRefundStatus() { return refundStatus; } + public void setRefundStatus(String refundStatus) { + this.refundStatus = refundStatus; + } + @JSONField(serialize = false) public RefundStatus getFormatRefundStatus() { return refundStatus != null ? RefundStatus.valueOf(refundStatus @@ -153,6 +173,10 @@ public class RefundDetail implements Serializable { return settlementRefundFee; } + public void setSettlementRefundFee(Integer settlementRefundFee) { + this.settlementRefundFee = settlementRefundFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -167,6 +191,10 @@ public class RefundDetail implements Serializable { return couponRefundFee; } + public void setCouponRefundFee(Integer couponRefundFee) { + this.couponRefundFee = couponRefundFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -181,10 +209,18 @@ public class RefundDetail implements Serializable { return couponRefundCount; } + public void setCouponRefundCount(Integer couponRefundCount) { + this.couponRefundCount = couponRefundCount; + } + public String getCouponType() { return couponType; } + public void setCouponType(String couponType) { + this.couponType = couponType; + } + @JSONField(serialize = false) public CouponType getFormatCouponType() { return couponType != null ? CouponType @@ -195,9 +231,17 @@ public class RefundDetail implements Serializable { return refundRecvAccout; } + public void setRefundRecvAccout(String refundRecvAccout) { + this.refundRecvAccout = refundRecvAccout; + } + public String getRefundSuccessTime() { return refundSuccessTime; } + + public void setRefundSuccessTime(String refundSuccessTime) { + this.refundSuccessTime = refundSuccessTime; + } @JSONField(serialize = false) public Date getFormatRefundSuccessTime() { diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java index 012cad78..fbed34d0 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundRecord.java @@ -42,7 +42,7 @@ public class RefundRecord extends MerchantTradeResult { @ListsuffixResult({ ".*(_\\d)$" }) private List refundList; - public RefundRecord() { + protected RefundRecord() { // jaxb required } @@ -50,10 +50,18 @@ public class RefundRecord extends MerchantTradeResult { return refundCount; } + public void setRefundCount(int refundCount) { + this.refundCount = refundCount; + } + public int getRefundFee() { return refundFee; } + public void setRefundFee(int refundFee) { + this.refundFee = refundFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java index 419dbc7c..87f9c06e 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/RefundResult.java @@ -1,7 +1,7 @@ package com.foxinmy.weixin4j.pay.payment.mch; import com.alibaba.fastjson.annotation.JSONField; -import com.foxinmy.weixin4j.type.mch.RefundChannel; +import com.foxinmy.weixin4j.pay.type.mch.RefundChannel; import com.foxinmy.weixin4j.xml.ListsuffixResult; import javax.xml.bind.annotation.XmlAccessType; @@ -63,7 +63,7 @@ public class RefundResult extends MerchantTradeResult { @ListsuffixResult({ ".*(_\\d)$" }) private List refundList; - public RefundResult() { + protected RefundResult() { // jaxb required } @@ -71,14 +71,26 @@ public class RefundResult extends MerchantTradeResult { return outRefundNo; } + public void setOutRefundNo(String outRefundNo) { + this.outRefundNo = outRefundNo; + } + public String getRefundId() { return refundId; } + public void setRefundId(String refundId) { + this.refundId = refundId; + } + public String getRefundChannel() { return refundChannel; } + public void setRefundChannel(String refundChannel) { + this.refundChannel = refundChannel; + } + @JSONField(serialize = false) public RefundChannel getFormatRefundChannel() { return refundChannel != null ? RefundChannel.valueOf(refundChannel @@ -89,6 +101,10 @@ public class RefundResult extends MerchantTradeResult { return refundFee; } + public void setRefundFee(int refundFee) { + this.refundFee = refundFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -103,6 +119,10 @@ public class RefundResult extends MerchantTradeResult { return cashRefundFee; } + public void setCashRefundFee(Integer cashRefundFee) { + this.cashRefundFee = cashRefundFee; + } + /** * 调用接口获取单位为分,get方法转换为元方便使用 * @@ -117,6 +137,10 @@ public class RefundResult extends MerchantTradeResult { return refundList; } + public void setRefundList(List refundList) { + this.refundList = refundList; + } + @Override public String toString() { return "RefundResult [" + super.toString() + ", outRefundNo=" diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoApp.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoApp.java index 48a5b763..7c708e5f 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoApp.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoApp.java @@ -21,6 +21,10 @@ public class SceneInfoApp { private String path; private String sceneInfo; + protected SceneInfoApp(){ + + } + private SceneInfoApp(String type, String name, String path) { this.type = type; this.name = name; @@ -31,14 +35,26 @@ public class SceneInfoApp { return type; } + public void setType(String type) { + this.type = type; + } + public String getName() { return name; } + public void setName(String name) { + this.name = name; + } + public String getPath() { return path; } + public void setPath(String path) { + this.path = path; + } + public String getSceneInfo() { return sceneInfo; } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java index 509a214c..501abd03 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SettlementRecord.java @@ -87,7 +87,7 @@ public class SettlementRecord extends MerchantResult { @JSONField(name = "poundage_fee") private int poundageFee; - public SettlementRecord() { + protected SettlementRecord() { // jaxb required } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/TradeState.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/TradeState.java index 14a30e3c..2b302adc 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/TradeState.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/TradeState.java @@ -8,7 +8,6 @@ package com.foxinmy.weixin4j.pay.type; * @date 2014年11月2日 * @since JDK 1.6 * @see - * @deprecated 迁移到子模块weixin4j-pay */ public enum TradeState { /** From 0107fd3a7cf6f78d526551cd4f49d6e87b08603b Mon Sep 17 00:00:00 2001 From: "Kit.lee" Date: Wed, 1 Apr 2020 18:04:47 +0800 Subject: [PATCH 14/21] =?UTF-8?q?base=E5=8C=85=E7=9A=84XmlResult=E4=B9=9F?= =?UTF-8?q?=E8=A1=A5=E5=85=85setter=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/foxinmy/weixin4j/http/weixin/XmlResult.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/XmlResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/XmlResult.java index 111e76ce..2432d03f 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/XmlResult.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/XmlResult.java @@ -68,6 +68,10 @@ public class XmlResult implements Serializable { return resultCode; } + public void setReturnCode(String returnCode) { + this.returnCode = returnCode; + } + public String getErrCode() { return errCode; } @@ -84,6 +88,10 @@ public class XmlResult implements Serializable { return returnMsg; } + public void setReturnMsg(String returnMsg) { + this.returnMsg = returnMsg; + } + public void setResultCode(String resultCode) { this.resultCode = resultCode; } From 431ef219647e08df6cf1441c1a590250a1d84bce Mon Sep 17 00:00:00 2001 From: Kit Date: Tue, 26 May 2020 10:54:30 +0800 Subject: [PATCH 15/21] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=88=86=E5=B8=90=E7=9B=B8=E5=85=B3API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weixin4j-pay/pom.xml | 2 +- .../foxinmy/weixin4j/pay/WeixinPayProxy.java | 143 ++++++++++++ .../com/foxinmy/weixin4j/pay/api/PayApi.java | 26 ++- .../weixin4j/pay/api/ProfitSharingApi.java | 211 ++++++++++++++++++ .../pay/payment/mch/MchPayPackage.java | 29 ++- .../weixin4j/pay/profitsharing/ProfitId.java | 36 +++ .../profitsharing/ProfitSharingRequest.java | 86 +++++++ .../profitsharing/ProfitSharingResult.java | 127 +++++++++++ .../ProfitSharingReturnRequest.java | 153 +++++++++++++ .../ProfitSharingReturnResult.java | 167 ++++++++++++++ .../weixin4j/pay/profitsharing/Receiver.java | 101 +++++++++ .../pay/profitsharing/ReceiverProfit.java | 37 +++ .../profitsharing/ReceiverProfitResult.java | 63 ++++++ .../pay/profitsharing/ReceiverRequest.java | 41 ++++ .../pay/profitsharing/ReceiverResult.java | 38 ++++ .../weixin4j/pay/type/ProfitIdType.java | 19 ++ .../foxinmy/weixin4j/pay/type/YesNoType.java | 19 ++ .../weixin4j/pay/type/mch/DepositType.java | 20 -- .../pay/type/profitsharing/ReceiverType.java | 27 +++ .../pay/type/profitsharing/RelationType.java | 55 +++++ .../type/profitsharing/ReturnAccountType.java | 16 ++ .../weixin4j/payment/weixin.properties | 18 +- .../weixin4j/pay/test/TestFacePay.java | 1 - .../pay/test/TestProfitSharingApi.java | 53 +++++ 24 files changed, 1454 insertions(+), 34 deletions(-) create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitId.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingRequest.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingResult.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnRequest.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnResult.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfitResult.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverRequest.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverResult.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/ProfitIdType.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/YesNoType.java delete mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/mch/DepositType.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/ReceiverType.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/RelationType.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/ReturnAccountType.java create mode 100644 weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java diff --git a/weixin4j-pay/pom.xml b/weixin4j-pay/pom.xml index 34f28c52..629862b7 100644 --- a/weixin4j-pay/pom.xml +++ b/weixin4j-pay/pom.xml @@ -10,7 +10,7 @@ 4.0.0 weixin4j-pay weixin4j-pay - 1.0.1-SNAPSHOT + 1.1.0 https://github.com/foxinmy/weixin4j/tree/master/weixin4j-pay 微信支付商户平台API diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java index 563d62d4..bab00c83 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java @@ -10,10 +10,12 @@ import com.foxinmy.weixin4j.pay.payment.coupon.*; import com.foxinmy.weixin4j.pay.payment.face.PayfaceAuthinfo; import com.foxinmy.weixin4j.pay.payment.face.PayfaceAuthinfoRequest; import com.foxinmy.weixin4j.pay.payment.mch.*; +import com.foxinmy.weixin4j.pay.profitsharing.*; import com.foxinmy.weixin4j.pay.sign.WeixinSignature; import com.foxinmy.weixin4j.pay.type.*; import com.foxinmy.weixin4j.pay.type.mch.BillType; import com.foxinmy.weixin4j.pay.type.mch.RefundAccountType; +import com.foxinmy.weixin4j.pay.type.profitsharing.ReturnAccountType; import com.foxinmy.weixin4j.util.Consts; import com.foxinmy.weixin4j.util.Weixin4jConfigUtil; @@ -53,6 +55,10 @@ public class WeixinPayProxy { * 商户信息 */ private final WeixinPayAccount weixinPayAccount; + /** + * 分帐接口 + */ + private final ProfitSharingApi profitSharingApi; /** * 微信支付接口实现(使用weixin4j.properties配置的account商户信息) @@ -78,6 +84,7 @@ public class WeixinPayProxy { this.couponApi = new CouponApi(weixinPayAccount); this.cashApi = new CashApi(weixinPayAccount); this.customsApi = new CustomsApi(weixinPayAccount); + this.profitSharingApi = new ProfitSharingApi(weixinPayAccount); } /** @@ -886,5 +893,141 @@ public class WeixinPayProxy { return payApi.getWxPayfaceAuthinfo(request); } + /** + * 添加分账接收方 + * 服务商代子商户发起添加分账接收方请求,后续可通过发起分账请求将结算后的钱分到该分账接收方。 + * + * @param receiver + * 分帐接收方 + * @return + * @throws WeixinException + * @see Receiver + * @see ReceiverResult + * @see 添加分账接收方 + * @since weixin4j-pay 1.1.0 + * + */ + public ReceiverResult addProfitSharingReceiver(Receiver receiver) throws WeixinException { + return profitSharingApi.addReceiver(receiver); + } + + /** + * 删除分账接收方 + * 商户发起删除分账接收方请求,删除后不支持将结算后的钱分到该分账接收方。 + * + * @param receiver + * 分帐接收方 + * @return + * @throws WeixinException + * @see Receiver + * @see ReceiverResult + * @see 删除分账接收方 + * @since weixin4j-pay 1.1.0 + */ + public ReceiverResult removeProfitSharingReceiver(Receiver receiver) throws WeixinException { + return profitSharingApi.removeReceiver(receiver); + } + + /** + * 请求分帐 + * + * @param transactionId + * 微信订单号 + * @param outOrderNo + * 商户分帐单号 + * @param receivers + * 分帐接收方列表 + * @param multi + * 是否多次分帐,默认为单次分帐,即调用分帐成功后马上解冻剩余金额给商户,不需要完结分帐。多次分帐可多次调用分帐API,需调完结分帐结束分帐 + * @return + * @throws WeixinException + * @see 请求单次分帐 + * @since weixin4j-pay 1.1.0 + */ + public ProfitSharingResult profitSharing(String transactionId, String outOrderNo, List receivers, + Boolean multi) throws WeixinException{ + return profitSharingApi.profitSharing(transactionId, outOrderNo, receivers, multi); + } + + /** + * 分帐查询 + * + * @param transactionId + * 微信订单号 + * @param outOrderNo + * 商户分帐单号 + * @return + * @throws WeixinException + * @see 分帐查询 + * @since weixin4j-pay 1.1.0 + */ + public ProfitSharingResult profitSharingQuery(String transactionId, String outOrderNo) throws WeixinException{ + return profitSharingApi.profitSharingQuery(transactionId, outOrderNo); + } + + /** + * 完结分账 + * 1、不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给本商户 + * 2、调用多次分账接口后,需要解冻剩余资金时,调用本接口将剩余的分账金额全部解冻给特约商户 + * 3、已调用请求单次分账后,剩余待分账金额为零,不需要再调用此接口。 + * + * @param transactionId + * 微信订单号 + * @param outOrderNo + * 商户分帐单号 + * @param description + * 分帐完结描述 + * @return + * @throws WeixinException + * @see 完结分账 + * @since weixin4j-pay 1.1.0 + */ + public ProfitSharingResult profitSharingFinish(String transactionId, String outOrderNo, String description) + throws WeixinException{ + return profitSharingApi.profitSharingFinish(transactionId, outOrderNo, description); + } + + /** + * 分账回退 + * + * @param id + * 分帐单号 + * @param outReturnNo + * 商户回退单号 + * @param returnAccountType + * 回退方类型 + * @param returnAccount + * 回退方账号 + * @param description + * 回退描述 + * @return + * @throws WeixinException + * @see ProfitSharingReturnRequest + * @see 分账回退 + * @since weixin4j-pay 1.1.0 + */ + public ProfitSharingReturnResult profitSharingReturn(ProfitId id, String outReturnNo, + ReturnAccountType returnAccountType, String returnAccount, + String description) + throws WeixinException{ + return profitSharingApi.profitSharingReturn(id, outReturnNo, returnAccountType, returnAccount, description); + } + + /** + * 回退结果查询 + * + * @param id + * 分帐单号 + * @param outReturnNo + * 商户回退单号 + * @return + * @throws WeixinException + * @see ProfitSharingReturnRequest + * @see 回退结果查询 + */ + public ProfitSharingReturnResult profitSharingReturnQuery(ProfitId id, String outReturnNo) throws WeixinException{ + return profitSharingApi.profitSharingReturnQuery(id, outReturnNo); + } + public final static String VERSION = Consts.VERSION; } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java index 4ad38149..6cba45e9 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java @@ -10,7 +10,6 @@ import com.foxinmy.weixin4j.pay.payment.face.PayfaceAuthinfo; import com.foxinmy.weixin4j.pay.payment.face.PayfaceAuthinfoRequest; import com.foxinmy.weixin4j.pay.payment.mch.*; import com.foxinmy.weixin4j.pay.type.mch.BillType; -import com.foxinmy.weixin4j.pay.type.mch.DepositType; import com.foxinmy.weixin4j.pay.type.mch.RefundAccountType; import com.foxinmy.weixin4j.pay.type.*; import com.foxinmy.weixin4j.util.*; @@ -89,13 +88,13 @@ public class PayApi extends MchApi { payPackage.getAuthCode(), null, payPackage.getAttach(), null, null, payPackage.getGoodsTag(), payPackage.getLimitPay(), payPackage.getSubAppId(), payPackage.getFaceCode(), - payPackage.getDeposit()); + payPackage.getDeposit(), payPackage.getProfitSharing()); // 默认为MD5签名 SignType signType= SignType.MD5; super.declareMerchant(_payPackage); // 默认为刷卡支付(付款码支付)的API地址 String url = getRequestUri("micropay_uri"); - if(payPackage.getDeposit()==DepositType.Y){ + if(payPackage.getDeposit()==YesNoType.Y){ // 押金支付只支持HMAC-SHA256签名 signType = SignType.HMAC$SHA256; _payPackage.setSignType("HMAC-SHA256"); @@ -791,6 +790,23 @@ public class PayApi extends MchApi { return createPayRequest(payPackage); } + /** + * 创建押金支付 + * + * @param code + * @param body + * @param outTradeNo + * @param totalFee + * @param createIp + * @param openId + * @param attach + * @param store + * @param isFacePay + * @return + * @throws WeixinException + * @see 支付押金(付款码支付) + * @see 支付押金(人脸支付) + */ public MchPayRequest createDepositPayRequest(String code, String body, String outTradeNo, double totalFee, String createIp, String openId, String attach, SceneInfoStore store, boolean isFacePay) throws WeixinException { @@ -799,12 +815,12 @@ public class PayApi extends MchApi { payPackage = new MchPayPackage(body, outTradeNo, totalFee, null, createIp, TradeType.FACEPAY, openId, null, null, attach); payPackage.setFaceCode(code); - payPackage.setDeposit(DepositType.Y); + payPackage.setDeposit(YesNoType.Y); return createPayRequest(payPackage); }else{ payPackage = new MchPayPackage(body, outTradeNo, totalFee, null, createIp, TradeType.MICROPAY, openId, code, null, attach); - payPackage.setDeposit(DepositType.Y); + payPackage.setDeposit(YesNoType.Y); if (store != null) { payPackage.setSceneInfo(String.format("{\"store_info\":\"%s\"}", JSON.toJSONString(store))); diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java new file mode 100644 index 00000000..af20c112 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java @@ -0,0 +1,211 @@ +package com.foxinmy.weixin4j.pay.api; + +import com.alibaba.fastjson.TypeReference; +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.http.weixin.WeixinResponse; +import com.foxinmy.weixin4j.pay.model.WeixinPayAccount; +import com.foxinmy.weixin4j.pay.profitsharing.*; +import com.foxinmy.weixin4j.pay.type.ProfitIdType; +import com.foxinmy.weixin4j.pay.type.SignType; +import com.foxinmy.weixin4j.pay.type.profitsharing.ReturnAccountType; +import com.foxinmy.weixin4j.xml.XmlStream; + +import java.util.List; + +/** + * 微信商户平台分账接口(直连商户/服务商) + * + * @author kit (kit.li@qq.com) + * @date 2020年05月20日 + * @since weixin4j-pay 1.1.0 + */ +public class ProfitSharingApi extends MchApi { + + public ProfitSharingApi(WeixinPayAccount weixinAccount) { + super(weixinAccount); + } + + /** + * 添加分账接收方 + * 服务商代子商户发起添加分账接收方请求,后续可通过发起分账请求将结算后的钱分到该分账接收方。 + * + * @param receiver + * 分帐接收方 + * @return + * @see Receiver + * @see ReceiverResult + * @see 添加分账接收方 + * + */ + public ReceiverResult addReceiver(Receiver receiver) throws WeixinException { + ReceiverRequest receiverRequest = new ReceiverRequest(receiver); + super.declareMerchant(receiverRequest); + String url = getRequestUri("profit_sharing_add_receiver_uri"); + receiverRequest.setSign(weixinSignature.sign(receiverRequest, SignType.HMAC$SHA256)); + String para = XmlStream.toXML(receiverRequest); + WeixinResponse response = weixinExecutor.post(url, para); + return response.getAsObject(new TypeReference(){}); + } + + /** + * 删除分账接收方 + * 商户发起删除分账接收方请求,删除后不支持将结算后的钱分到该分账接收方。 + * + * @param receiver + * 分帐接收方 + * @return + * @throws WeixinException + * @see Receiver + * @see ReceiverResult + * @see 删除分账接收方 + */ + public ReceiverResult removeReceiver(Receiver receiver) throws WeixinException { + ReceiverRequest receiverRequest = new ReceiverRequest(receiver); + super.declareMerchant(receiverRequest); + String url = getRequestUri("profit_sharing_remove_receiver_uri"); + receiverRequest.setSign(weixinSignature.sign(receiverRequest, SignType.HMAC$SHA256)); + String para = XmlStream.toXML(receiverRequest); + WeixinResponse response = weixinExecutor.post(url, para); + return response.getAsObject(new TypeReference(){}); + } + + /** + * 请求分帐 + * + * @param transactionId + * 微信订单号 + * @param outOrderNo + * 商户分帐单号 + * @param receivers + * 分帐接收方 + * @param multi + * 是否多次分帐,默认为单次分帐,即调用分帐成功后马上解冻剩余金额给商户,不需要完结分帐。多次分帐可多次调用分帐API,需调完结分帐结束分帐 + * @return + * @throws WeixinException + * @see 请求单次分帐 + */ + public ProfitSharingResult profitSharing(String transactionId, String outOrderNo, List receivers, + Boolean multi) throws WeixinException { + ProfitSharingRequest request = new ProfitSharingRequest(transactionId, outOrderNo, receivers); + super.declareMerchant(request); + String url = multi==null || multi.booleanValue()==false ? getRequestUri("profit_sharing_uri") : + getRequestUri("multi_profit_sharing_uri"); + request.setSign(weixinSignature.sign(request, SignType.HMAC$SHA256)); + String para = XmlStream.toXML(request); + WeixinResponse response = getWeixinSSLExecutor().post(url, para); + return response.getAsObject(new TypeReference(){}); + } + + /** + * 分帐查询 + * + * @param transactionId + * 微信订单号 + * @param outOrderNo + * 商户分帐单号 + * @return + * @throws WeixinException + * @see 分帐查询 + */ + public ProfitSharingResult profitSharingQuery(String transactionId, String outOrderNo) throws WeixinException { + ProfitSharingRequest request = new ProfitSharingRequest(transactionId, outOrderNo, null); + super.declareMerchant(request); + String url = getRequestUri("profit_sharing_query_uri"); + request.setSign(weixinSignature.sign(request, SignType.HMAC$SHA256)); + String para = XmlStream.toXML(request); + WeixinResponse response = weixinExecutor.post(url, para); + return response.getAsObject(new TypeReference(){}); + } + + /** + * 完结分账 + * 1、不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给本商户 + * 2、调用多次分账接口后,需要解冻剩余资金时,调用本接口将剩余的分账金额全部解冻给特约商户 + * 3、已调用请求单次分账后,剩余待分账金额为零,不需要再调用此接口。 + * + * @param transactionId + * 微信订单号 + * @param outOrderNo + * 商户分帐单号 + * @param description + * 分帐完结描述 + * @return + * @throws WeixinException + * @see 完结分账 + */ + public ProfitSharingResult profitSharingFinish(String transactionId, String outOrderNo, String description) + throws WeixinException { + ProfitSharingRequest request = new ProfitSharingRequest(transactionId, outOrderNo, null); + request.setDescription(description); + super.declareMerchant(request); + String url = getRequestUri("profit_sharing_finish_uri"); + request.setSign(weixinSignature.sign(request, SignType.HMAC$SHA256)); + String para = XmlStream.toXML(request); + WeixinResponse response = getWeixinSSLExecutor().post(url, para); + return response.getAsObject(new TypeReference(){}); + } + + /** + * 分账回退 + * + * @param id + * 分帐单号 + * @param outReturnNo + * 商户回退单号 + * @param returnAccountType + * 回退方类型 + * @param returnAccount + * 回退方账号 + * @param description + * 回退描述 + * @return + * @throws WeixinException + * @see ProfitSharingReturnRequest + * @see 分账回退 + */ + public ProfitSharingReturnResult profitSharingReturn(ProfitId id, String outReturnNo, + ReturnAccountType returnAccountType, String returnAccount, + String description) throws WeixinException{ + ProfitSharingReturnRequest request; + if(id.getIdType()== ProfitIdType.ORDER_ID){ + request = new ProfitSharingReturnRequest(id.getId(), null, outReturnNo, returnAccountType, + returnAccount, description); + }else{ + request = new ProfitSharingReturnRequest(null, id.getId(), outReturnNo, returnAccountType, + returnAccount, description); + } + super.declareMerchant(request); + String url = getRequestUri("profit_sharing_return_uri"); + request.setSign(weixinSignature.sign(request, SignType.HMAC$SHA256)); + String para = XmlStream.toXML(request); + WeixinResponse response = getWeixinSSLExecutor().post(url, para); + return response.getAsObject(new TypeReference(){}); + } + + /** + * 回退结果查询 + * + * @param id + * 分帐单号 + * @param outReturnNo + * 商户回退单号 + * @return + * @throws WeixinException + * @see ProfitSharingReturnRequest + * @see 回退结果查询 + */ + public ProfitSharingReturnResult profitSharingReturnQuery(ProfitId id, String outReturnNo) throws WeixinException{ + ProfitSharingReturnRequest request; + if(id.getIdType()== ProfitIdType.ORDER_ID){ + request = new ProfitSharingReturnRequest(id.getId(), null, outReturnNo); + }else{ + request = new ProfitSharingReturnRequest(null, id.getId(), outReturnNo); + } + super.declareMerchant(request); + String url = getRequestUri("profit_sharing_return_query_uri"); + request.setSign(weixinSignature.sign(request, SignType.HMAC$SHA256)); + String para = XmlStream.toXML(request); + WeixinResponse response = weixinExecutor.post(url, para); + return response.getAsObject(new TypeReference(){}); + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java index e081b23c..5e6632a3 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.pay.payment.PayPackage; import com.foxinmy.weixin4j.pay.type.CurrencyType; import com.foxinmy.weixin4j.pay.type.TradeType; -import com.foxinmy.weixin4j.pay.type.mch.DepositType; +import com.foxinmy.weixin4j.pay.type.YesNoType; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -88,7 +88,13 @@ public class MchPayPackage extends PayPackage { */ @XmlElement(name = "deposit") @JSONField(name = "deposit") - private DepositType deposit; + private YesNoType deposit; + + /** + * 是否需要分帐,非必传,默认为不分帐 + * Y-是,需要分账,N-否,不分账 + */ + private YesNoType profitSharing; protected MchPayPackage() { // jaxb required @@ -123,7 +129,7 @@ public class MchPayPackage extends PayPackage { String openId, String authCode, String productId, String attach) { this(body, null, outTradeNo, totalFee, CurrencyType.CNY, notifyUrl, createIp, tradeType, openId, authCode, productId, attach, null, - null, null, null, null, null, null); + null, null, null, null, null, null, null); } /** @@ -168,13 +174,15 @@ public class MchPayPackage extends PayPackage { * 人脸凭证,用于旧版刷脸支付。 * @param depositType * 是否押金支付 + * @param profitSharing + * 是否需要分账 */ public MchPayPackage(String body, String detial, String outTradeNo, double totalFee, CurrencyType feeType, String notifyUrl, String createIp, TradeType tradeType, String openId, String authCode, String productId, String attach, Date timeStart, Date timeExpire, String goodsTag, String limitPay, String subOpenId, String faceCode, - DepositType depositType) { + YesNoType depositType, YesNoType profitSharing) { super(body, detial, outTradeNo, totalFee, notifyUrl, createIp, attach, timeStart, timeExpire, goodsTag); this.tradeType = tradeType != null ? tradeType.name() : null; @@ -261,14 +269,22 @@ public class MchPayPackage extends PayPackage { this.faceCode = faceCode; } - public DepositType getDeposit() { + public YesNoType getDeposit() { return deposit; } - public void setDeposit(DepositType deposit) { + public void setDeposit(YesNoType deposit) { this.deposit = deposit; } + public YesNoType getProfitSharing() { + return profitSharing; + } + + public void setProfitSharing(YesNoType profitSharing) { + this.profitSharing = profitSharing; + } + @Override public String toString() { return "MchPayPackage{" + @@ -282,6 +298,7 @@ public class MchPayPackage extends PayPackage { ", sceneInfo='" + sceneInfo + '\'' + ", faceCode='" + faceCode + '\'' + ", deposit=" + deposit + + ", profitSharing=" + profitSharing + '}'; } } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitId.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitId.java new file mode 100644 index 00000000..55379450 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitId.java @@ -0,0 +1,36 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.foxinmy.weixin4j.pay.type.ProfitIdType; + +/** + * 分帐单单号 + * + * @author kit + * @date 2020年05月25日 + * @since weixin4j-pay 1.1.0 + */ +public class ProfitId { + private String id; + private ProfitIdType idType; + + public ProfitId(String id, ProfitIdType type){ + this.id = id; + this.idType = type; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public ProfitIdType getIdType() { + return idType; + } + + public void setIdType(ProfitIdType idType) { + this.idType = idType; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingRequest.java new file mode 100644 index 00000000..741aa652 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingRequest.java @@ -0,0 +1,86 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.alibaba.fastjson.annotation.JSONField; +import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; + +import javax.xml.bind.annotation.XmlElement; +import java.util.List; + +/** + * 单次分帐的请求内容 + * + * @author kit(kit.li@qq.com) + * @date 2020年5月25日 + * @since weixin4j-pay 1.1.0 + */ +public class ProfitSharingRequest extends MerchantResult { + /** + * 只支持HMAC-SHA256 + */ + @XmlElement(name = "sign_type") + @JSONField(name = "sign_type") + private final String signType = "HMAC-SHA256"; + /** + * 微信支付订单号 + */ + @XmlElement(name = "transaction_id") + @JSONField(name = "transaction_id") + private String transactionId; + /** + * 商户订单号 + */ + @XmlElement(name = "out_trade_no") + @JSONField(name = "out_trade_no") + private String outOrderNo; + /** + * 分账接收方列表,不超过50个 + */ + private List receivers; + /** + * 分账完结描述 + */ + private String description; + + public ProfitSharingRequest(String transactionId, String outOrderNo, List receivers){ + this.transactionId = transactionId; + this.outOrderNo = outOrderNo; + this.receivers = receivers; + } + + public String getTransactionId() { + return transactionId; + } + + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } + + public String getOutOrderNo() { + return outOrderNo; + } + + public void setOutOrderNo(String outOrderNo) { + this.outOrderNo = outOrderNo; + } + + public List getReceivers() { + return receivers; + } + + public void setReceivers(List receivers) { + this.receivers = receivers; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + @Override + public String getSignType() { + return signType; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingResult.java new file mode 100644 index 00000000..46d74356 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingResult.java @@ -0,0 +1,127 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.alibaba.fastjson.annotation.JSONField; +import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; + +import javax.xml.bind.annotation.XmlElement; +import java.util.List; + +/** + * 单次分帐返回结果 + * + * @author kit + * @date 2020年05月25日 + * @since weixin4j-pay 1.1.0 + */ +public class ProfitSharingResult extends MerchantResult { + /** + * 微信支付订单号 + */ + @XmlElement(name = "transaction_id") + @JSONField(name = "transaction_id") + private String transactionId; + /** + * 商户订单号 + */ + @XmlElement(name = "out_trade_no") + @JSONField(name = "out_trade_no") + private String outOrderNo; + /** + * 微信分帐单号 + */ + @XmlElement(name = "order_id") + @JSONField(name = "order_id") + private String orderId; + /** + * 分账单状态(分帐查询) + * ACCEPTED—受理成功 + * PROCESSING—处理中 + * FINISHED—处理完成 + * CLOSED—处理失败,已关单 + */ + private String status; + /** + * 关单原因(分帐查询),非必传,默认值:NO_AUTH----分账授权已解除 + */ + @XmlElement(name = "close_reason") + @JSONField(name = "close_reason") + private String closeReason; + /** + * 分账接收方列表(分帐查询) + */ + private List receivers; + /** + * 分账金额(分帐查询) + * 分账完结的分账金额,单位为分, 仅当查询分账完结的执行结果时,存在本字段 + */ + private Integer amount; + /** + * 分帐描述(分帐查询) + * 分账完结的原因描述,仅当查询分账完结的执行结果时,存在本字段 + */ + private String description; + + public String getTransactionId() { + return transactionId; + } + + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } + + public String getOutOrderNo() { + return outOrderNo; + } + + public void setOutOrderNo(String outOrderNo) { + this.outOrderNo = outOrderNo; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getCloseReason() { + return closeReason; + } + + public void setCloseReason(String closeReason) { + this.closeReason = closeReason; + } + + public List getReceivers() { + return receivers; + } + + public void setReceivers(List receivers) { + this.receivers = receivers; + } + + public Integer getAmount() { + return amount; + } + + public void setAmount(Integer amount) { + this.amount = amount; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnRequest.java new file mode 100644 index 00000000..73b4b4ae --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnRequest.java @@ -0,0 +1,153 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.alibaba.fastjson.annotation.JSONField; +import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; +import com.foxinmy.weixin4j.pay.type.profitsharing.ReturnAccountType; + +import javax.xml.bind.annotation.XmlElement; + +/** + * 分帐回退API请求内容 + * + * @author kit (kit.li@qq.com) + * @date 2020年05月25日 + * @since weixin4j-pay 1.1.0 + */ +public class ProfitSharingReturnRequest extends MerchantResult { + /** + * 只支持HMAC-SHA256 + */ + @XmlElement(name = "sign_type") + @JSONField(name = "sign_type") + private final String signType = "HMAC-SHA256"; + /** + * 微信分帐单号 + * 原发起分账请求时,微信返回的微信分账单号,与商户分账单号一一对应。微信分账单号与商户分账单号二选一填写 + */ + private String orderId; + /** + * 商户订单号 + * 原发起分账请求时使用的商户系统内部的分账单号。微信分账单号与商户分账单号二选一填写 + */ + @XmlElement(name = "out_trade_no") + @JSONField(name = "out_trade_no") + private String outOrderNo; + /** + * 商户回退单号 + */ + @XmlElement(name = "out_return_no") + @JSONField(name = "out_return_no") + private String outReturnNo; + /** + * 回退方类型 + */ + @XmlElement(name = "return_account_type") + @JSONField(name = "return_account_type") + private ReturnAccountType returnAccountType = ReturnAccountType.MERCHANT_ID; + /** + * 回退方账号 + * 当回退方类型为商户ID时,填写商户ID + */ + @XmlElement(name = "return_account") + @JSONField(name = "return_account") + private String returnAccount; + /** + * 回退描述 + */ + private String description; + + /** + * 用于回退查询的参数构造方法 + * + * @param orderId + * 微信分帐单号 + * @param outOrderNo + * 商户分帐单号 + * @param outReturnNo + * 商户回退单号 + */ + public ProfitSharingReturnRequest(String orderId, String outOrderNo, String outReturnNo) { + this.orderId = orderId; + this.outOrderNo = outOrderNo; + this.outReturnNo = outReturnNo; + } + + /** + * 用于回退请求的参数构造方法 + * + * @param orderId + * 微信分帐单号 + * @param outOrderNo + * 商户分帐单号 + * @param outReturnNo + * 商户回退单号 + * @param returnAccountType + * 回退方类型 + * @param returnAccount + * 回退方帐号 + * @param description + * 回退描述 + */ + public ProfitSharingReturnRequest(String orderId, String outOrderNo, String outReturnNo, + ReturnAccountType returnAccountType, String returnAccount, String description) { + this.orderId = orderId; + this.outOrderNo = outOrderNo; + this.outReturnNo = outReturnNo; + this.returnAccountType = returnAccountType; + this.returnAccount = returnAccount; + this.description = description; + } + + @Override + public String getSignType() { + return signType; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOutOrderNo() { + return outOrderNo; + } + + public void setOutOrderNo(String outOrderNo) { + this.outOrderNo = outOrderNo; + } + + public String getOutReturnNo() { + return outReturnNo; + } + + public void setOutReturnNo(String outReturnNo) { + this.outReturnNo = outReturnNo; + } + + public ReturnAccountType getReturnAccountType() { + return returnAccountType; + } + + public void setReturnAccountType(ReturnAccountType returnAccountType) { + this.returnAccountType = returnAccountType; + } + + public String getReturnAccount() { + return returnAccount; + } + + public void setReturnAccount(String returnAccount) { + this.returnAccount = returnAccount; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnResult.java new file mode 100644 index 00000000..22c7da6a --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnResult.java @@ -0,0 +1,167 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.alibaba.fastjson.annotation.JSONField; +import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; +import com.foxinmy.weixin4j.pay.type.profitsharing.ReturnAccountType; + +import javax.xml.bind.annotation.XmlElement; + +/** + * 分帐回退/回退查询返回内容 + * + * @author kit(kit.li@qq.com) + * @date 2020年05年25日 + * @since weixin4j-pay 1.1.0 + */ +public class ProfitSharingReturnResult extends MerchantResult { + /** + * 微信分账单号 + */ + @XmlElement(name = "order_id") + @JSONField(name = "order_id") + private String orderId; + /** + * 商户分账单号 + */ + @XmlElement(name = "out_order_no") + @JSONField(name = "out_order_no") + private String outOrderNo; + /** + * 商户回退单号 + */ + @XmlElement(name = "out_return_no") + @JSONField(name = "out_return_no") + private String outReturnNo; + /** + * 微信回退单号 + */ + @XmlElement(name = "return_no") + @JSONField(name = "return_no") + private String returnNo; + /** + * 回退方类型 + */ + @XmlElement(name = "return_account_type") + @JSONField(name = "return_account_type") + private ReturnAccountType returnAccountType; + /** + * 回退方账号 + */ + @XmlElement(name = "return_account") + @JSONField(name = "return_account") + private String returnAccount; + /** + * 回退金额 + */ + @XmlElement(name = "return_amount") + @JSONField(name = "return_amount") + private Integer returnAmount; + /** + * 回退描述 + */ + private String description; + /** + * 回退结果 + */ + private String result; + /** + * 失败原因 + */ + @XmlElement(name = "fail_reason") + @JSONField(name = "fail_reason") + private String failReason; + /** + * 完成时间 + */ + @XmlElement(name = "finish_time") + @JSONField(name = "finish_time") + private String finishTime; + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getOutOrderNo() { + return outOrderNo; + } + + public void setOutOrderNo(String outOrderNo) { + this.outOrderNo = outOrderNo; + } + + public String getOutReturnNo() { + return outReturnNo; + } + + public void setOutReturnNo(String outReturnNo) { + this.outReturnNo = outReturnNo; + } + + public String getReturnNo() { + return returnNo; + } + + public void setReturnNo(String returnNo) { + this.returnNo = returnNo; + } + + public ReturnAccountType getReturnAccountType() { + return returnAccountType; + } + + public void setReturnAccountType(ReturnAccountType returnAccountType) { + this.returnAccountType = returnAccountType; + } + + public String getReturnAccount() { + return returnAccount; + } + + public void setReturnAccount(String returnAccount) { + this.returnAccount = returnAccount; + } + + public Integer getReturnAmount() { + return returnAmount; + } + + public void setReturnAmount(Integer returnAmount) { + this.returnAmount = returnAmount; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getFailReason() { + return failReason; + } + + public void setFailReason(String failReason) { + this.failReason = failReason; + } + + public String getFinishTime() { + return finishTime; + } + + public void setFinishTime(String finishTime) { + this.finishTime = finishTime; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java new file mode 100644 index 00000000..27d5832d --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java @@ -0,0 +1,101 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.alibaba.fastjson.annotation.JSONField; +import com.foxinmy.weixin4j.pay.type.profitsharing.ReceiverType; +import com.foxinmy.weixin4j.pay.type.profitsharing.RelationType; + +/** + * 分账接收方基础信息 + * 用于添加或删除分帐接收方时使用 + * + * @author kit(kit_21cn@21cn.com) + * @date 2020年05月20日 + * @since weixin4j-pay 1.1.0 + */ +public class Receiver { + + public Receiver(ReceiverType type, String account) { + this.type = type; + this.account = account; + this.relationType = null; + } + + public Receiver(ReceiverType type, String account, RelationType relationType) { + this.type = type; + this.account = account; + this.relationType = relationType; + } + + /** + * 分账接收方类型 + */ + private ReceiverType type; + /** + * 分账接收方帐号 + * 类型是MERCHANT_ID时,是商户ID + * 类型是PERSONAL_WECHATID时,是个人微信号 + * 类型是PERSONAL_OPENID时,是个人openid + * 类型是PERSONAL_SUB_OPENID时,是个人sub_openid + */ + private String account; + /** + * 分账接收方全称 + * 分账接收方类型是MERCHANT_ID时,是商户全称(必传) + * 分账接收方类型是PERSONAL_WECHATID 时,是个人姓名(必传) + * 分账接收方类型是PERSONAL_OPENID时,是个人姓名(选传,传则校验) + * 分账接收方类型是PERSONAL_SUB_OPENID时,是个人姓名(选传,传则校验) + */ + private String name; + /** + * 与分账方的关系类型 + */ + @JSONField(name = "relation_type") + private RelationType relationType; + /** + * 自定义的分账关系 + * 子商户与接收方具体的关系,本字段最多10个字。 + * 当字段relation_type的值为CUSTOM时,本字段必填 + */ + @JSONField(name = "custom_relation") + private String customRelation; + + public ReceiverType getType() { + return type; + } + + public void setType(ReceiverType type) { + this.type = type; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public RelationType getRelationType() { + return relationType; + } + + public void setRelationType(RelationType relationType) { + this.relationType = relationType; + } + + public String getCustomRelation() { + return customRelation; + } + + public void setCustomRelation(String customRelation) { + this.customRelation = customRelation; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java new file mode 100644 index 00000000..75a18f94 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java @@ -0,0 +1,37 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.foxinmy.weixin4j.pay.type.profitsharing.ReceiverType; + +/** + * 请求分帐时使用的分帐方信息 + * + * @author kit(kit.li@qq.com) + * @date 2020年05月25日 + * @since weixin4j-pay 1.1.0 + */ +public class ReceiverProfit extends Receiver { + private int amount; + private String description; + + public ReceiverProfit(ReceiverType type, String account, int amount, String description){ + super(type, account); + this.amount = amount; + this.description = description; + } + + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfitResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfitResult.java new file mode 100644 index 00000000..944f2d2d --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfitResult.java @@ -0,0 +1,63 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.alibaba.fastjson.annotation.JSONField; +import com.foxinmy.weixin4j.pay.type.profitsharing.ReceiverType; + +import javax.xml.bind.annotation.XmlElement; + +/** + * 分帐方添加删除API调用结果 + * + * @author kit (kit.li@qq.com) + * @date 2020年05月25日 + * @since weixin4j-pay 1.1.0 + */ +public class ReceiverProfitResult extends ReceiverProfit { + /** + * 分帐结果: + * PENDING:待分账 + * SUCCESS:分账成功 + * ADJUST:分账失败待调账 + * RETURNED:已转回分账方 + * CLOSED: 已关闭 + */ + private String result; + /** + * 分账完成时间 + */ + @XmlElement(name = "finish_time") + @JSONField(name = "finish_time") + private String finishTime; + @XmlElement(name = "fail_reason") + @JSONField(name = "fail_reason") + private String failReason; + + public ReceiverProfitResult(ReceiverType type, String account, int amount, String description, String result){ + super(type, account, amount, description); + this.result = result; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getFinishTime() { + return finishTime; + } + + public void setFinishTime(String finishTime) { + this.finishTime = finishTime; + } + + public String getFailReason() { + return failReason; + } + + public void setFailReason(String failReason) { + this.failReason = failReason; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverRequest.java new file mode 100644 index 00000000..f052f038 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverRequest.java @@ -0,0 +1,41 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; +import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; + +import javax.xml.bind.annotation.XmlElement; + +/** + * 分帐方添加及删除的API请求 + * + * @author kit (kit.li@qq.com) + * @date 2020年05月20日 + * @since weixin4j-pay 1.1.0 + */ +public class ReceiverRequest extends MerchantResult { + + @XmlElement(name = "sign_type") + @JSONField(name = "sign_type") + private final String signType = "HMAC-SHA256"; + + public ReceiverRequest(Receiver receiver){ + super(); + this.receiver = JSON.toJSONString(receiver); + } + + private String receiver; + + public String getReceiver() { + return this.receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } + + @Override + public String getSignType() { + return signType; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverResult.java new file mode 100644 index 00000000..b44c7810 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverResult.java @@ -0,0 +1,38 @@ +package com.foxinmy.weixin4j.pay.profitsharing; + +import com.alibaba.fastjson.JSON; +import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; + +/** + * 微信支付-服务商分帐接口-分帐接收方API返回结果 + * + * @author kit(kit_21cn@21cn.com) + * @className ProfitSharingReceiverResult + * @date 2020年05月20日 + * @since weixin4j-pay 1.1.0 + */ +public class ReceiverResult extends MerchantResult { + /** + * 分账接收方对象,json格式字符串 + */ + private String receiver; + + public String getReceiver() { + return receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } + + /** + * 返回接收方java对象 + */ + public Receiver getReceiverObject(){ + try { + return JSON.parseObject(receiver, Receiver.class); + } catch (Exception e) { + return null; + } + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/ProfitIdType.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/ProfitIdType.java new file mode 100644 index 00000000..55ad96ee --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/ProfitIdType.java @@ -0,0 +1,19 @@ +package com.foxinmy.weixin4j.pay.type; + +/** + * 分帐单号类型 + * + * @author kit (kit.li@qq.com) + * @date 2020年05月25日 + * @since weixin4j-pay 1.1.0 + */ +public enum ProfitIdType { + /** + * 微信分帐单号 + */ + ORDER_ID, + /** + * 商户分帐单号 + */ + OUT_ORDER_NO +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/YesNoType.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/YesNoType.java new file mode 100644 index 00000000..05b80dc5 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/YesNoType.java @@ -0,0 +1,19 @@ +package com.foxinmy.weixin4j.pay.type; + +/** + * 通用的是或否参数 + * + * @author kit (kit.li@qq.com) + * @date 2020年05月22日 + * @since weixin4j-pay 1.1.0 + */ +public enum YesNoType { + /** + * 是 + */ + Y, + /** + * 否 + */ + N +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/mch/DepositType.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/mch/DepositType.java deleted file mode 100644 index 08524415..00000000 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/mch/DepositType.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.foxinmy.weixin4j.pay.type.mch; - -/** - * 是否押金支付 - * - * @className DepositType - * @author kit(kit_21cn@21cn.com) - * @date 2019年9月21日 - * @since JDK 1.6 - */ -public enum DepositType { - /** - * 是 - */ - Y, - /** - * 否 - */ - N; -} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/ReceiverType.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/ReceiverType.java new file mode 100644 index 00000000..29dd6d3f --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/ReceiverType.java @@ -0,0 +1,27 @@ +package com.foxinmy.weixin4j.pay.type.profitsharing; + +/** + * 分帐接收方类型 + * + * @author kit (kit.li@qq.com) + * @date 2020年05月20日 + * @since weixin4j-pay 1.1.0 + */ +public enum ReceiverType { + /** + * 商户ID + */ + MERCHANT_ID, + /** + * 个人微信号 + */ + PERSONAL_WECHATID, + /** + * 个人微信openid + */ + PERSONAL_OPENID, + /** + * 个人微信sub_openid (对应服务商API的子商户sub_appid转换得到) + */ + PERSONAL_SUB_OPENID; +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/RelationType.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/RelationType.java new file mode 100644 index 00000000..90d197be --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/RelationType.java @@ -0,0 +1,55 @@ +package com.foxinmy.weixin4j.pay.type.profitsharing; + +/** + * 子商户与接收方的关系 + * + * @author kit (kit.li@qq.com) + * @date 2020年05月20日 + * @since weixin4j-pay 1.1.0 + */ +public enum RelationType { + /** + * 服务商 + */ + SERVICE_PROVIDER, + /** + * 门店 + */ + STORE, + /** + * 员工 + */ + STAFF, + /** + * 店主 + */ + STORE_OWNER, + /** + * 合作伙伴 + */ + PARTNER, + /** + * 总部 + */ + HEADQUARTER, + /** + * 品牌方 + */ + BRAND, + /** + * 分销商 + */ + DISTRIBUTOR, + /** + * 用户 + */ + USER, + /** + * 供应商 + */ + SUPPLIER, + /** + * 自定义 + */ + CUSTOM; +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/ReturnAccountType.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/ReturnAccountType.java new file mode 100644 index 00000000..37b0492e --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/profitsharing/ReturnAccountType.java @@ -0,0 +1,16 @@ +package com.foxinmy.weixin4j.pay.type.profitsharing; + +/** + * 分帐回退的回退方类型 + * + * @author kit + * @date 2020年05月25日 + * @since weixin4j-pay 1.1.0 + */ +public enum ReturnAccountType { + /** + * 商户ID + * 目前仅支付商户接收方的回退 + */ + MERCHANT_ID +} diff --git a/weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/payment/weixin.properties b/weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/payment/weixin.properties index 635bb53b..d92e56e4 100644 --- a/weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/payment/weixin.properties +++ b/weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/payment/weixin.properties @@ -61,4 +61,20 @@ facepay_url={mch_base_url}/pay/facepay # \u652F\u4ED8\u62BC\u91D1\uFF08\u4EBA\u8138\uFF09 deposit_facepay_uri={mch_base_url}/deposit/facepay # \u652F\u4ED8\u62BC\u91D1\uFF08\u4ED8\u6B3E\u7801\uFF09 -deposit_micropay_uri={mch_base_url}/deposit/micropay \ No newline at end of file +deposit_micropay_uri={mch_base_url}/deposit/micropay +# \u670D\u52A1\u5546\u5206\u5E10\u63A5\u53E3--\u6DFB\u52A0\u5206\u8D26\u63A5\u6536\u65B9 +profit_sharing_add_receiver_uri={mch_base_url}/pay/profitsharingaddreceiver +# \u670D\u52A1\u5546\u5206\u5E10\u63A5\u53E3--\u5220\u9664\u5206\u8D26\u63A5\u6536\u65B9 +profit_sharing_remove_receiver_uri={mch_base_url}/pay/profitsharingremovereceiver +# \u8BF7\u6C42\u5355\u6B21\u5206\u5E10 +profit_sharing_uri={mch_base_url}/secapi/pay/profitsharing +# \u8BF7\u6C42\u591A\u6B21\u5206\u5E10 +multi_profit_sharing_uri={mch_base_url}/secapi/pay/multiprofitsharing +# \u67E5\u8BE2\u5206\u8D26\u7ED3\u679C +profit_sharing_query_uri={mch_base_url}/pay/profitsharingquery +# \u5206\u5E10\u5B8C\u7ED3 +profit_sharing_finish_uri={mch_base_url}/secapi/pay/profitsharingfinish +# \u5206\u5E10\u56DE\u9000 +profit_sharing_return_uri={mch_base_url}/secapi/pay/profitsharingreturn +# \u5206\u5E10\u56DE\u9000\u67E5\u8BE2 +profit_sharing_return_query_uri={mch_base_url}/pay/profitsharingreturnquery diff --git a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestFacePay.java b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestFacePay.java index 8b3145c1..9f2a30c5 100644 --- a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestFacePay.java +++ b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestFacePay.java @@ -6,7 +6,6 @@ import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.pay.WeixinPayProxy; import com.foxinmy.weixin4j.pay.model.WeixinPayAccount; import com.foxinmy.weixin4j.pay.payment.mch.MchPayRequest; -import com.foxinmy.weixin4j.pay.type.mch.DepositType; import org.junit.Test; public class TestFacePay { diff --git a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java new file mode 100644 index 00000000..635af78c --- /dev/null +++ b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java @@ -0,0 +1,53 @@ +package com.foxinmy.weixin4j.pay.test; + +import com.alibaba.fastjson.JSON; +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.pay.WeixinPayProxy; +import com.foxinmy.weixin4j.pay.model.WeixinPayAccount; +import com.foxinmy.weixin4j.pay.profitsharing.Receiver; +import com.foxinmy.weixin4j.pay.profitsharing.ReceiverResult; +import com.foxinmy.weixin4j.pay.type.profitsharing.ReceiverType; +import com.foxinmy.weixin4j.pay.type.profitsharing.RelationType; +import org.junit.Assert; +import org.junit.Test; + +public class TestProfitSharingApi { + // 微信公众号appid + private static String APPID = "wx8208082617097c70"; + // 微信支付商户密钥 + private static String PAY_SIGN_KEY = "musegogogomusegogogomusegogogo16"; + // 商户号 + private static String MCHID = "1319061501"; + // + private static String OPENID = "oIkWcwtHXPp32ISw_Ept3FUQ1DM4"; + + /** + * 测试添加分帐方 + */ + // @Test + public void testAddReceiver() throws WeixinException { + Receiver receiver = new Receiver(ReceiverType.PERSONAL_OPENID, OPENID, RelationType.STAFF); + WeixinPayAccount account = new WeixinPayAccount(APPID, PAY_SIGN_KEY, MCHID); + WeixinPayProxy proxy = new WeixinPayProxy(account); + ReceiverResult result = proxy.addProfitSharingReceiver(receiver); + System.out.println(JSON.toJSONString(result)); + Assert.assertEquals(result.getReturnCode(), "SUCCESS"); + } + + /** + * 测试删除分帐方 + */ + //@Test + public void testRemoveReceiver() throws WeixinException { + Receiver receiver = new Receiver(ReceiverType.PERSONAL_OPENID, OPENID); + WeixinPayAccount account = new WeixinPayAccount(APPID, PAY_SIGN_KEY, MCHID); + WeixinPayProxy proxy = new WeixinPayProxy(account); + ReceiverResult result = proxy.removeProfitSharingReceiver(receiver); + System.out.println(JSON.toJSONString(result)); + Assert.assertEquals(result.getReturnCode(), "SUCCESS"); + } + + public void testProfitPay() throws WeixinException { + + } +} From 1d0790ad4ace4ee2ae59934bbc7c5c7d410a639d Mon Sep 17 00:00:00 2001 From: Kit Date: Tue, 26 May 2020 10:55:28 +0800 Subject: [PATCH 16/21] =?UTF-8?q?=E9=80=82=E5=BA=94JDK=209=E4=BB=A5?= =?UTF-8?q?=E4=B8=8A=E7=9A=84java=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- weixin4j-mp/pom.xml | 7 +++++++ weixin4j-server/pom.xml | 7 +++++++ weixin4j-serverX/pom.xml | 12 ++++++++++++ 3 files changed, 26 insertions(+) diff --git a/weixin4j-mp/pom.xml b/weixin4j-mp/pom.xml index 2c9ef8f3..c7e9bea1 100644 --- a/weixin4j-mp/pom.xml +++ b/weixin4j-mp/pom.xml @@ -25,6 +25,13 @@ weixin4j-base ${project.version} + + + javax.xml.bind + jaxb-api + 2.2.11 + provided + junit junit diff --git a/weixin4j-server/pom.xml b/weixin4j-server/pom.xml index b67857f1..19878129 100644 --- a/weixin4j-server/pom.xml +++ b/weixin4j-server/pom.xml @@ -29,6 +29,13 @@ fastjson ${fastjson.version} + + + javax.xml.bind + jaxb-api + 2.2.11 + provided + junit junit diff --git a/weixin4j-serverX/pom.xml b/weixin4j-serverX/pom.xml index 7b924bb5..58dab73b 100644 --- a/weixin4j-serverX/pom.xml +++ b/weixin4j-serverX/pom.xml @@ -26,6 +26,18 @@ spring-webmvc ${spring.version} + + + javax.xml.bind + jaxb-api + 2.2.11 + provided + + + javax.annotation + javax.annotation-api + 1.3.2 + javax.servlet servlet-api From 78a53b8016b8165fa74965e3a0cfd7e1786dc0e7 Mon Sep 17 00:00:00 2001 From: Kit Date: Wed, 27 May 2020 09:49:58 +0800 Subject: [PATCH 17/21] bug fix --- .../com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java index 5e6632a3..4126cb0f 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java @@ -94,6 +94,8 @@ public class MchPayPackage extends PayPackage { * 是否需要分帐,非必传,默认为不分帐 * Y-是,需要分账,N-否,不分账 */ + @XmlElement(name = "profit_sharing") + @JSONField(name = "profit_sharing") private YesNoType profitSharing; protected MchPayPackage() { From 61b905d543ab926f24e013ed14e9be8293072be1 Mon Sep 17 00:00:00 2001 From: Kit Date: Wed, 27 May 2020 11:10:56 +0800 Subject: [PATCH 18/21] fix --- .../weixin4j/pay/profitsharing/Receiver.java | 14 ++++++++------ .../weixin4j/pay/profitsharing/ReceiverProfit.java | 2 +- .../weixin4j/pay/test/TestProfitSharingApi.java | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java index 27d5832d..ee654a11 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java @@ -14,18 +14,20 @@ import com.foxinmy.weixin4j.pay.type.profitsharing.RelationType; */ public class Receiver { - public Receiver(ReceiverType type, String account) { - this.type = type; - this.account = account; - this.relationType = null; - } - public Receiver(ReceiverType type, String account, RelationType relationType) { this.type = type; this.account = account; this.relationType = relationType; } + public Receiver(ReceiverType type, String account, String name, RelationType relationType, String customRelation) { + this.type = type; + this.account = account; + this.name = name; + this.relationType = relationType; + this.customRelation = customRelation; + } + /** * 分账接收方类型 */ diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java index 75a18f94..52b301cd 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java @@ -14,7 +14,7 @@ public class ReceiverProfit extends Receiver { private String description; public ReceiverProfit(ReceiverType type, String account, int amount, String description){ - super(type, account); + super(type, account, null); this.amount = amount; this.description = description; } diff --git a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java index 635af78c..b435ddf7 100644 --- a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java +++ b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java @@ -39,7 +39,7 @@ public class TestProfitSharingApi { */ //@Test public void testRemoveReceiver() throws WeixinException { - Receiver receiver = new Receiver(ReceiverType.PERSONAL_OPENID, OPENID); + Receiver receiver = new Receiver(ReceiverType.PERSONAL_OPENID, OPENID, null); WeixinPayAccount account = new WeixinPayAccount(APPID, PAY_SIGN_KEY, MCHID); WeixinPayProxy proxy = new WeixinPayProxy(account); ReceiverResult result = proxy.removeProfitSharingReceiver(receiver); From 9bb9918421fa12466cbaefbb349819c32460e46b Mon Sep 17 00:00:00 2001 From: Kit Date: Wed, 27 May 2020 16:10:35 +0800 Subject: [PATCH 19/21] bug fix --- .../foxinmy/weixin4j/pay/WeixinPayProxy.java | 5 +++-- .../weixin4j/pay/api/ProfitSharingApi.java | 8 +++++--- .../ProfitSharingReturnRequest.java | 18 +++++++++++++++++- .../weixin4j/pay/profitsharing/Receiver.java | 2 ++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java index bab00c83..a02d03b3 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java @@ -1008,9 +1008,10 @@ public class WeixinPayProxy { */ public ProfitSharingReturnResult profitSharingReturn(ProfitId id, String outReturnNo, ReturnAccountType returnAccountType, String returnAccount, - String description) + int returnAmount, String description) throws WeixinException{ - return profitSharingApi.profitSharingReturn(id, outReturnNo, returnAccountType, returnAccount, description); + return profitSharingApi.profitSharingReturn(id, outReturnNo, returnAccountType, returnAccount, returnAmount, + description); } /** diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java index af20c112..78b08108 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java @@ -156,6 +156,8 @@ public class ProfitSharingApi extends MchApi { * 回退方类型 * @param returnAccount * 回退方账号 + * @param returnAmount + * 回退金额 * @param description * 回退描述 * @return @@ -165,14 +167,14 @@ public class ProfitSharingApi extends MchApi { */ public ProfitSharingReturnResult profitSharingReturn(ProfitId id, String outReturnNo, ReturnAccountType returnAccountType, String returnAccount, - String description) throws WeixinException{ + int returnAmount, String description) throws WeixinException{ ProfitSharingReturnRequest request; if(id.getIdType()== ProfitIdType.ORDER_ID){ request = new ProfitSharingReturnRequest(id.getId(), null, outReturnNo, returnAccountType, - returnAccount, description); + returnAccount, returnAmount, description); }else{ request = new ProfitSharingReturnRequest(null, id.getId(), outReturnNo, returnAccountType, - returnAccount, description); + returnAccount, returnAmount, description); } super.declareMerchant(request); String url = getRequestUri("profit_sharing_return_uri"); diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnRequest.java index 73b4b4ae..9fab9edc 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnRequest.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingReturnRequest.java @@ -51,6 +51,12 @@ public class ProfitSharingReturnRequest extends MerchantResult { @XmlElement(name = "return_account") @JSONField(name = "return_account") private String returnAccount; + /** + * 回退金额 + */ + @XmlElement(name = "return_amount") + @JSONField(name = "return_amount") + private int returnAmount; /** * 回退描述 */ @@ -89,12 +95,14 @@ public class ProfitSharingReturnRequest extends MerchantResult { * 回退描述 */ public ProfitSharingReturnRequest(String orderId, String outOrderNo, String outReturnNo, - ReturnAccountType returnAccountType, String returnAccount, String description) { + ReturnAccountType returnAccountType, String returnAccount, + int returnAmount, String description) { this.orderId = orderId; this.outOrderNo = outOrderNo; this.outReturnNo = outReturnNo; this.returnAccountType = returnAccountType; this.returnAccount = returnAccount; + this.returnAmount = returnAmount; this.description = description; } @@ -143,6 +151,14 @@ public class ProfitSharingReturnRequest extends MerchantResult { this.returnAccount = returnAccount; } + public int getReturnAmount() { + return returnAmount; + } + + public void setReturnAmount(int returnAmount) { + this.returnAmount = returnAmount; + } + public String getDescription() { return description; } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java index ee654a11..64086769 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/Receiver.java @@ -14,6 +14,8 @@ import com.foxinmy.weixin4j.pay.type.profitsharing.RelationType; */ public class Receiver { + public Receiver(){} + public Receiver(ReceiverType type, String account, RelationType relationType) { this.type = type; this.account = account; From e83c62824bc12da45f23e9fba63aef33c3590893 Mon Sep 17 00:00:00 2001 From: Kit Date: Thu, 4 Jun 2020 20:35:31 +0800 Subject: [PATCH 20/21] bug fix --- .../weixin4j/pay/PayPackageBuilder.java | 246 ++++++++++++++++++ .../foxinmy/weixin4j/pay/WeixinPayProxy.java | 36 +-- .../com/foxinmy/weixin4j/pay/api/MchApi.java | 2 +- .../com/foxinmy/weixin4j/pay/api/PayApi.java | 51 +--- .../weixin4j/pay/api/ProfitSharingApi.java | 5 +- .../pay/payment/mch/MchPayPackage.java | 50 ++-- .../weixin4j/pay/payment/mch/SceneInfo.java | 16 ++ .../pay/payment/mch/SceneInfoApp.java | 30 ++- .../pay/payment/mch/SceneInfoStore.java | 16 +- .../profitsharing/ProfitSharingRequest.java | 13 +- .../profitsharing/ProfitSharingResult.java | 13 +- .../pay/profitsharing/ReceiverProfit.java | 7 + .../pay/profitsharing/ReceiverResult.java | 3 + .../foxinmy/weixin4j/pay/type/YesNoType.java | 19 -- .../{payment => pay}/weixin.properties | 0 .../weixin4j/pay/test/TestFacePay.java | 30 --- 16 files changed, 371 insertions(+), 166 deletions(-) create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/PayPackageBuilder.java create mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfo.java delete mode 100644 weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/YesNoType.java rename weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/{payment => pay}/weixin.properties (100%) delete mode 100644 weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestFacePay.java diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/PayPackageBuilder.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/PayPackageBuilder.java new file mode 100644 index 00000000..0b820600 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/PayPackageBuilder.java @@ -0,0 +1,246 @@ +package com.foxinmy.weixin4j.pay; + +import com.alibaba.fastjson.JSON; +import com.foxinmy.weixin4j.pay.payment.mch.MchPayPackage; +import com.foxinmy.weixin4j.pay.payment.mch.SceneInfo; +import com.foxinmy.weixin4j.pay.payment.mch.SceneInfoApp; +import com.foxinmy.weixin4j.pay.payment.mch.SceneInfoStore; +import com.foxinmy.weixin4j.pay.type.TradeType; + +import java.util.Date; + +/** + * MchPayPackage生成器 + * + * 微信支付中很多新增的支付产品或功能不定期的在原来各种支付API中添加参数项,导致MchPayPackage类会不断更新 + * MchPayPackage构造方法参数会越来越多,不断增加的参数项也不好继续改构造方法。 + * PayApi中一些特定的支付api(如JSAPI、MACROPAY)等都是直接传入参数,然后在API内构造MchPayPackage,而不是传入MchPayPackage, + * 一旦增加新参数就需要改API,影响正在使用SDK的工程,但如果改为直接使用MchPayPackag的createPayRequest方法, + * MchPayPackage的构造方式又太难看,开发者需要对着微信文档然后看着构造函数里边一大堆的参数一一匹配 + * 所以最终有了PayPackageBuilder这个类,通过一些链式的API构造MchPayPackage,既提供最小参数的各种支付构造方法,又能让代码看上去直观一些 + * + * @author kit (kit.li@qq.com) + * @date 2020年06月02日 + */ +public class PayPackageBuilder { + private static final String Y = "Y"; + private MchPayPackage mchPayPackage; + + private PayPackageBuilder(){ + } + + /** + * 使用MchPayPackage初始化 + * + * @param payPackage + * @return + */ + public static PayPackageBuilder init(MchPayPackage payPackage){ + PayPackageBuilder instance = new PayPackageBuilder(); + instance.mchPayPackage = payPackage; + return instance; + } + + /** + * 付款码支付/人脸支付 + * + * @param body + * 商品描述 + * @param outTradeNo + * 商户订单号 + * @param totalFee + * 支付金额 + * @param createIp + * 终端IP + * @param authCode + * 用户付款码 + * @return + */ + public static PayPackageBuilder microPay(String body, String outTradeNo, double totalFee, String createIp, + String authCode){ + PayPackageBuilder instance = new PayPackageBuilder(); + instance.mchPayPackage = new MchPayPackage(body, outTradeNo, totalFee, null, createIp, TradeType.MICROPAY, + null, authCode, null, null); + return instance; + } + + /** + * JSAPI支付/小程序支付 + * + * @param body + * 商品描述 + * @param outTradeNo + * 商户订单号 + * @param totalFee + * 支付金额 + * @param createIp + * 终端IP + * @param notifyUrl + * 回调通知地址 + * @param openid + * 用户标识 + * @return + */ + public static PayPackageBuilder jsapiPay(String body, String outTradeNo, double totalFee, String createIp, + String notifyUrl, String openid){ + PayPackageBuilder instance = new PayPackageBuilder(); + instance.mchPayPackage = new MchPayPackage(body, outTradeNo, totalFee, notifyUrl, createIp, TradeType.JSAPI, + openid, null, null, null); + return instance; + } + + /** + * native支付 + * + * @param body + * 商品描述 + * @param outTradeNo + * 商户订单号 + * @param totalFee + * 支付金额 + * @param createIp + * 终端IP + * @param notifyUrl + * 回调通知地址 + * @param productId + * 产品ID + * @return + */ + public static PayPackageBuilder nativePay(String body, String outTradeNo, double totalFee, String createIp, + String notifyUrl, String productId){ + PayPackageBuilder instance = new PayPackageBuilder(); + instance.mchPayPackage = new MchPayPackage(body, outTradeNo, totalFee, notifyUrl, createIp, TradeType.NATIVE, + null, null, productId, null); + return instance; + } + + /** + * APP支付 + * + * @param body + * 商品描述 + * @param outTradeNo + * 商户订单号 + * @param totalFee + * 支付金额 + * @param createIp + * 终端IP + * @param notifyUrl + * 回调通知地址 + * @return + */ + public static PayPackageBuilder appPay(String body, String outTradeNo, double totalFee, String createIp, String notifyUrl){ + PayPackageBuilder instance = new PayPackageBuilder(); + instance.mchPayPackage = new MchPayPackage(body, outTradeNo, totalFee, notifyUrl, createIp, TradeType.APP, + null, null, null, null); + return instance; + } + + /** + * H5支付 + * + * @param body + * 商品描述 + * @param outTradeNo + * 商户订单号 + * @param totalFee + * 支付金额 + * @param createIp + * 终端IP + * @param notifyUrl + * 回调通知地址 + * @param wapUrl + * wap网站URL地址 + * @param wapName + * wap网站名 + * @return + */ + public static PayPackageBuilder h5Pay(String body, String outTradeNo, double totalFee, String createIp, + String notifyUrl, String wapUrl, String wapName){ + PayPackageBuilder instance = new PayPackageBuilder(); + instance.mchPayPackage = new MchPayPackage(body, outTradeNo, totalFee, notifyUrl, createIp, TradeType.APP, + null, null, null, null); + SceneInfoApp app = SceneInfoApp.createWapAPP(wapName, wapUrl); + instance.mchPayPackage.setSceneInfo(String.format("{\"h5_info\":\"%s\"}", app.getSceneInfo())); + return instance; + } + + public PayPackageBuilder detail(String detail){ + this.mchPayPackage.setDetail(detail); + return this; + } + + public PayPackageBuilder attach(String attach){ + this.mchPayPackage.setAttach(attach); + return this; + } + + public PayPackageBuilder goodsTag(String goodsTag){ + this.mchPayPackage.setGoodsTag(goodsTag); + return this; + } + + public PayPackageBuilder limitPay(){ + this.mchPayPackage.setLimitPay("no_credit"); + return this; + } + + public PayPackageBuilder timeStart(Date date){ + this.mchPayPackage.setTimeStart(date); + return this; + } + + public PayPackageBuilder timeStart(String date){ + this.mchPayPackage.setTimeStart(date); + return this; + } + + public PayPackageBuilder timeExpire(Date date){ + this.mchPayPackage.setTimeExpire(date); + return this; + } + + public PayPackageBuilder timeExpire(String date){ + this.mchPayPackage.setTimeExpire(date); + return this; + } + + public PayPackageBuilder receipt(){ + this.mchPayPackage.setReceipt(Y); + return this; + } + + public PayPackageBuilder sceneInfo(SceneInfo info){ + this.mchPayPackage.setSceneInfo(info.toJson()); + return this; + } + + public PayPackageBuilder deposit(){ + this.mchPayPackage.setDeposit(Y); + return this; + } + + public PayPackageBuilder profitSharing(){ + this.mchPayPackage.setProfitSharing(Y); + return this; + } + + public PayPackageBuilder subOpenId(String subOpenId){ + this.mchPayPackage.setSubOpenId(subOpenId); + return this; + } + + public PayPackageBuilder totalFee(double totalFee){ + this.mchPayPackage.setTotalFee(totalFee); + return this; + } + + public PayPackageBuilder totalFee(int totalFee){ + this.mchPayPackage.setTotalFee(totalFee); + return this; + } + + public MchPayPackage build(){ + return this.mchPayPackage; + } +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java index a02d03b3..7686b5ba 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java @@ -279,7 +279,7 @@ public class WeixinPayProxy { * @param attach * 附加数据 非必填 * @param store - * 门店信息 非必填 + * APP支付已无门店信息,不需要再传 * @return APP支付对象 * @see PayApi * @see SceneInfoStore @@ -366,41 +366,9 @@ public class WeixinPayProxy { totalFee, createIp, attach, store); } - /** - * 旧版刷脸支付接口 - * - * @param faceCode - * 人脸凭证 - * @param body - * 商品或支付单简要描述,格式要求:门店品牌名-城市分店名-实际商品名称 - * @param outTradeNo - * 商户系统内部的订单号,32个字符内、可包含字母;更换授权码必须要换新的商户订单号 - * @param totalFee - * 订单总金额,单位元 - * @param createIp - * 调用微信支付API的机器IP - * @param openId - * 用户在商户appid 下的唯一标识 - * @param attach - * 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 - * @return - * @throws WeixinException - * @see - * 刷脸支付后端接口 - * @see - */ - public MchPayRequest createFacePayRequest(String faceCode, String body, - String outTradeNo, double totalFee, String createIp, String openId, - String attach) throws WeixinException { - return payApi.createFacePayRequest(faceCode, body, outTradeNo, - totalFee, createIp, openId, attach); - } - /** * 押金支付请求 + * 注意:(此功能微信已下架,改为邀请开通,因此暂未使用) * * @param code * 授权码/人脸凭证 diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/MchApi.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/MchApi.java index 104efa19..10102c3f 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/MchApi.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/MchApi.java @@ -35,7 +35,7 @@ public class MchApi extends BaseApi { private final static String PEM_CERT_PREFIX = "-----BEGIN CERTIFICATE-----"; static { - WEIXIN_BUNDLE = ResourceBundle.getBundle("com/foxinmy/weixin4j/payment/weixin"); + WEIXIN_BUNDLE = ResourceBundle.getBundle("com/foxinmy/weixin4j/pay/weixin"); } protected final WeixinPayAccount weixinAccount; diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java index 6cba45e9..07f16308 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java @@ -33,6 +33,8 @@ import java.util.Map; */ public class PayApi extends MchApi { + private final static String Y = "Y"; + public PayApi(WeixinPayAccount weixinAccount) { super(weixinAccount); } @@ -87,14 +89,14 @@ public class PayApi extends MchApi { null, payPackage.getCreateIp(), null, payPackage.getOpenId(), payPackage.getAuthCode(), null, payPackage.getAttach(), null, null, payPackage.getGoodsTag(), - payPackage.getLimitPay(), payPackage.getSubAppId(), payPackage.getFaceCode(), + payPackage.getLimitPay(), payPackage.getSubAppId(), payPackage.getReceipt(), payPackage.getDeposit(), payPackage.getProfitSharing()); // 默认为MD5签名 SignType signType= SignType.MD5; super.declareMerchant(_payPackage); // 默认为刷卡支付(付款码支付)的API地址 String url = getRequestUri("micropay_uri"); - if(payPackage.getDeposit()==YesNoType.Y){ + if(Y.equals(payPackage.getDeposit())){ // 押金支付只支持HMAC-SHA256签名 signType = SignType.HMAC$SHA256; _payPackage.setSignType("HMAC-SHA256"); @@ -275,7 +277,7 @@ public class PayApi extends MchApi { * @param attach * 附加数据 非必填 * @param store - * 门店信息 非必填 + * APP支付已无门店信息,不需要再传 * @return APP支付对象 * @see SceneInfoStore * @see APPPayRequest @@ -290,11 +292,6 @@ public class PayApi extends MchApi { MchPayPackage payPackage = new MchPayPackage(body, outTradeNo, totalFee, notifyUrl, createIp, TradeType.APP, null, null, null, attach); - if (store != null) { - payPackage.setSceneInfo(String.format( - "{\"store_id\": \"%s\", \"store_name\":\"%s\"}", - store.getId(), store.getName())); - } return createPayRequest(payPackage); } @@ -331,8 +328,7 @@ public class PayApi extends MchApi { totalFee, notifyUrl, createIp, TradeType.MWEB, null, null, null, attach); if (app != null) { - payPackage.setSceneInfo(String.format("{\"h5_info\":\"%s\"}", - app.getSceneInfo())); + payPackage.setSceneInfo(app.toJson()); } return createPayRequest(payPackage); } @@ -370,8 +366,7 @@ public class PayApi extends MchApi { totalFee, null, createIp, TradeType.MICROPAY, null, authCode, null, attach); if (store != null) { - payPackage.setSceneInfo(String.format("{\"store_info\":\"%s\"}", - JSON.toJSONString(store))); + payPackage.setSceneInfo(store.toJson()); } return createPayRequest(payPackage); } @@ -767,29 +762,6 @@ public class PayApi extends MchApi { return response.getAsObject(new TypeReference() {}); } - /** - * 微信旧版刷脸支付 - * - * @param faceCode - * @param body - * @param outTradeNo - * @param totalFee - * @param createIp - * @param openId - * @param attach - * @return - * @throws WeixinException - */ - public MchPayRequest createFacePayRequest(String faceCode, String body, - String outTradeNo, double totalFee, String createIp, String openId, - String attach) throws WeixinException { - MchPayPackage payPackage = new MchPayPackage(body, outTradeNo, - totalFee, null, createIp, TradeType.FACEPAY, openId, null, - null, attach); - payPackage.setFaceCode(faceCode); - return createPayRequest(payPackage); - } - /** * 创建押金支付 * @@ -814,16 +786,15 @@ public class PayApi extends MchApi { if(isFacePay) { payPackage = new MchPayPackage(body, outTradeNo, totalFee, null, createIp, TradeType.FACEPAY, openId, null, null, attach); - payPackage.setFaceCode(code); - payPackage.setDeposit(YesNoType.Y); + payPackage.setAuthCode(code); + payPackage.setDeposit(Y); return createPayRequest(payPackage); }else{ payPackage = new MchPayPackage(body, outTradeNo, totalFee, null, createIp, TradeType.MICROPAY, openId, code, null, attach); - payPackage.setDeposit(YesNoType.Y); + payPackage.setDeposit(Y); if (store != null) { - payPackage.setSceneInfo(String.format("{\"store_info\":\"%s\"}", - JSON.toJSONString(store))); + payPackage.setSceneInfo(store.toJson()); } return createPayRequest(payPackage); } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java index 78b08108..b1882b91 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java @@ -8,6 +8,7 @@ import com.foxinmy.weixin4j.pay.profitsharing.*; import com.foxinmy.weixin4j.pay.type.ProfitIdType; import com.foxinmy.weixin4j.pay.type.SignType; import com.foxinmy.weixin4j.pay.type.profitsharing.ReturnAccountType; +import com.foxinmy.weixin4j.util.RandomUtil; import com.foxinmy.weixin4j.xml.XmlStream; import java.util.List; @@ -109,7 +110,9 @@ public class ProfitSharingApi extends MchApi { */ public ProfitSharingResult profitSharingQuery(String transactionId, String outOrderNo) throws WeixinException { ProfitSharingRequest request = new ProfitSharingRequest(transactionId, outOrderNo, null); - super.declareMerchant(request); + request.setMchId(weixinAccount.getMchId()); + request.setNonceStr(RandomUtil.generateString(16)); + request.setSubMchId(weixinAccount.getSubMchId()); String url = getRequestUri("profit_sharing_query_uri"); request.setSign(weixinSignature.sign(request, SignType.HMAC$SHA256)); String para = XmlStream.toXML(request); diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java index 4126cb0f..6feabea7 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/MchPayPackage.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.pay.payment.PayPackage; import com.foxinmy.weixin4j.pay.type.CurrencyType; import com.foxinmy.weixin4j.pay.type.TradeType; -import com.foxinmy.weixin4j.pay.type.YesNoType; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -77,18 +76,15 @@ public class MchPayPackage extends PayPackage { @XmlElement(name = "scene_info") @JSONField(name = "scene_info") private String sceneInfo; + /** - * 人脸凭证,用于旧版人脸支付。 + * 电子发票入口开放标识 */ - @XmlElement(name = "face_code") - @JSONField(name = "face_code") - private String faceCode; + private String receipt; /** * 是否押金人脸支付,Y-是,N-普通人脸支付 */ - @XmlElement(name = "deposit") - @JSONField(name = "deposit") - private YesNoType deposit; + private String deposit; /** * 是否需要分帐,非必传,默认为不分帐 @@ -96,7 +92,7 @@ public class MchPayPackage extends PayPackage { */ @XmlElement(name = "profit_sharing") @JSONField(name = "profit_sharing") - private YesNoType profitSharing; + private String profitSharing; protected MchPayPackage() { // jaxb required @@ -172,9 +168,9 @@ public class MchPayPackage extends PayPackage { * @param subOpenId * 用户在子商户appid下的唯一标识 非必填 * openid和sub_openid可以选传其中之一,如果选择传sub_openid ,则必须传sub_appid - * @param faceCode - * 人脸凭证,用于旧版刷脸支付。 - * @param depositType + * @param receipt + * 电子发票入口开放标识 + * @param deposit * 是否押金支付 * @param profitSharing * 是否需要分账 @@ -183,20 +179,20 @@ public class MchPayPackage extends PayPackage { double totalFee, CurrencyType feeType, String notifyUrl, String createIp, TradeType tradeType, String openId, String authCode, String productId, String attach, Date timeStart, - Date timeExpire, String goodsTag, String limitPay, String subOpenId, String faceCode, - YesNoType depositType, YesNoType profitSharing) { + Date timeExpire, String goodsTag, String limitPay, String subOpenId, String receipt, + String deposit, String profitSharing) { super(body, detial, outTradeNo, totalFee, notifyUrl, createIp, attach, timeStart, timeExpire, goodsTag); this.tradeType = tradeType != null ? tradeType.name() : null; - this.feeType = feeType == null ? CurrencyType.CNY.name() : feeType - .name(); + this.feeType = feeType == null ? CurrencyType.CNY.name() : feeType.name(); this.openId = openId; this.authCode = authCode; this.productId = productId; this.limitPay = limitPay; this.subOpenId = subOpenId; - this.faceCode = faceCode; - this.deposit = depositType; + this.receipt = receipt; + this.deposit = deposit; + this.profitSharing = profitSharing; } public String getTradeType() { @@ -263,27 +259,27 @@ public class MchPayPackage extends PayPackage { this.sceneInfo = sceneInfo; } - public String getFaceCode() { - return faceCode; + public String getReceipt() { + return receipt; } - public void setFaceCode(String faceCode) { - this.faceCode = faceCode; + public void setReceipt(String receipt) { + this.receipt = receipt; } - public YesNoType getDeposit() { + public String getDeposit() { return deposit; } - public void setDeposit(YesNoType deposit) { + public void setDeposit(String deposit) { this.deposit = deposit; } - public YesNoType getProfitSharing() { + public String getProfitSharing() { return profitSharing; } - public void setProfitSharing(YesNoType profitSharing) { + public void setProfitSharing(String profitSharing) { this.profitSharing = profitSharing; } @@ -298,7 +294,7 @@ public class MchPayPackage extends PayPackage { ", limitPay='" + limitPay + '\'' + ", subOpenId='" + subOpenId + '\'' + ", sceneInfo='" + sceneInfo + '\'' + - ", faceCode='" + faceCode + '\'' + + ", receipt='" + receipt + '\'' + ", deposit=" + deposit + ", profitSharing=" + profitSharing + '}'; diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfo.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfo.java new file mode 100644 index 00000000..0af0c6d5 --- /dev/null +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfo.java @@ -0,0 +1,16 @@ +package com.foxinmy.weixin4j.pay.payment.mch; + +/** + * 支付场景信息接口 + * + * @author kit + * @date 2020年06月03日 + */ +public interface SceneInfo { + /** + * 格式化为Json字符串 + * + * @return + */ + String toJson(); +} diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoApp.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoApp.java index 7c708e5f..9523b7f0 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoApp.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoApp.java @@ -1,24 +1,34 @@ package com.foxinmy.weixin4j.pay.payment.mch; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; + import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class SceneInfoApp { +public class SceneInfoApp implements SceneInfo { /** * 终端类型 */ private String type; /** - * 应用名称 + * WAP 网站名 */ + @XmlElement(name = "wap_name") + @JSONField(name = "wap_name") private String name; /** - * 应用路径 + * WAP网站URL地址 */ + @XmlElement(name = "wap_url") + @JSONField(name = "wap_url") private String path; + + @JSONField(serialize = false) private String sceneInfo; protected SceneInfoApp(){ @@ -55,21 +65,25 @@ public class SceneInfoApp { this.path = path; } + @Deprecated public String getSceneInfo() { return sceneInfo; } - + @Deprecated public void setSceneInfo(String sceneInfo) { this.sceneInfo = sceneInfo; } /** * IOS应用 + * APP环境直接使用APP支付,此方法将作废 * * @param appName 应用名 * @param bundleId 模块ID * @return + * @deprecated */ + @Deprecated public static SceneInfoApp createIOSAPP(String appName, String bundleId) { SceneInfoApp app = new SceneInfoApp("IOS", appName, bundleId); String sceneInfo = String @@ -81,11 +95,14 @@ public class SceneInfoApp { /** * Android应用 + * APP环境直接使用APP支付,此方法将作废 * * @param appName 应用名 * @param packageName 包名 * @return + * @deprecated */ + @Deprecated public static SceneInfoApp createAndroidAPP(String appName, String packageName) { SceneInfoApp app = new SceneInfoApp("Android", appName, packageName); String sceneInfo = String @@ -112,4 +129,9 @@ public class SceneInfoApp { app.setSceneInfo(sceneInfo); return app; } + + @Override + public String toJson() { + return String.format("{\"h5_info\": %s}", JSON.toJSONString(this)); + } } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoStore.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoStore.java index 550e9edd..bf7921f4 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoStore.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/payment/mch/SceneInfoStore.java @@ -1,5 +1,6 @@ package com.foxinmy.weixin4j.pay.payment.mch; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import javax.xml.bind.annotation.XmlAccessType; @@ -9,7 +10,7 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) -public class SceneInfoStore { +public class SceneInfoStore implements SceneInfo { /** * SZTX001 门店唯一标识 */ @@ -67,9 +68,22 @@ public class SceneInfoStore { this.name = name; } + public SceneInfoStore(String id, String name, String areaCode, String address) { + super(); + this.id = id; + this.name = name; + this.areaCode = areaCode; + this.address = address; + } + @Override public String toString() { return "SceneInfoStore [id=" + id + ", name=" + name + ", areaCode=" + areaCode + ", address=" + address + "]"; } + + @Override + public String toJson() { + return String.format("{\"store_info\": %s}", JSON.toJSONString(this)); + } } \ No newline at end of file diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingRequest.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingRequest.java index 741aa652..22c2be35 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingRequest.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingRequest.java @@ -1,5 +1,6 @@ package com.foxinmy.weixin4j.pay.profitsharing; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; @@ -29,13 +30,13 @@ public class ProfitSharingRequest extends MerchantResult { /** * 商户订单号 */ - @XmlElement(name = "out_trade_no") - @JSONField(name = "out_trade_no") + @XmlElement(name = "out_order_no") + @JSONField(name = "out_order_no") private String outOrderNo; /** * 分账接收方列表,不超过50个 */ - private List receivers; + private String receivers; /** * 分账完结描述 */ @@ -44,7 +45,7 @@ public class ProfitSharingRequest extends MerchantResult { public ProfitSharingRequest(String transactionId, String outOrderNo, List receivers){ this.transactionId = transactionId; this.outOrderNo = outOrderNo; - this.receivers = receivers; + this.receivers = receivers!=null && receivers.size()>0 ? JSON.toJSONString(receivers) : null; } public String getTransactionId() { @@ -63,11 +64,11 @@ public class ProfitSharingRequest extends MerchantResult { this.outOrderNo = outOrderNo; } - public List getReceivers() { + public String getReceivers() { return receivers; } - public void setReceivers(List receivers) { + public void setReceivers(String receivers) { this.receivers = receivers; } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingResult.java index 46d74356..0f2bc0b4 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ProfitSharingResult.java @@ -1,5 +1,6 @@ package com.foxinmy.weixin4j.pay.profitsharing; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; @@ -49,7 +50,8 @@ public class ProfitSharingResult extends MerchantResult { /** * 分账接收方列表(分帐查询) */ - private List receivers; + @JSONField(serialize = false) + private String receivers; /** * 分账金额(分帐查询) * 分账完结的分账金额,单位为分, 仅当查询分账完结的执行结果时,存在本字段 @@ -101,11 +103,11 @@ public class ProfitSharingResult extends MerchantResult { this.closeReason = closeReason; } - public List getReceivers() { + public String getReceivers() { return receivers; } - public void setReceivers(List receivers) { + public void setReceivers(String receivers) { this.receivers = receivers; } @@ -124,4 +126,9 @@ public class ProfitSharingResult extends MerchantResult { public void setDescription(String description) { this.description = description; } + + @JSONField(name = "receivers") + public List getProfitResult(){ + return JSON.parseArray(this.receivers, ReceiverProfitResult.class); + } } diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java index 52b301cd..1304c979 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverProfit.java @@ -13,6 +13,13 @@ public class ReceiverProfit extends Receiver { private int amount; private String description; + /** + * json deserialize need + */ + public ReceiverProfit(){ + super(); + } + public ReceiverProfit(ReceiverType type, String account, int amount, String description){ super(type, account, null); this.amount = amount; diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverResult.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverResult.java index b44c7810..764a4871 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverResult.java +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/profitsharing/ReceiverResult.java @@ -1,6 +1,7 @@ package com.foxinmy.weixin4j.pay.profitsharing; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.pay.payment.mch.MerchantResult; /** @@ -15,6 +16,7 @@ public class ReceiverResult extends MerchantResult { /** * 分账接收方对象,json格式字符串 */ + @JSONField(serialize = false) private String receiver; public String getReceiver() { @@ -28,6 +30,7 @@ public class ReceiverResult extends MerchantResult { /** * 返回接收方java对象 */ + @JSONField(name = "receiver") public Receiver getReceiverObject(){ try { return JSON.parseObject(receiver, Receiver.class); diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/YesNoType.java b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/YesNoType.java deleted file mode 100644 index 05b80dc5..00000000 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/type/YesNoType.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.foxinmy.weixin4j.pay.type; - -/** - * 通用的是或否参数 - * - * @author kit (kit.li@qq.com) - * @date 2020年05月22日 - * @since weixin4j-pay 1.1.0 - */ -public enum YesNoType { - /** - * 是 - */ - Y, - /** - * 否 - */ - N -} diff --git a/weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/payment/weixin.properties b/weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/pay/weixin.properties similarity index 100% rename from weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/payment/weixin.properties rename to weixin4j-pay/src/main/resources/com/foxinmy/weixin4j/pay/weixin.properties diff --git a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestFacePay.java b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestFacePay.java deleted file mode 100644 index 9f2a30c5..00000000 --- a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestFacePay.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.foxinmy.weixin4j.pay.test; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.foxinmy.weixin4j.exception.WeixinException; -import com.foxinmy.weixin4j.pay.WeixinPayProxy; -import com.foxinmy.weixin4j.pay.model.WeixinPayAccount; -import com.foxinmy.weixin4j.pay.payment.mch.MchPayRequest; -import org.junit.Test; - -public class TestFacePay { - @Test - public void test() throws WeixinException { - String appid = ""; - String mchid = ""; - String paySignKey = ""; - WeixinPayAccount payAccount = new WeixinPayAccount(appid, paySignKey, mchid); - WeixinPayProxy proxy = new WeixinPayProxy(payAccount); - - String orderNo = "TESTORDER2019092001"; - String openId = "oguJRswolIOGg7Vd1VaqGJuDBFAE"; - String faceCode = "0f879a6c-5fff-421c-a233-5fac0f4aad12"; - - MchPayRequest rsp = proxy.createFacePayRequest(faceCode, "测试的人脸支付", - orderNo, 1, - "127.0.0.1", openId, null); - - JSONObject obj = (JSONObject) JSON.toJSON(rsp); - } -} \ No newline at end of file From 2cdd2a7f4dcad39e816be47be406b7ba6eca0327 Mon Sep 17 00:00:00 2001 From: Kit Date: Thu, 4 Jun 2020 21:30:22 +0800 Subject: [PATCH 21/21] =?UTF-8?q?=E8=A1=A5=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/foxinmy/weixin4j/pay/README.md | 49 ++++++------------- .../weixin4j/pay/test/PayApiExample.java | 37 ++++++++++++++ .../pay/test/TestProfitSharingApi.java | 36 ++++++++++---- 3 files changed, 79 insertions(+), 43 deletions(-) create mode 100644 weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/PayApiExample.java diff --git a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/README.md b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/README.md index 1792dfa0..d3c46924 100644 --- a/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/README.md +++ b/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/README.md @@ -1,47 +1,30 @@ 支付模块【JSAPI】【NATIVE】【MICROPAY】 -微信公众平台[V2版本支付](https://mp.weixin.qq.com/paymch/readtemplate?t=mp/business/course2_tmpl&lang=zh_CN)文档 +目前只支持商户平台v2版本的支付API -微信公众平台[V3版本支付](https://mp.weixin.qq.com/paymch/readtemplate?t=mp/business/course3_tmpl&lang=zh_CN)文档 - -**在`2014年10月9号`之前申请并审核通过的支付接口应该属于`V2版本`支付,而之后申请的接口则为`V3版本(商户平台)`支付** +**V3版在计划中,但目前因V3版针对的电商平台、微信支付分两类商户目前都是邀请制的,所以具体什么时候开展还未知。有能力的朋友可以帮忙贡献代码** -[WeixinPayProxy](WeixinPayProxy.java) +[WeixinPayProxy](https://github.com/foxinmy/weixin4j/blob/master/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/WeixinPayProxy.java) ------------------------- - -* createPayJsRequestJson: 创建V3版本(商户平台)的JSAPI支付串 - -* createNativePayRequestURL: 创建V3版本(商户平台)的扫码支付链接 - -* createPrePay: 调用V3版本(商户平台)的统一订单接口生成预订单数据 - -* createMicroPay: 创建刷卡支付(商户平台)请求 - -* orderQuery: 订单查询接口 - -* refundOrder: 退款申请接口 - -* reverseOrder: 冲正订单接口 - -* closeOrder: 关闭订单接口 - -* downloadBill: 下载对账单接口 - -* refundQuery: 退款查询接口 +这是所有支付平台所有API的代理类,入参是一个WeixinPayAccount,建议调用API都通过代理类去调用,会相对简单些。 -[Pay2Api](https://github.com/foxinmy/weixin4j/blob/master/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/Pay2Api.java) + +[PayApi](https://github.com/foxinmy/weixin4j/blob/master/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/PayApi.java) ------------------------- +微信支付API -* createPayJsRequestJson: 创建V2版本的JSAPI支付串 +[CashApi](https://github.com/foxinmy/weixin4j/blob/master/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/CashApi.java) +------------------------- +微信现金红包API -* createNativePayRequestURL: 创建V2版本的扫码支付链接 +[CouponApi](https://github.com/foxinmy/weixin4j/blob/master/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/CouponApi.java) +------------------------- +微信代金券API -* orderQuery: 订单查询接口 +[ProfitSharingApi](https://github.com/foxinmy/weixin4j/blob/master/weixin4j-pay/src/main/java/com/foxinmy/weixin4j/pay/api/ProfitSharingApi.java) +------------------------- +微信分帐API -* refundOrder: 退款申请接口 -* downloadBill: 下载对账单接口 - -* refundQuery: 退款查询接口 diff --git a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/PayApiExample.java b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/PayApiExample.java new file mode 100644 index 00000000..0d51164b --- /dev/null +++ b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/PayApiExample.java @@ -0,0 +1,37 @@ +package com.foxinmy.weixin4j.pay.test; + +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.pay.PayPackageBuilder; +import com.foxinmy.weixin4j.pay.WeixinPayProxy; +import com.foxinmy.weixin4j.pay.model.WeixinPayAccount; +import com.foxinmy.weixin4j.pay.payment.mch.MICROPayRequest; +import com.foxinmy.weixin4j.pay.payment.mch.MchPayPackage; +import com.foxinmy.weixin4j.pay.payment.mch.MchPayRequest; +import org.junit.Assert; +import org.junit.Test; + +/** + * 一个支付例子 + * + * @author kit (kit.li@qq.com) + */ +public class PayApiExample { + + /** + * 这是一个付款码支付的例子 + * + * @throws WeixinException + */ + @Test + public void testPay() throws WeixinException { + WeixinPayAccount payAccount = new WeixinPayAccount("你的appid", "支付密钥", "商户号"); + MchPayPackage payPackage = PayPackageBuilder.microPay("body内容", "商户订单号", 1.00D, "127.0.0.1", + "你的付款码") + .attach("这是一个测试") + .limitPay() + .build(); + WeixinPayProxy proxy = new WeixinPayProxy(payAccount); + MICROPayRequest r = (MICROPayRequest) proxy.createPayRequest(payPackage); + Assert.assertEquals(r.getResultCode(), "SUCCESS"); + } +} diff --git a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java index b435ddf7..4136cd97 100644 --- a/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java +++ b/weixin4j-pay/src/test/java/com/foxinmy/weixin4j/pay/test/TestProfitSharingApi.java @@ -4,27 +4,29 @@ import com.alibaba.fastjson.JSON; import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.pay.WeixinPayProxy; import com.foxinmy.weixin4j.pay.model.WeixinPayAccount; -import com.foxinmy.weixin4j.pay.profitsharing.Receiver; -import com.foxinmy.weixin4j.pay.profitsharing.ReceiverResult; +import com.foxinmy.weixin4j.pay.profitsharing.*; import com.foxinmy.weixin4j.pay.type.profitsharing.ReceiverType; import com.foxinmy.weixin4j.pay.type.profitsharing.RelationType; import org.junit.Assert; import org.junit.Test; +import java.util.ArrayList; +import java.util.List; + public class TestProfitSharingApi { // 微信公众号appid - private static String APPID = "wx8208082617097c70"; + private static String APPID = ""; // 微信支付商户密钥 - private static String PAY_SIGN_KEY = "musegogogomusegogogomusegogogo16"; + private static String PAY_SIGN_KEY = ""; // 商户号 - private static String MCHID = "1319061501"; + private static String MCHID = ""; // - private static String OPENID = "oIkWcwtHXPp32ISw_Ept3FUQ1DM4"; + private static String OPENID = ""; /** * 测试添加分帐方 */ - // @Test + @Test public void testAddReceiver() throws WeixinException { Receiver receiver = new Receiver(ReceiverType.PERSONAL_OPENID, OPENID, RelationType.STAFF); WeixinPayAccount account = new WeixinPayAccount(APPID, PAY_SIGN_KEY, MCHID); @@ -37,7 +39,7 @@ public class TestProfitSharingApi { /** * 测试删除分帐方 */ - //@Test + @Test public void testRemoveReceiver() throws WeixinException { Receiver receiver = new Receiver(ReceiverType.PERSONAL_OPENID, OPENID, null); WeixinPayAccount account = new WeixinPayAccount(APPID, PAY_SIGN_KEY, MCHID); @@ -47,7 +49,21 @@ public class TestProfitSharingApi { Assert.assertEquals(result.getReturnCode(), "SUCCESS"); } - public void testProfitPay() throws WeixinException { - + /** + * 单次分帐 + * + * @throws WeixinException + */ + @Test + public void testProfitSharing() throws WeixinException { + ReceiverProfit receiverProfit = new ReceiverProfit(ReceiverType.MERCHANT_ID, "", 1, "test"); + List list = new ArrayList(); + list.add(receiverProfit); + WeixinPayAccount account = new WeixinPayAccount(APPID, PAY_SIGN_KEY, MCHID); + WeixinPayProxy proxy = new WeixinPayProxy(account); + ProfitSharingResult result = proxy.profitSharing("transactioId", "outOrderNo", list, false); + System.out.println(JSON.toJSONString(result)); + Assert.assertEquals(result.getReturnCode(), "SUCCESS"); } + }