Skip to content

Commit 3f517d1

Browse files
authored
🎨 #3974 【小程序】新增虚拟支付iOS退款查询通知事件的支持
1 parent 388478e commit 3f517d1

4 files changed

Lines changed: 151 additions & 0 deletions

File tree

weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,11 @@ public static class EventType {
499499
* 订单完成发货时、订单结算时
500500
*/
501501
public static final String TRADE_MANAGE_ORDER_SETTLEMENT = "trade_manage_order_settlement";
502+
/**
503+
* 虚拟支付 iOS 退款查询通知
504+
* 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/virtual-payment/ios.html
505+
*/
506+
public static final String XPAY_SUBSCRIBE_IOS_REFUND_QUERY_NOTIFY = "xpay_subscribe_ios_refund_query_notify";
502507
}
503508

504509
/**

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaMessage.java

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,80 @@ public class WxMaMessage implements Serializable {
464464
@XStreamConverter(value = XStreamCDataConverter.class)
465465
private String requestId;
466466

467+
// xpay_subscribe_ios_refund_query_notify iOS退款查询通知字段
468+
469+
/**
470+
* 问询时间,Unix时间戳.
471+
* xpay_subscribe_ios_refund_query_notify
472+
*/
473+
@SerializedName("refund_time")
474+
@XStreamAlias("refund_time")
475+
@XStreamConverter(value = XStreamCDataConverter.class)
476+
private String refundTime;
477+
478+
/**
479+
* 该笔退款的订单时间(退款订单对应的交易时间),Unix时间戳.
480+
* xpay_subscribe_ios_refund_query_notify
481+
*/
482+
@SerializedName("order_time")
483+
@XStreamAlias("order_time")
484+
@XStreamConverter(value = XStreamCDataConverter.class)
485+
private String orderTime;
486+
487+
/**
488+
* Apple 支付票据号.
489+
* xpay_subscribe_ios_refund_query_notify
490+
*/
491+
@SerializedName("channel_bill")
492+
@XStreamAlias("channel_bill")
493+
@XStreamConverter(value = XStreamCDataConverter.class)
494+
private String channelBill;
495+
496+
/**
497+
* 应用的 Apple bundleid.
498+
* xpay_subscribe_ios_refund_query_notify
499+
*/
500+
@SerializedName("bundleid")
501+
@XStreamAlias("bundleid")
502+
@XStreamConverter(value = XStreamCDataConverter.class)
503+
private String bundleid;
504+
505+
/**
506+
* 道具 id.
507+
* xpay_subscribe_ios_refund_query_notify
508+
*/
509+
@SerializedName("product_id")
510+
@XStreamAlias("product_id")
511+
@XStreamConverter(value = XStreamCDataConverter.class)
512+
private String xpayProductId;
513+
514+
/**
515+
* 道具/代币数量.
516+
* xpay_subscribe_ios_refund_query_notify
517+
*/
518+
@SerializedName("p_count")
519+
@XStreamAlias("p_count")
520+
@XStreamConverter(value = XStreamCDataConverter.class)
521+
private String pCount;
522+
523+
/**
524+
* 用户请求退款的原因.
525+
* xpay_subscribe_ios_refund_query_notify
526+
*/
527+
@SerializedName("refund_request_reason")
528+
@XStreamAlias("refund_request_reason")
529+
@XStreamConverter(value = XStreamCDataConverter.class)
530+
private String refundRequestReason;
531+
532+
/**
533+
* 发货状态,0:未发货 1:已发货 2:发货中.
534+
* xpay_subscribe_ios_refund_query_notify
535+
*/
536+
@SerializedName("provide_status")
537+
@XStreamAlias("provide_status")
538+
@XStreamConverter(value = XStreamCDataConverter.class)
539+
private String provideStatus;
540+
467541
/**
468542
* 不要直接使用这个字段,
469543
* 这个字段只是为了适配 SubscribeMsgPopupEvent SubscribeMsgChangeEvent SubscribeMsgSentEvent

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,11 @@ public static final class XPayNotifyEvent {
265265
public static final String GOODS_DELIVER = "xpay_goods_deliver_notify";
266266
public static final String REFUND = "xpay_refund_notify";
267267
public static final String COMPLAINT = "xpay_complaint_notify";
268+
/**
269+
* 虚拟支付 iOS 退款查询通知.
270+
* 文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/virtual-payment/ios.html
271+
*/
272+
public static final String IOS_REFUND_QUERY = "xpay_subscribe_ios_refund_query_notify";
268273

269274
}
270275
@UtilityClass

weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.binarywang.wx.miniapp.bean;
22

