Parcourir la source

#766 公众号模块消息类里增加扫一扫相关事件的推送字段

Howard Liu il y a 6 ans
Parent
commit
c69b4aadb2

+ 5 - 0
pom.xml

@@ -85,6 +85,11 @@
       <email>007gzs@gmail.com</email>
       <url>https://github.com/007gzs</url>
     </developer>
+    <developer>
+      <name>Howard Liu</name>
+      <email>liuxinghao1988@gmail.com</email>
+      <url>https://github.com/howardliu-cn</url>
+    </developer>
   </developers>
 
   <scm>

+ 1 - 0
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)

+ 64 - 0
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("</PicList><PicList>", "");

+ 32 - 12
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 {
       + " <ScanResult><![CDATA[1]]></ScanResult>"
       + "</ScanCodeInfo>"
       + "<SendPicsInfo>"
-      + " <Count>1</Count>\n"
+      + " <Count>1</Count>"
       + " <PicList>"
       + "  <item>"
       + "   <PicMd5Sum><![CDATA[1b5f7c23b5bf75682a53e7b6d163e185]]></PicMd5Sum>"
@@ -52,12 +51,22 @@ public class WxMpXmlMessageTest {
       + " </PicList>"
       + "</SendPicsInfo>"
       + "<SendLocationInfo>"
-      + "  <Location_X><![CDATA[23]]></Location_X>\n"
-      + "  <Location_Y><![CDATA[113]]></Location_Y>\n"
-      + "  <Scale><![CDATA[15]]></Scale>\n"
-      + "  <Label><![CDATA[ 广州市海珠区客村艺苑路 106号]]></Label>\n"
-      + "  <Poiname><![CDATA[wo de poi]]></Poiname>\n"
+      + "  <Location_X><![CDATA[23]]></Location_X>"
+      + "  <Location_Y><![CDATA[113]]></Location_Y>"
+      + "  <Scale><![CDATA[15]]></Scale>"
+      + "  <Label><![CDATA[ 广州市海珠区客村艺苑路 106号]]></Label>"
+      + "  <Poiname><![CDATA[wo de poi]]></Poiname>"
       + "</SendLocationInfo>"
+      + "<KeyStandard><![CDATA[ean13]]></KeyStandard>"
+      + "<KeyStr><![CDATA[6901481811083]]></KeyStr>"
+      + "<Country><![CDATA[中国]]></Country>"
+      + "<Province><![CDATA[广东]]></Province>"
+      + "<City><![CDATA[揭阳]]></City>"
+      + "<Sex>1</Sex>"
+      + "<Scene>2</Scene>"
+      + "<ExtInfo><![CDATA[123]]></ExtInfo>"
+      + "<RegionCode><![CDATA[440105]]></RegionCode>"
+      + "<ReasonMsg><![CDATA[]]></ReasonMsg>"
       + "</xml>";
     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<String, Object> allFields = wxMessage.getAllFieldsMap();
     assertThat(allFields).isNotNull();
     final Map<String, Object> copyrightCheckResult = (Map<String, Object>) allFields.get("CopyrightCheckResult");
-    List<Map<String, Object>> resultList = (List<Map<String, Object>>) ((Map<String, Object>) copyrightCheckResult.get("ResultList")).get("item");
+    List<Map<String, Object>> resultList = (List<Map<String, Object>>) ((Map<String, Object>) copyrightCheckResult
+      .get("ResultList")).get("item");
     assertThat(copyrightCheckResult).isNotNull();
 
     assertThat(copyrightCheckResult.get("Count")).isEqualTo("2");