瀏覽代碼

:new: #1686 微信公众号增加对话能力(原导购助手)部分接口,如修改顾问、删除顾问、获取顾问列表等

Binary Wang 4 年之前
父節點
當前提交
9c91aeba6e

+ 42 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpGuideService.java

@@ -2,6 +2,7 @@ package me.chanjar.weixin.mp.api;
 
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.bean.guide.WxMpGuideInfo;
+import me.chanjar.weixin.mp.bean.guide.WxMpGuideList;
 
 /**
  * 微信导购助手(现在叫对话能力)接口.
@@ -38,6 +39,18 @@ public interface WxMpGuideService {
   void addGuide(WxMpGuideInfo guideInfo) throws WxErrorException;
 
   /**
+   * 修改顾问的昵称或头像
+   * <pre>
+   * 请求地址: POST https://api.weixin.qq.com/cgi-bin/guide/updateguideacct?access_token=ACCESS_TOKEN
+   * 文档地址:https://developers.weixin.qq.com/doc/offiaccount/Shopping_Guide/guide-account/shopping-guide.updateGuideAcct.html
+   * </pre>
+   *
+   * @param guideInfo 顾问信息
+   * @throws WxErrorException .
+   */
+  void updateGuide(WxMpGuideInfo guideInfo) throws WxErrorException;
+
+  /**
    * 获取顾问信息
    *
    * <pre>
@@ -51,4 +64,33 @@ public interface WxMpGuideService {
    * @throws WxErrorException .
    */
   WxMpGuideInfo getGuide(String account, String openid) throws WxErrorException;
+
+  /**
+   * 删除顾问
+   *
+   * <pre>
+   * 请求地址:  POST https://api.weixin.qq.com/cgi-bin/guide/delguideacct?access_token=ACCESS_TOKEN
+   * 文档地址:https://developers.weixin.qq.com/doc/offiaccount/Shopping_Guide/guide-account/shopping-guide.delGuideAcct.html
+   * </pre>
+   *
+   * @param account 顾问微信号(guide_account和guide_openid二选一,若同时请求,默认为guide_account)
+   * @param openid  顾问openid或者unionid(guide_account和guide_openid二选一)
+   * @throws WxErrorException .
+   */
+  void delGuide(String account, String openid) throws WxErrorException;
+
+  /**
+   * 获取服务号顾问列表
+   *
+   * <pre>
+   * 请求地址: POST https://api.weixin.qq.com/cgi-bin/guide/getguideacctlist?access_token=ACCESS_TOKEN
+   * 文档地址:https://developers.weixin.qq.com/doc/offiaccount/Shopping_Guide/guide-account/shopping-guide.getGuideAcctList.html
+   * </pre>
+   *
+   * @param page 分页页数,从0开始
+   * @param num  每页数量
+   * @return 顾问信息列表
+   * @throws WxErrorException .
+   */
+  WxMpGuideList listGuide(int page, int num) throws WxErrorException;
 }

+ 23 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpGuideServiceImpl.java

@@ -6,6 +6,7 @@ import me.chanjar.weixin.common.util.json.GsonHelper;
 import me.chanjar.weixin.mp.api.WxMpGuideService;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.bean.guide.WxMpGuideInfo;
+import me.chanjar.weixin.mp.bean.guide.WxMpGuideList;
 import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 
 /**
@@ -36,8 +37,30 @@ public class WxMpGuideServiceImpl implements WxMpGuideService {
   }
 
   @Override
+  public void updateGuide(WxMpGuideInfo guideInfo) throws WxErrorException {
+    this.mpService.post(WxMpApiUrl.Guide.UPDATE_GUIDE,
+      GsonHelper.buildJsonObject(ACCOUNT, guideInfo.getAccount(),
+        "guide_headimgurl", guideInfo.getHeadImgUrl(),
+        "guide_nickname", guideInfo.getNickName(),
+        OPENID, guideInfo.getOpenid()));
+
+  }
+
+  @Override
   public WxMpGuideInfo getGuide(String account, String openid) throws WxErrorException {
     return WxMpGuideInfo.fromJson(this.mpService.post(WxMpApiUrl.Guide.GET_GUIDE,
       GsonHelper.buildJsonObject(ACCOUNT, account, OPENID, openid)));
   }
+
+  @Override
+  public void delGuide(String account, String openid) throws WxErrorException {
+    this.mpService.post(WxMpApiUrl.Guide.DEL_GUIDE,
+      GsonHelper.buildJsonObject(ACCOUNT, account, OPENID, openid));
+  }
+
+  @Override
+  public WxMpGuideList listGuide(int page, int num) throws WxErrorException {
+    return WxMpGuideList.fromJson(this.mpService.post(WxMpApiUrl.Guide.LIST_GUIDE,
+      GsonHelper.buildJsonObject("page", page, "num", num)));
+  }
 }

+ 34 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/guide/WxMpGuideList.java

@@ -0,0 +1,34 @@
+package me.chanjar.weixin.mp.bean.guide;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 顾问列表.
+ *
+ * @author <a href="https://github.com/binarywang">Binary Wang</a>
+ * @date 2020-10-07
+ */
+@Data
+public class WxMpGuideList implements Serializable {
+  private static final long serialVersionUID = 144044550239346216L;
+
+  /**
+   * 顾问总数量
+   */
+  @SerializedName("total_num")
+  private Integer totalNum;
+
+  /**
+   * 顾问列表
+   */
+  private List<WxMpGuideInfo> list;
+
+  public static WxMpGuideList fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, WxMpGuideList.class);
+  }
+}

