فهرست منبع

:art: #3212【企业微信】增加微信客服回调事件支持

0katekate0 1 سال پیش
والد
کامیت
d957896ac1

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

@@ -301,6 +301,11 @@ public class WxConsts {
     public static final String CLICK = "CLICK";
     public static final String VIEW = "VIEW";
     public static final String MASS_SEND_JOB_FINISH = "MASSSENDJOBFINISH";
+
+    /**
+     * 微信客服消息事件推送
+     */
+    public static final String KF_MSG_OR_EVENT = "kf_msg_or_event";
     /**
      * 扫码推事件的事件推送
      */

+ 16 - 0
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java

@@ -188,6 +188,21 @@ public class WxCpXmlMessage implements Serializable {
   private String taskId;
 
   /**
+   * 微信客服
+   * 调用拉取消息接口时,需要传此token,用于校验请求的合法性
+   */
+  @XStreamAlias("Token")
+  @XStreamConverter(value = XStreamCDataConverter.class)
+  private String token;
+
+  /**
+   * 有新消息的客服账号。可通过sync_msg接口指定open_kfid获取此客服账号的消息
+   */
+  @XStreamAlias("OpenKfId")
+  @XStreamConverter(value = XStreamCDataConverter.class)
+  private String openKfId;
+
+  /**
    * 通讯录变更事件.
    * 请参考常量 me.chanjar.weixin.cp.constant.WxCpConsts.ContactChangeType
    */
@@ -222,6 +237,7 @@ public class WxCpXmlMessage implements Serializable {
   @XStreamAlias("WelcomeCode")
   @XStreamConverter(value = XStreamCDataConverter.class)
   private String welcomeCode;
+
   /**
    * 新的UserID,变更时推送(userid由系统生成时可更改一次).
    */

+ 37 - 1
weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpKfServiceImplTest.java

@@ -3,10 +3,14 @@ package me.chanjar.weixin.cp.api.impl;
 import com.google.inject.Inject;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.util.XmlUtils;
 import me.chanjar.weixin.cp.api.ApiTestModule;
 import me.chanjar.weixin.cp.api.WxCpService;
 import me.chanjar.weixin.cp.bean.WxCpBaseResp;
 import me.chanjar.weixin.cp.bean.kf.*;
+import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
@@ -14,7 +18,9 @@ import java.io.InputStream;
 
 /**
  * WxCpKfServiceImpl-测试类
- * 需要用到专门的 secret https://kf.weixin.qq.com/api/doc/path/93304#secret
+ * 需要用到专门的secret
+ * <a href="https://developer.work.weixin.qq.com/document/path/94638">官方文档1</a>
+ * <a href="https://kf.weixin.qq.com/api/doc/path/93304#secret">官方文档2</a>
  *
  * @author Fu  created on  2022/1/19 20:12
  */
@@ -97,4 +103,34 @@ public class WxCpKfServiceImplTest {
     System.out.println(resp);
   }
 
+  /**
+   * 测试回调事件
+   * https://developer.work.weixin.qq.com/document/path/94670
+   *
+   * @throws Exception
+   */
+  @Test(priority = 6)
+  public void testEvent() throws Exception {
+
+    String xml = "<xml>\n" +
+      "   <ToUserName><![CDATA[ww12345678910]]></ToUserName>\n" +
+      "   <CreateTime>1348831860</CreateTime>\n" +
+      "   <MsgType><![CDATA[event]]></MsgType>\n" +
+      "   <Event><![CDATA[kf_msg_or_event]]></Event>\n" +
+      "   <Token><![CDATA[ENCApHxnGDNAVNY4AaSJKj4Tb5mwsEMzxhFmHVGcra996NR]]></Token>\n" +
+      "   <OpenKfId><![CDATA[wkxxxxxxx]]></OpenKfId>\n" +
+      "</xml>";
+
+    WxCpXmlMessage xmlMsg = XStreamTransformer.fromXml(WxCpXmlMessage.class, xml);
+    xmlMsg.setAllFieldsMap(XmlUtils.xml2Map(xml));
+    System.out.println(WxCpGsonBuilder.create().toJson(xmlMsg));
+
+    /**
+     * 微信客服事件推送
+     * @see WxConsts.EventType.KF_MSG_OR_EVENT
+     */
+    System.out.println("token:" + xmlMsg.getToken());
+    System.out.println("openKfId:" + xmlMsg.getOpenKfId());
+  }
+
 }