diff --git a/pom.xml b/pom.xml
index cc338a60..c9ce90c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,6 +85,11 @@
007gzs@gmail.com
https://github.com/007gzs
+
+ Howard Liu
+ liuxinghao1988@gmail.com
+ https://github.com/howardliu-cn
+
diff --git a/readme.md b/readme.md
index d577d2af..5386ba57 100644
--- a/readme.md
+++ b/readme.md
@@ -146,3 +146,4 @@
1. [qsjia (QSJia)](http://github.com/qsjia)
1. [webcreazy (webcreazy)](http://github.com/webcreazy)
1. [cwivan (鱼丸Cwivan)](http://github.com/cwivan)
+1. [howardliu-cn (看山)](https://github.com/howardliu-cn)
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java
index cbd69705..3ec7a966 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java
@@ -445,6 +445,8 @@ public class WxMpXmlMessage implements Serializable {
/**
* 审核结果,成功succ 或失败fail.
+ *
+ * 在商品审核结果推送时,verify_ok表示审核通过,verify_not_pass表示审核未通过。
*/
@XStreamAlias("Result")
private String result;
@@ -566,6 +568,68 @@ public class WxMpXmlMessage implements Serializable {
@XStreamAlias("Reason")
private String reason;
+ ///////////////////////////////////////
+ // 扫一扫事件推送
+ ///////////////////////////////////////
+ /**
+ * 商品编码标准
+ */
+ @XStreamAlias("KeyStandard")
+ private String keyStandard;
+ /**
+ * 商品编码内容
+ */
+ @XStreamAlias("KeyStr")
+ private String keyStr;
+
+ /**
+ * 用户在微信内设置的国家
+ */
+ @XStreamAlias("Country")
+ private String country;
+
+ /**
+ * 用户在微信内设置的省份
+ */
+ @XStreamAlias("Province")
+ private String province;
+
+ /**
+ * 用户在微信内设置的城市
+ */
+ @XStreamAlias("City")
+ private String city;
+
+ /**
+ * 用户的性别,1为男性,2为女性,0代表未知
+ */
+ @XStreamAlias("Sex")
+ private String sex;
+
+ /**
+ * 打开商品主页的场景,1为扫码,2为其他打开场景(如会话、收藏或朋友圈)
+ */
+ @XStreamAlias("Scene")
+ private String scene;
+
+ /**
+ * 调用“获取商品二维码接口”时传入的extinfo,为标识参数
+ */
+ @XStreamAlias("ExtInfo")
+ private String extInfo;
+
+ /**
+ * 用户的实时地理位置信息(目前只精确到省一级),可在国家统计局网站查到对应明细: http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html
+ */
+ @XStreamAlias("RegionCode")
+ private String regionCode;
+
+ /**
+ * 审核未通过的原因。
+ */
+ @XStreamAlias("ReasonMsg")
+ private String reasonMsg;
+
public static WxMpXmlMessage fromXml(String xml) {
//修改微信变态的消息内容格式,方便解析
xml = xml.replace("", "");
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessageTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessageTest.java
index e741e931..50bb0ac0 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessageTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessageTest.java
@@ -1,14 +1,13 @@
package me.chanjar.weixin.mp.bean.message;
+import me.chanjar.weixin.common.api.WxConsts;
+import org.testng.annotations.Test;
+
import java.util.List;
import java.util.Map;
-import org.testng.annotations.*;
-
-import me.chanjar.weixin.common.api.WxConsts;
-
import static org.assertj.core.api.Assertions.assertThat;
-import static org.testng.Assert.*;
+import static org.testng.Assert.assertEquals;
@Test
public class WxMpXmlMessageTest {
@@ -44,7 +43,7 @@ public class WxMpXmlMessageTest {
+ " "
+ ""
+ ""
- + " 1\n"
+ + " 1"
+ " "
+ " - "
+ " "
@@ -52,12 +51,22 @@ public class WxMpXmlMessageTest {
+ "
"
+ ""
+ ""
- + " \n"
- + " \n"
- + " \n"
- + " \n"
- + " \n"
+ + " "
+ + " "
+ + " "
+ + " "
+ + " "
+ ""
+ + ""
+ + ""
+ + ""
+ + ""
+ + ""
+ + "1"
+ + "2"
+ + ""
+ + ""
+ + ""
+ "";
WxMpXmlMessage wxMessage = WxMpXmlMessage.fromXml(xml);
assertEquals(wxMessage.getToUser(), "toUser");
@@ -92,6 +101,16 @@ public class WxMpXmlMessageTest {
assertEquals(wxMessage.getSendLocationInfo().getScale(), "15");
assertEquals(wxMessage.getSendLocationInfo().getLabel(), " 广州市海珠区客村艺苑路 106号");
assertEquals(wxMessage.getSendLocationInfo().getPoiName(), "wo de poi");
+ assertEquals(wxMessage.getKeyStandard(), "ean13");
+ assertEquals(wxMessage.getKeyStr(), "6901481811083");
+ assertEquals(wxMessage.getCountry(), "中国");
+ assertEquals(wxMessage.getProvince(), "广东");
+ assertEquals(wxMessage.getCity(), "揭阳");
+ assertEquals(wxMessage.getSex(), "1");
+ assertEquals(wxMessage.getScene(), "2");
+ assertEquals(wxMessage.getExtInfo(), "123");
+ assertEquals(wxMessage.getRegionCode(), "440105");
+ assertEquals(wxMessage.getReasonMsg(), "");
}
public void testFromXml2() {
@@ -232,7 +251,8 @@ public class WxMpXmlMessageTest {
final Map allFields = wxMessage.getAllFieldsMap();
assertThat(allFields).isNotNull();
final Map copyrightCheckResult = (Map) allFields.get("CopyrightCheckResult");
- List