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 e88aa1957..9f9724c00 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
@@ -413,6 +413,10 @@ public class WxConsts {
*/
public static final String WEAPP_AUDIT_FAIL = "weapp_audit_fail";
+ /**
+ * 小程序自定义交易组件支付通知
+ */
+ public static final String OPEN_PRODUCT_ORDER_PAY = "open_product_order_pay";
/**
* 点击菜单跳转小程序的事件推送
*/
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 098da74e5..bfdb912f6 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
@@ -6,6 +6,7 @@ import org.testng.annotations.Test;
import java.util.List;
import java.util.Map;
+import static org.assertj.core.api.Assertions.as;
import static org.assertj.core.api.Assertions.assertThat;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
@@ -291,4 +292,40 @@ public class WxMaMessageTest {
.containsEntry("Lat", "0")
.containsEntry("Lng", "0");
}
+
+ /**
+ * 自定义交易组件付款通知事件测试用例
+ * msgType等于event且event等于WxConsts.EventType.OPEN_PRODUCT_ORDER_PAY
+ */
+ @Test
+ public void testFromXmlForOpenProductOrderPayEvent(){
+ String xml = " \n" +
+ " gh_abcdefg \n" +
+ " oABCD \n" +
+ " 1642658087 \n" +
+ " event \n" +
+ " open_product_order_pay\n" +
+ " \n" +
+ " 123456\n" +
+ " 1234567\n" +
+ " 42000000123123\n" +
+ " 2021-12-30 22:31:00\n" +
+ " 10\n" +
+ " oNMZ-5C0SPGHUiKsTwnOXpSHzFvw\n" +
+ " \n" +
+ "";
+ WxMaMessage wxMessage = WxMaMessage.fromXml(xml);
+ assertThat(wxMessage.getMsgType()).isEqualTo("event");
+ assertThat(wxMessage.getEvent()).isEqualTo(WxConsts.EventType.OPEN_PRODUCT_ORDER_PAY);
+ Map allFieldsMap = wxMessage.getAllFieldsMap();
+ Map orderInfo = (Map) allFieldsMap.get("order_info");
+ assertThat(orderInfo).isNotEmpty();
+ assertThat(orderInfo)
+ .containsEntry("out_order_id","123456")
+ .containsEntry("order_id","1234567")
+ .containsEntry("transaction_id","42000000123123")
+ .containsEntry("pay_time","2021-12-30 22:31:00")
+ .containsEntry("amount","10")
+ .containsEntry("sp_openid","oNMZ-5C0SPGHUiKsTwnOXpSHzFvw");
+ }
}