From e6ce2f81a7c592b0d4fe91500ae7c941e6beb827 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 07:58:26 +0000 Subject: [PATCH 1/3] Initial plan From 7ee08b1e3653d058f222a2521344f7bd9b7a0d16 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 08:03:55 +0000 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85=E8=99=9A?= =?UTF-8?q?=E6=8B=9F=E6=94=AF=E4=BB=98iOS=E9=80=80=E6=AC=BE=E9=80=9A?= =?UTF-8?q?=E7=9F=A5xpay=5Fsubscribe=5Fios=5Frefund=5Fquery=5Fnotify?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=AD=97=E6=AE=B5=E5=92=8C=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=B8=B8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/binarywang/WxJava/sessions/bf33fa74-c952-4beb-ae60-2e66235e7fa5 Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../chanjar/weixin/common/api/WxConsts.java | 5 ++ .../wx/miniapp/bean/WxMaMessage.java | 74 +++++++++++++++++++ .../wx/miniapp/bean/WxMaMessageTest.java | 66 +++++++++++++++++ 3 files changed, 145 insertions(+) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java index 4924682e5e..5129410999 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java @@ -499,6 +499,11 @@ public static class EventType { * 订单完成发货时、订单结算时 */ public static final String TRADE_MANAGE_ORDER_SETTLEMENT = "trade_manage_order_settlement"; + /** + * 虚拟支付 iOS 退款查询通知 + * 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/virtual-payment/ios.html + */ + public static final String XPAY_SUBSCRIBE_IOS_REFUND_QUERY_NOTIFY = "xpay_subscribe_ios_refund_query_notify"; } /** diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java index 6421910015..83073850da 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java @@ -464,6 +464,80 @@ public class WxMaMessage implements Serializable { @XStreamConverter(value = XStreamCDataConverter.class) private String requestId; + // xpay_subscribe_ios_refund_query_notify iOS退款查询通知字段 + + /** + * 问询时间,Unix时间戳. + * xpay_subscribe_ios_refund_query_notify + */ + @SerializedName("refund_time") + @XStreamAlias("refund_time") + @XStreamConverter(value = XStreamCDataConverter.class) + private String refundTime; + + /** + * 该笔退款的订单时间(退款订单对应的交易时间),Unix时间戳. + * xpay_subscribe_ios_refund_query_notify + */ + @SerializedName("order_time") + @XStreamAlias("order_time") + @XStreamConverter(value = XStreamCDataConverter.class) + private String orderTime; + + /** + * Apple 支付票据号. + * xpay_subscribe_ios_refund_query_notify + */ + @SerializedName("channel_bill") + @XStreamAlias("channel_bill") + @XStreamConverter(value = XStreamCDataConverter.class) + private String channelBill; + + /** + * 应用的 Apple bundleid. + * xpay_subscribe_ios_refund_query_notify + */ + @SerializedName("bundleid") + @XStreamAlias("bundleid") + @XStreamConverter(value = XStreamCDataConverter.class) + private String bundleid; + + /** + * 道具 id. + * xpay_subscribe_ios_refund_query_notify + */ + @SerializedName("product_id") + @XStreamAlias("product_id") + @XStreamConverter(value = XStreamCDataConverter.class) + private String xpayProductId; + + /** + * 道具/代币数量. + * xpay_subscribe_ios_refund_query_notify + */ + @SerializedName("p_count") + @XStreamAlias("p_count") + @XStreamConverter(value = XStreamCDataConverter.class) + private String pCount; + + /** + * 用户请求退款的原因. + * xpay_subscribe_ios_refund_query_notify + */ + @SerializedName("refund_request_reason") + @XStreamAlias("refund_request_reason") + @XStreamConverter(value = XStreamCDataConverter.class) + private String refundRequestReason; + + /** + * 发货状态,0:未发货 1:已发货 2:发货中. + * xpay_subscribe_ios_refund_query_notify + */ + @SerializedName("provide_status") + @XStreamAlias("provide_status") + @XStreamConverter(value = XStreamCDataConverter.class) + private String provideStatus; + /** * 不要直接使用这个字段, * 这个字段只是为了适配 SubscribeMsgPopupEvent SubscribeMsgChangeEvent SubscribeMsgSentEvent diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java index 3f7e154260..922b5c37bb 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java @@ -457,4 +457,70 @@ private void checkXPayComplaintNotifyMessage(WxMaMessage msg) { assertEquals(msg.getRetryTimes(), new Integer(0)); assertEquals(msg.getRequestId(), "req_005"); } + + /** + * 虚拟支付 iOS 退款查询通知事件 xpay_subscribe_ios_refund_query_notify 测试用例(XML格式) + */ + @Test + public void testXPaySubscribeIosRefundQueryNotifyFromXml() { + String xml = "\n" + + " \n" + + " \n" + + " 1700001000\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + ""; + + WxMaMessage msg = WxMaMessage.fromXml(xml); + checkXPaySubscribeIosRefundQueryNotifyMessage(msg); + } + + /** + * 虚拟支付 iOS 退款查询通知事件 xpay_subscribe_ios_refund_query_notify 测试用例(JSON格式) + */ + @Test + public void testXPaySubscribeIosRefundQueryNotifyFromJson() { + String json = "{\n" + + " \"ToUserName\": \"gh_abcdefg\",\n" + + " \"FromUserName\": \"oABCDEFG\",\n" + + " \"CreateTime\": 1700001000,\n" + + " \"MsgType\": \"event\",\n" + + " \"Event\": \"xpay_subscribe_ios_refund_query_notify\",\n" + + " \"refund_time\": \"1700000900\",\n" + + " \"order_time\": \"1699990000\",\n" + + " \"channel_bill\": \"apple_bill_001\",\n" + + " \"bundleid\": \"com.example.app\",\n" + + " \"product_id\": \"product_xyz\",\n" + + " \"p_count\": \"1\",\n" + + " \"refund_request_reason\": \"不喜欢\",\n" + + " \"provide_status\": \"1\"\n" + + "}"; + + WxMaMessage msg = WxMaMessage.fromJson(json); + checkXPaySubscribeIosRefundQueryNotifyMessage(msg); + } + + private void checkXPaySubscribeIosRefundQueryNotifyMessage(WxMaMessage msg) { + assertEquals(msg.getToUser(), "gh_abcdefg"); + assertEquals(msg.getFromUser(), "oABCDEFG"); + assertEquals(msg.getCreateTime(), new Integer(1700001000)); + assertEquals(msg.getMsgType(), WxConsts.XmlMsgType.EVENT); + assertEquals(msg.getEvent(), WxConsts.EventType.XPAY_SUBSCRIBE_IOS_REFUND_QUERY_NOTIFY); + assertEquals(msg.getRefundTime(), "1700000900"); + assertEquals(msg.getOrderTime(), "1699990000"); + assertEquals(msg.getChannelBill(), "apple_bill_001"); + assertEquals(msg.getBundleid(), "com.example.app"); + assertEquals(msg.getXpayProductId(), "product_xyz"); + assertEquals(msg.getPCount(), "1"); + assertEquals(msg.getRefundRequestReason(), "不喜欢"); + assertEquals(msg.getProvideStatus(), "1"); + } } From d5f5124a5198276dbddbbd270b602ce3f8bc1df6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 12:05:02 +0000 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E5=B0=86iOS=E9=80=80=E6=AC=BE?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=9A=E7=9F=A5=E4=BA=8B=E4=BB=B6=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E8=A1=A5=E5=85=85=E8=87=B3WxMaConstants.XPayNotifyEve?= =?UTF-8?q?nt=E5=B9=B6=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95=E5=BC=95?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/binarywang/WxJava/sessions/703a95ff-ad68-47df-ab46-057e82adbe10 Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../cn/binarywang/wx/miniapp/constant/WxMaConstants.java | 5 +++++ .../java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java index 0fcf3b10f0..df83630be7 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java @@ -265,6 +265,11 @@ public static final class XPayNotifyEvent { public static final String GOODS_DELIVER = "xpay_goods_deliver_notify"; public static final String REFUND = "xpay_refund_notify"; public static final String COMPLAINT = "xpay_complaint_notify"; + /** + * 虚拟支付 iOS 退款查询通知. + * 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/virtual-payment/ios.html + */ + public static final String IOS_REFUND_QUERY = "xpay_subscribe_ios_refund_query_notify"; } @UtilityClass diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java index 922b5c37bb..a25589d640 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java @@ -1,6 +1,7 @@ package cn.binarywang.wx.miniapp.bean; import cn.binarywang.wx.miniapp.bean.xpay.WxMaXPayTeamInfo; +import cn.binarywang.wx.miniapp.constant.WxMaConstants; import me.chanjar.weixin.common.api.WxConsts; import org.testng.annotations.Test; @@ -513,7 +514,7 @@ private void checkXPaySubscribeIosRefundQueryNotifyMessage(WxMaMessage msg) { assertEquals(msg.getFromUser(), "oABCDEFG"); assertEquals(msg.getCreateTime(), new Integer(1700001000)); assertEquals(msg.getMsgType(), WxConsts.XmlMsgType.EVENT); - assertEquals(msg.getEvent(), WxConsts.EventType.XPAY_SUBSCRIBE_IOS_REFUND_QUERY_NOTIFY); + assertEquals(msg.getEvent(), WxMaConstants.XPayNotifyEvent.IOS_REFUND_QUERY); assertEquals(msg.getRefundTime(), "1700000900"); assertEquals(msg.getOrderTime(), "1699990000"); assertEquals(msg.getChannelBill(), "apple_bill_001");