33
import cn.binarywang.wx.miniapp.bean.xpay.WxMaXPayTeamInfo;
4+
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
45
import me.chanjar.weixin.common.api.WxConsts;
56
import org.testng.annotations.Test;
67

@@ -457,4 +458,70 @@ private void checkXPayComplaintNotifyMessage(WxMaMessage msg) {
457458
assertEquals(msg.getRetryTimes(), new Integer(0));
458459
assertEquals(msg.getRequestId(), "req_005");
459460
}
461+
462+
/**
463+
* 虚拟支付 iOS 退款查询通知事件 xpay_subscribe_ios_refund_query_notify 测试用例(XML格式)
464+
*/
465+
@Test
466+
public void testXPaySubscribeIosRefundQueryNotifyFromXml() {
467+
String xml = "<xml>\n" +
468+
" <ToUserName><![CDATA[gh_abcdefg]]></ToUserName>\n" +
469+
" <FromUserName><![CDATA[oABCDEFG]]></FromUserName>\n" +
470+
" <CreateTime>1700001000</CreateTime>\n" +
471+
" <MsgType><![CDATA[event]]></MsgType>\n" +
472+
" <Event><![CDATA[xpay_subscribe_ios_refund_query_notify]]></Event>\n" +
473+
" <refund_time><![CDATA[1700000900]]></refund_time>\n" +
474+
" <order_time><![CDATA[1699990000]]></order_time>\n" +
475+
" <channel_bill><![CDATA[apple_bill_001]]></channel_bill>\n" +
476+
" <bundleid><![CDATA[com.example.app]]></bundleid>\n" +
477+
" <product_id><![CDATA[product_xyz]]></product_id>\n" +
478+
" <p_count><![CDATA[1]]></p_count>\n" +
479+
" <refund_request_reason><![CDATA[不喜欢]]></refund_request_reason>\n" +
480+
" <provide_status><![CDATA[1]]></provide_status>\n" +
481+
"</xml>";
482+
483+
WxMaMessage msg = WxMaMessage.fromXml(xml);
484+
checkXPaySubscribeIosRefundQueryNotifyMessage(msg);
485+
}
486+
487+
/**
488+
* 虚拟支付 iOS 退款查询通知事件 xpay_subscribe_ios_refund_query_notify 测试用例(JSON格式)
489+
*/
490+
@Test
491+
public void testXPaySubscribeIosRefundQueryNotifyFromJson() {
492+
String json = "{\n" +
493+
" \"ToUserName\": \"gh_abcdefg\",\n" +
494+
" \"FromUserName\": \"oABCDEFG\",\n" +
495+
" \"CreateTime\": 1700001000,\n" +
496+
" \"MsgType\": \"event\",\n" +
497+
" \"Event\": \"xpay_subscribe_ios_refund_query_notify\",\n" +
498+
" \"refund_time\": \"1700000900\",\n" +
499+
" \"order_time\": \"1699990000\",\n" +
500+
" \"channel_bill\": \"apple_bill_001\",\n" +
501+
" \"bundleid\": \"com.example.app\",\n" +
502+
" \"product_id\": \"product_xyz\",\n" +
503+
" \"p_count\": \"1\",\n" +
504+
" \"refund_request_reason\": \"不喜欢\",\n" +
505+
" \"provide_status\": \"1\"\n" +
506+
"}";
507+
508+
WxMaMessage msg = WxMaMessage.fromJson(json);
509+
checkXPaySubscribeIosRefundQueryNotifyMessage(msg);
510+
}
511+
512+
private void checkXPaySubscribeIosRefundQueryNotifyMessage(WxMaMessage msg) {
513+
assertEquals(msg.getToUser(), "gh_abcdefg");
514+
assertEquals(msg.getFromUser(), "oABCDEFG");
515+
assertEquals(msg.getCreateTime(), new Integer(1700001000));
516+
assertEquals(msg.getMsgType(), WxConsts.XmlMsgType.EVENT);
517+
assertEquals(msg.getEvent(), WxMaConstants.XPayNotifyEvent.IOS_REFUND_QUERY);
518+
assertEquals(msg.getRefundTime(), "1700000900");
519+
assertEquals(msg.getOrderTime(), "1699990000");
520+
assertEquals(msg.getChannelBill(), "apple_bill_001");
521+
assertEquals(msg.getBundleid(), "com.example.app");
522+
assertEquals(msg.getXpayProductId(), "product_xyz");
523+
assertEquals(msg.getPCount(), "1");
524+
assertEquals(msg.getRefundRequestReason(), "不喜欢");
525+
assertEquals(msg.getProvideStatus(), "1");
526+
}
460527
}

0 commit comments

Comments
 (0)