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 4924682e5..512941099 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 642191001..83073850d 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 3f7e15426..922b5c37b 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"); + } }