+ 1 - 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java

@@ -569,7 +569,7 @@ public class WxMpXmlMessage implements Serializable {
    * 审核成功时的时间(整形),时间戳
    */
   @XStreamAlias("SuccTime")
-  private Long succTime;
+  private Long successTime;
 
   /**
    * 审核失败的原因

+ 10 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/constant/WxMpEventConstants.java

@@ -141,4 +141,14 @@ public class WxMpEventConstants {
     public static final String CLOUD_INVOICE_INVOICERESULT_EVENT = "cloud_invoice_invoiceresult_event";
   }
 
+  /**
+   * 对话助手相关事件
+   */
+  public static class Guide {
+    /**
+     * 顾问邀请结果通知事件.
+     */
+    public static final String GUIDE_INVITE_RESULT_EVENT = "guide_invite_result_event";
+
+  }
 }

+ 13 - 2
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java

@@ -1166,11 +1166,22 @@ public interface WxMpApiUrl {
      * 添加顾问
      */
     ADD_GUIDE(API_DEFAULT_HOST_URL, "/cgi-bin/guide/addguideacct"),
-
+    /**
+     * 修改顾问
+     */
+    UPDATE_GUIDE(API_DEFAULT_HOST_URL, "/cgi-bin/guide/updateguideacct"),
     /**
      * 获取顾问信息
      */
-    GET_GUIDE(API_DEFAULT_HOST_URL, "/cgi-bin/guide/getguideacct");
+    GET_GUIDE(API_DEFAULT_HOST_URL, "/cgi-bin/guide/getguideacct"),
+    /**
+     * 删除顾问
+     */
+    DEL_GUIDE(API_DEFAULT_HOST_URL, "/cgi-bin/guide/delguideacct"),
+    /**
+     * 获取服务号顾问列表
+     */
+    LIST_GUIDE(API_DEFAULT_HOST_URL, "/cgi-bin/guide/getguideacctlist");
     private final String prefix;
     private final String path;
 

+ 20 - 3
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpGuideServiceImplTest.java

@@ -5,6 +5,7 @@ import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.test.ApiTestModule;
 import me.chanjar.weixin.mp.bean.guide.WxMpGuideInfo;
+import me.chanjar.weixin.mp.bean.guide.WxMpGuideList;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
@@ -23,17 +24,33 @@ public class WxMpGuideServiceImplTest {
 
   @Test
   public void testAddGuide() throws WxErrorException {
-    this.wxService.getGuideService().addGuide("abc", "", null, null);
+    this.wxService.getGuideService().addGuide("wx1java", "", null, null);
   }
 
   @Test
   public void testAddGuide_another() throws WxErrorException {
-    this.wxService.getGuideService().addGuide(WxMpGuideInfo.builder().account("cde").build());
+    this.wxService.getGuideService().addGuide(WxMpGuideInfo.builder().account("wx1java").build());
   }
 
   @Test
   public void testGetGuide() throws WxErrorException {
-    final WxMpGuideInfo guideInfo = this.wxService.getGuideService().getGuide("abc", null);
+    final WxMpGuideInfo guideInfo = this.wxService.getGuideService().getGuide("wx1java", null);
     assertThat(guideInfo).isNotNull();
   }
+
+  @Test
+  public void testUpdateGuide() throws WxErrorException {
+    this.wxService.getGuideService().updateGuide(WxMpGuideInfo.builder().account("wx1java").nickName("我是谁").build());
+  }
+
+  @Test
+  public void testDelGuide() throws WxErrorException {
+    this.wxService.getGuideService().delGuide("wx1java", null);
+  }
+
+  @Test
+  public void testListGuide() throws WxErrorException {
+    final WxMpGuideList guideList = this.wxService.getGuideService().listGuide(0, 10);
+    assertThat(guideList).isNotNull();
+  }
 }