mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 18:46:10 +08:00 
			
		
		
		
	🆕 #1686 微信公众号增加对话能力(原导购助手)部分接口,如添加顾问、获取顾问信息等
This commit is contained in:
		| @ -0,0 +1,54 @@ | ||||
| package me.chanjar.weixin.mp.api; | ||||
|  | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.mp.bean.guide.WxMpGuideInfo; | ||||
|  | ||||
| /** | ||||
|  * 微信导购助手(现在叫对话能力)接口. | ||||
|  * | ||||
|  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||
|  * @date 2020 -10-06 | ||||
|  */ | ||||
| public interface WxMpGuideService { | ||||
|   /** | ||||
|    * 为服务号添加顾问 | ||||
|    * <pre> | ||||
|    * 请求地址: POST https://api.weixin.qq.com/cgi-bin/guide/addguideacct?access_token=ACCESS_TOKEN | ||||
|    * 文档地址:https://developers.weixin.qq.com/doc/offiaccount/Shopping_Guide/guide-account/shopping-guide.addGuideAcct.html | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param account    顾问微信号(guide_account和guide_openid二选一,若同时请求,默认为guide_account) | ||||
|    * @param openid     顾问openid或者unionid(guide_account和guide_openid二选一) | ||||
|    * @param headImgUrl 顾问头像,头像url只能用《上传图文消息内的图片获取URL》 me.chanjar.weixin.mp.api.impl.WxMpMaterialServiceImpl#mediaImgUpload(java.io.File) | ||||
|    * @param nickName   顾问昵称 | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   void addGuide(String account, String openid, String headImgUrl, String nickName) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * 为服务号添加顾问 | ||||
|    * <pre> | ||||
|    * 请求地址: POST https://api.weixin.qq.com/cgi-bin/guide/addguideacct?access_token=ACCESS_TOKEN | ||||
|    * 文档地址:https://developers.weixin.qq.com/doc/offiaccount/Shopping_Guide/guide-account/shopping-guide.addGuideAcct.html | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param guideInfo 顾问信息 | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   void addGuide(WxMpGuideInfo guideInfo) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * 获取顾问信息 | ||||
|    * | ||||
|    * <pre> | ||||
|    * 请求地址:  POST https://api.weixin.qq.com/cgi-bin/guide/getguideacct?access_token=ACCESS_TOKEN | ||||
|    * 文档地址:https://developers.weixin.qq.com/doc/offiaccount/Shopping_Guide/guide-account/shopping-guide.getGuideAcct.html | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param account 顾问微信号(guide_account和guide_openid二选一,若同时请求,默认为guide_account) | ||||
|    * @param openid  顾问openid或者unionid(guide_account和guide_openid二选一) | ||||
|    * @return 顾问信息 | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   WxMpGuideInfo getGuide(String account, String openid) throws WxErrorException; | ||||
| } | ||||
| @ -1,5 +1,6 @@ | ||||
| package me.chanjar.weixin.mp.api; | ||||
|  | ||||
| import com.google.gson.JsonObject; | ||||
| import me.chanjar.weixin.common.api.WxImgProcService; | ||||
| import me.chanjar.weixin.common.api.WxOcrService; | ||||
| import me.chanjar.weixin.common.bean.WxJsapiSignature; | ||||
| @ -33,16 +34,16 @@ public interface WxMpService extends WxService { | ||||
|    * @param timestamp 时间戳 | ||||
|    * @param nonce     随机串 | ||||
|    * @param signature 签名 | ||||
|    * @return 是否验证通过 | ||||
|    * @return 是否验证通过 boolean | ||||
|    */ | ||||
|   boolean checkSignature(String timestamp, String nonce, String signature); | ||||
|  | ||||
|   /** | ||||
|    * 获取access_token, 不强制刷新access_token. | ||||
|    * | ||||
|    * @return token | ||||
|    * @return token access token | ||||
|    * @throws WxErrorException . | ||||
|    * @see #getAccessToken(boolean) | ||||
|    * @see #getAccessToken(boolean) #getAccessToken(boolean) | ||||
|    */ | ||||
|   String getAccessToken() throws WxErrorException; | ||||
|  | ||||
| @ -59,7 +60,7 @@ public interface WxMpService extends WxService { | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param forceRefresh 是否强制刷新 | ||||
|    * @return token | ||||
|    * @return token access token | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   String getAccessToken(boolean forceRefresh) throws WxErrorException; | ||||
| @ -68,9 +69,9 @@ public interface WxMpService extends WxService { | ||||
|    * 获得ticket,不强制刷新ticket. | ||||
|    * | ||||
|    * @param type ticket 类型 | ||||
|    * @return ticket | ||||
|    * @return ticket ticket | ||||
|    * @throws WxErrorException . | ||||
|    * @see #getTicket(TicketType, boolean) | ||||
|    * @see #getTicket(TicketType, boolean) #getTicket(TicketType, boolean) | ||||
|    */ | ||||
|   String getTicket(TicketType type) throws WxErrorException; | ||||
|  | ||||
| @ -82,7 +83,7 @@ public interface WxMpService extends WxService { | ||||
|    * | ||||
|    * @param type         ticket类型 | ||||
|    * @param forceRefresh 强制刷新 | ||||
|    * @return ticket | ||||
|    * @return ticket ticket | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   String getTicket(TicketType type, boolean forceRefresh) throws WxErrorException; | ||||
| @ -92,7 +93,7 @@ public interface WxMpService extends WxService { | ||||
|    * | ||||
|    * @return jsapi ticket | ||||
|    * @throws WxErrorException . | ||||
|    * @see #getJsapiTicket(boolean) | ||||
|    * @see #getJsapiTicket(boolean) #getJsapiTicket(boolean) | ||||
|    */ | ||||
|   String getJsapiTicket() throws WxErrorException; | ||||
|  | ||||
| @ -118,7 +119,7 @@ public interface WxMpService extends WxService { | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param url 地址 | ||||
|    * @return 生成的签名对象 | ||||
|    * @return 生成的签名对象 wx jsapi signature | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   WxJsapiSignature createJsapiSignature(String url) throws WxErrorException; | ||||
| @ -130,7 +131,7 @@ public interface WxMpService extends WxService { | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param longUrl 长url | ||||
|    * @return 生成的短地址 | ||||
|    * @return 生成的短地址 string | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   String shortUrl(String longUrl) throws WxErrorException; | ||||
| @ -142,7 +143,7 @@ public interface WxMpService extends WxService { | ||||
|    * </pre> | ||||
|    * | ||||
|    * @param semanticQuery 查询条件 | ||||
|    * @return 查询结果 | ||||
|    * @return 查询结果 wx mp semantic query result | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   WxMpSemanticQueryResult semanticQuery(WxMpSemanticQuery semanticQuery) throws WxErrorException; | ||||
| @ -167,7 +168,7 @@ public interface WxMpService extends WxService { | ||||
|    * http://mp.weixin.qq.com/wiki/0/2ad4b6bfd29f30f71d39616c2a0fcedc.html | ||||
|    * </pre> | ||||
|    * | ||||
|    * @return 微信服务器ip地址数组 | ||||
|    * @return 微信服务器ip地址数组 string [ ] | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   String[] getCallbackIP() throws WxErrorException; | ||||
| @ -181,7 +182,7 @@ public interface WxMpService extends WxService { | ||||
|    * | ||||
|    * @param action   执行的检测动作 | ||||
|    * @param operator 指定平台从某个运营商进行检测 | ||||
|    * @return 检测结果 | ||||
|    * @return 检测结果 wx net check result | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   WxNetCheckResult netCheck(String action, String operator) throws WxErrorException; | ||||
| @ -202,7 +203,7 @@ public interface WxMpService extends WxService { | ||||
|    * https://api.weixin.qq.com/cgi-bin/get_current_autoreply_info?access_token=ACCESS_TOKEN | ||||
|    * </pre> | ||||
|    * | ||||
|    * @return 公众号的自动回复规则 | ||||
|    * @return 公众号的自动回复规则 current auto reply info | ||||
|    * @throws WxErrorException . | ||||
|    */ | ||||
|   WxMpCurrentAutoReplyInfo getCurrentAutoReplyInfo() throws WxErrorException; | ||||
| @ -232,7 +233,7 @@ public interface WxMpService extends WxService { | ||||
|    * @param executor 执行器 | ||||
|    * @param url      接口地址 | ||||
|    * @param data     参数数据 | ||||
|    * @return 结果 | ||||
|    * @return 结果 t | ||||
|    * @throws WxErrorException 异常 | ||||
|    */ | ||||
|   <T, E> T execute(RequestExecutor<T, E> executor, String url, E data) throws WxErrorException; | ||||
| @ -242,7 +243,7 @@ public interface WxMpService extends WxService { | ||||
|    * | ||||
|    * @param url        请求接口地址 | ||||
|    * @param queryParam 参数 | ||||
|    * @return 接口响应字符串 | ||||
|    * @return 接口响应字符串 string | ||||
|    * @throws WxErrorException 异常 | ||||
|    */ | ||||
|   String get(WxMpApiUrl url, String queryParam) throws WxErrorException; | ||||
| @ -252,11 +253,21 @@ public interface WxMpService extends WxService { | ||||
|    * | ||||
|    * @param url      请求接口地址 | ||||
|    * @param postData 请求参数json值 | ||||
|    * @return 接口响应字符串 | ||||
|    * @return 接口响应字符串 string | ||||
|    * @throws WxErrorException 异常 | ||||
|    */ | ||||
|   String post(WxMpApiUrl url, String postData) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * 当本Service没有实现某个API的时候,可以用这个,针对所有微信API中的POST请求. | ||||
|    * | ||||
|    * @param url        请求接口地址 | ||||
|    * @param jsonObject 请求参数json对象 | ||||
|    * @return 接口响应字符串 string | ||||
|    * @throws WxErrorException 异常 | ||||
|    */ | ||||
|   String post(WxMpApiUrl url, JsonObject jsonObject) throws WxErrorException; | ||||
|  | ||||
|   /** | ||||
|    * <pre> | ||||
|    * Service没有实现某个API的时候,可以用这个, | ||||
| @ -269,7 +280,7 @@ public interface WxMpService extends WxService { | ||||
|    * @param executor 执行器 | ||||
|    * @param url      接口地址 | ||||
|    * @param data     参数数据 | ||||
|    * @return 结果 | ||||
|    * @return 结果 t | ||||
|    * @throws WxErrorException 异常 | ||||
|    */ | ||||
|   <T, E> T execute(RequestExecutor<T, E> executor, WxMpApiUrl url, E data) throws WxErrorException; | ||||
| @ -294,7 +305,7 @@ public interface WxMpService extends WxService { | ||||
|   /** | ||||
|    * 获取WxMpConfigStorage 对象. | ||||
|    * | ||||
|    * @return WxMpConfigStorage | ||||
|    * @return WxMpConfigStorage wx mp config storage | ||||
|    */ | ||||
|   WxMpConfigStorage getWxMpConfigStorage(); | ||||
|  | ||||
| @ -340,7 +351,7 @@ public interface WxMpService extends WxService { | ||||
|    * 进行相应的公众号切换. | ||||
|    * | ||||
|    * @param mpId 公众号标识 | ||||
|    * @return 切换是否成功 | ||||
|    * @return 切换是否成功 boolean | ||||
|    */ | ||||
|   boolean switchover(String mpId); | ||||
|  | ||||
| @ -348,119 +359,119 @@ public interface WxMpService extends WxService { | ||||
|    * 进行相应的公众号切换. | ||||
|    * | ||||
|    * @param mpId 公众号标识 | ||||
|    * @return 切换成功,则返回当前对象,方便链式调用,否则抛出异常 | ||||
|    * @return 切换成功 ,则返回当前对象,方便链式调用,否则抛出异常 | ||||
|    */ | ||||
|   WxMpService switchoverTo(String mpId); | ||||
|  | ||||
|   /** | ||||
|    * 返回客服接口方法实现类,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpKefuService | ||||
|    * @return WxMpKefuService kefu service | ||||
|    */ | ||||
|   WxMpKefuService getKefuService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回素材相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpMaterialService | ||||
|    * @return WxMpMaterialService material service | ||||
|    */ | ||||
|   WxMpMaterialService getMaterialService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回菜单相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpMenuService | ||||
|    * @return WxMpMenuService menu service | ||||
|    */ | ||||
|   WxMpMenuService getMenuService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回用户相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpUserService | ||||
|    * @return WxMpUserService user service | ||||
|    */ | ||||
|   WxMpUserService getUserService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回用户标签相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpUserTagService | ||||
|    * @return WxMpUserTagService user tag service | ||||
|    */ | ||||
|   WxMpUserTagService getUserTagService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回二维码相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpQrcodeService | ||||
|    * @return WxMpQrcodeService qrcode service | ||||
|    */ | ||||
|   WxMpQrcodeService getQrcodeService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回卡券相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpCardService | ||||
|    * @return WxMpCardService card service | ||||
|    */ | ||||
|   WxMpCardService getCardService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回数据分析统计相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpDataCubeService | ||||
|    * @return WxMpDataCubeService data cube service | ||||
|    */ | ||||
|   WxMpDataCubeService getDataCubeService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回用户黑名单管理相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpUserBlacklistService | ||||
|    * @return WxMpUserBlacklistService black list service | ||||
|    */ | ||||
|   WxMpUserBlacklistService getBlackListService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回门店管理相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpStoreService | ||||
|    * @return WxMpStoreService store service | ||||
|    */ | ||||
|   WxMpStoreService getStoreService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回模板消息相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpTemplateMsgService | ||||
|    * @return WxMpTemplateMsgService template msg service | ||||
|    */ | ||||
|   WxMpTemplateMsgService getTemplateMsgService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回一次性订阅消息相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpSubscribeMsgService | ||||
|    * @return WxMpSubscribeMsgService subscribe msg service | ||||
|    */ | ||||
|   WxMpSubscribeMsgService getSubscribeMsgService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回硬件平台相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpDeviceService | ||||
|    * @return WxMpDeviceService device service | ||||
|    */ | ||||
|   WxMpDeviceService getDeviceService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回摇一摇周边相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpShakeService | ||||
|    * @return WxMpShakeService shake service | ||||
|    */ | ||||
|   WxMpShakeService getShakeService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回会员卡相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpMemberCardService | ||||
|    * @return WxMpMemberCardService member card service | ||||
|    */ | ||||
|   WxMpMemberCardService getMemberCardService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回营销相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpMarketingService | ||||
|    * @return WxMpMarketingService marketing service | ||||
|    */ | ||||
|   WxMpMarketingService getMarketingService(); | ||||
|  | ||||
| @ -472,42 +483,42 @@ public interface WxMpService extends WxService { | ||||
|   /** | ||||
|    * 获取RequestHttp对象. | ||||
|    * | ||||
|    * @return RequestHttp对象 | ||||
|    * @return RequestHttp对象 request http | ||||
|    */ | ||||
|   RequestHttp getRequestHttp(); | ||||
|  | ||||
|   /** | ||||
|    * 返回群发消息相关接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpMassMessageService | ||||
|    * @return WxMpMassMessageService mass message service | ||||
|    */ | ||||
|   WxMpMassMessageService getMassMessageService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回AI开放接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpAiOpenService | ||||
|    * @return WxMpAiOpenService ai open service | ||||
|    */ | ||||
|   WxMpAiOpenService getAiOpenService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回WIFI接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpWifiService | ||||
|    * @return WxMpWifiService wifi service | ||||
|    */ | ||||
|   WxMpWifiService getWifiService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回WIFI接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpWifiService | ||||
|    * @return WxMpWifiService ocr service | ||||
|    */ | ||||
|   WxOcrService getOcrService(); | ||||
|  | ||||
|   /** | ||||
|    * 返回图像处理接口的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxImgProcService | ||||
|    * @return WxImgProcService img proc service | ||||
|    */ | ||||
|   WxImgProcService getImgProcService(); | ||||
|  | ||||
| @ -647,7 +658,7 @@ public interface WxMpService extends WxService { | ||||
|   /** | ||||
|    * 返回评论数据管理接口方法的实现类对象,以方便调用其各个接口. | ||||
|    * | ||||
|    * @return WxMpWifiService | ||||
|    * @return WxMpWifiService comment service | ||||
|    */ | ||||
|   WxMpCommentService getCommentService(); | ||||
|  | ||||
| @ -671,4 +682,18 @@ public interface WxMpService extends WxService { | ||||
|    * @param oAuth2Service the o auth 2 service | ||||
|    */ | ||||
|   void setOAuth2Service(WxOAuth2Service oAuth2Service); | ||||
|  | ||||
|   /** | ||||
|    * Gets guide service. | ||||
|    * | ||||
|    * @return the guide service | ||||
|    */ | ||||
|   WxMpGuideService getGuideService(); | ||||
|  | ||||
|   /** | ||||
|    * Sets guide service. | ||||
|    * | ||||
|    * @param guideService the guide service | ||||
|    */ | ||||
|   void setGuideService(WxMpGuideService guideService); | ||||
| } | ||||
|  | ||||
| @ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; | ||||
| import me.chanjar.weixin.common.api.WxConsts; | ||||
| import me.chanjar.weixin.common.api.WxImgProcService; | ||||
| import me.chanjar.weixin.common.api.WxOcrService; | ||||
| import me.chanjar.weixin.common.bean.ToJson; | ||||
| import me.chanjar.weixin.common.bean.WxAccessToken; | ||||
| import me.chanjar.weixin.common.bean.WxJsapiSignature; | ||||
| import me.chanjar.weixin.common.bean.WxNetCheckResult; | ||||
| @ -119,6 +120,10 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | ||||
|   @Setter | ||||
|   private WxMpMerchantInvoiceService merchantInvoiceService = new WxMpMerchantInvoiceServiceImpl(this, this.cardService); | ||||
|  | ||||
|   @Getter | ||||
|   @Setter | ||||
|   private WxMpGuideService guideService = new WxMpGuideServiceImpl(this); | ||||
|  | ||||
|   @Getter | ||||
|   @Setter | ||||
|   private WxOAuth2Service oAuth2Service = new WxOAuth2ServiceImpl(this); | ||||
| @ -278,6 +283,21 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | ||||
|     return this.post(url.getUrl(this.getWxMpConfigStorage()), postData); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String post(WxMpApiUrl url, JsonObject jsonObject) throws WxErrorException { | ||||
|     return this.post(url.getUrl(this.getWxMpConfigStorage()), jsonObject.toString()); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String post(String url, ToJson obj) throws WxErrorException { | ||||
|     return this.post(url, obj.toJson()); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String post(String url, JsonObject jsonObject) throws WxErrorException { | ||||
|     return this.post(url, jsonObject.toString()); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public String post(String url, Object obj) throws WxErrorException { | ||||
|     return this.execute(SimplePostRequestExecutor.create(this), url, WxGsonBuilder.create().toJson(obj)); | ||||
| @ -366,7 +386,7 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | ||||
|       return null; | ||||
|     } catch (IOException e) { | ||||
|       log.error("\n【请求地址】: {}\n【请求参数】:{}\n【异常信息】:{}", uriWithAccessToken, dataForLog, e.getMessage()); | ||||
|       throw new WxErrorException(WxError.builder().errorMsg(e.getMessage()).build(), e); | ||||
|       throw new WxErrorException(e); | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @ -475,4 +495,13 @@ public abstract class BaseWxMpServiceImpl<H, P> implements WxMpService, RequestH | ||||
|     return this; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public WxMpGuideService getGuideService() { | ||||
|     return this.guideService; | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void setGuideService(WxMpGuideService guideService) { | ||||
|     this.guideService = guideService; | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,43 @@ | ||||
| package me.chanjar.weixin.mp.api.impl; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | ||||
| 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.enums.WxMpApiUrl; | ||||
|  | ||||
| /** | ||||
|  * . | ||||
|  * | ||||
|  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||
|  * @date 2020-10-06 | ||||
|  */ | ||||
| @AllArgsConstructor | ||||
| public class WxMpGuideServiceImpl implements WxMpGuideService { | ||||
|   private static final String ACCOUNT = "guide_account"; | ||||
|   private static final String OPENID = "guide_openid"; | ||||
|   private final WxMpService mpService; | ||||
|  | ||||
|   @Override | ||||
|   public void addGuide(String account, String openid, String headImgUrl, String nickName) throws WxErrorException { | ||||
|     this.mpService.post(WxMpApiUrl.Guide.ADD_GUIDE, GsonHelper.buildJsonObject(ACCOUNT, account, | ||||
|       "guide_headimgurl", headImgUrl, "guide_nickname", nickName, OPENID, openid)); | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public void addGuide(WxMpGuideInfo guideInfo) throws WxErrorException { | ||||
|     this.mpService.post(WxMpApiUrl.Guide.ADD_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))); | ||||
|   } | ||||
| } | ||||
| @ -1,34 +1,18 @@ | ||||
| package me.chanjar.weixin.mp.api.impl; | ||||
|  | ||||
| import lombok.RequiredArgsConstructor; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.common.api.WxOcrService; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult; | ||||
| import me.chanjar.weixin.common.bean.ocr.WxOcrBizLicenseResult; | ||||
| import me.chanjar.weixin.common.bean.ocr.WxOcrCommResult; | ||||
| import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingLicenseResult; | ||||
| import me.chanjar.weixin.common.bean.ocr.WxOcrDrivingResult; | ||||
| import me.chanjar.weixin.common.bean.ocr.WxOcrIdCardResult; | ||||
| import me.chanjar.weixin.common.bean.ocr.*; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.common.requestexecuter.ocr.OcrDiscernRequestExecutor; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.net.URLEncoder; | ||||
| import java.nio.charset.StandardCharsets; | ||||
|  | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.BANK_CARD; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.BIZ_LICENSE; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.COMM; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.DRIVING; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.DRIVING_LICENSE; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.FILEIDCARD; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.FILE_BANK_CARD; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.FILE_BIZ_LICENSE; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.FILE_COMM; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.FILE_DRIVING; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.FILE_DRIVING_LICENSE; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.IDCARD; | ||||
| import static me.chanjar.weixin.mp.enums.WxMpApiUrl.Ocr.*; | ||||
|  | ||||
| /** | ||||
|  * ocr 接口实现. | ||||
| @ -49,7 +33,7 @@ public class WxMpOcrServiceImpl implements WxOcrService { | ||||
|     } | ||||
|  | ||||
|     final String result = this.mainService.post(String.format(IDCARD.getUrl(this.mainService.getWxMpConfigStorage()), | ||||
|       imgUrl), null); | ||||
|       imgUrl), (String) null); | ||||
|     return WxOcrIdCardResult.fromJson(result); | ||||
|   } | ||||
|  | ||||
| @ -69,7 +53,7 @@ public class WxMpOcrServiceImpl implements WxOcrService { | ||||
|     } | ||||
|  | ||||
|     final String result = this.mainService.post(String.format(BANK_CARD.getUrl(this.mainService.getWxMpConfigStorage()), | ||||
|       imgUrl), null); | ||||
|       imgUrl), (String) null); | ||||
|     return WxOcrBankCardResult.fromJson(result); | ||||
|   } | ||||
|  | ||||
| @ -89,7 +73,7 @@ public class WxMpOcrServiceImpl implements WxOcrService { | ||||
|     } | ||||
|  | ||||
|     final String result = this.mainService.post(String.format(DRIVING.getUrl(this.mainService.getWxMpConfigStorage()), | ||||
|       imgUrl), null); | ||||
|       imgUrl), (String) null); | ||||
|     return WxOcrDrivingResult.fromJson(result); | ||||
|   } | ||||
|  | ||||
| @ -109,7 +93,7 @@ public class WxMpOcrServiceImpl implements WxOcrService { | ||||
|     } | ||||
|  | ||||
|     final String result = this.mainService.post(String.format(DRIVING_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()), | ||||
|       imgUrl), null); | ||||
|       imgUrl), (String) null); | ||||
|     return WxOcrDrivingLicenseResult.fromJson(result); | ||||
|   } | ||||
|  | ||||
| @ -129,7 +113,7 @@ public class WxMpOcrServiceImpl implements WxOcrService { | ||||
|     } | ||||
|  | ||||
|     final String result = this.mainService.post(String.format(BIZ_LICENSE.getUrl(this.mainService.getWxMpConfigStorage()), | ||||
|       imgUrl), null); | ||||
|       imgUrl), (String) null); | ||||
|     return WxOcrBizLicenseResult.fromJson(result); | ||||
|   } | ||||
|  | ||||
| @ -149,7 +133,7 @@ public class WxMpOcrServiceImpl implements WxOcrService { | ||||
|     } | ||||
|  | ||||
|     final String result = this.mainService.post(String.format(COMM.getUrl(this.mainService.getWxMpConfigStorage()), | ||||
|       imgUrl), null); | ||||
|       imgUrl), (String) null); | ||||
|     return WxOcrCommResult.fromJson(result); | ||||
|   } | ||||
|  | ||||
|  | ||||
| @ -0,0 +1,66 @@ | ||||
| package me.chanjar.weixin.mp.bean.guide; | ||||
|  | ||||
| import com.google.gson.annotations.SerializedName; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
| import lombok.experimental.Accessors; | ||||
| import me.chanjar.weixin.common.bean.ToJson; | ||||
| import me.chanjar.weixin.common.util.json.WxGsonBuilder; | ||||
|  | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  * 对话能力-顾问信息. | ||||
|  * | ||||
|  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||
|  * @date 2020-10-06 | ||||
|  */ | ||||
| @Data | ||||
| @Builder | ||||
| @Accessors(chain = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class WxMpGuideInfo implements ToJson, Serializable { | ||||
|   private static final long serialVersionUID = -8159470115679031290L; | ||||
|  | ||||
|   /** | ||||
|    * 顾问的微信帐号 | ||||
|    */ | ||||
|   @SerializedName("guide_account") | ||||
|   private String account; | ||||
|  | ||||
|   /** | ||||
|    * 顾问的openid或者unionid | ||||
|    */ | ||||
|   @SerializedName("guide_openid") | ||||
|   private String openid; | ||||
|  | ||||
|   /** | ||||
|    * 顾问昵称 | ||||
|    */ | ||||
|   @SerializedName("guide_nickname") | ||||
|   private String nickName; | ||||
|  | ||||
|   /** | ||||
|    * 顾问头像 | ||||
|    */ | ||||
|   @SerializedName("guide_headimgurl") | ||||
|   private String headImgUrl; | ||||
|  | ||||
|   /** | ||||
|    * 顾问状态(1:确认中;2已确认;3已拒绝;4已过期) | ||||
|    */ | ||||
|   @SerializedName("status") | ||||
|   private Integer status; | ||||
|  | ||||
|   @Override | ||||
|   public String toJson() { | ||||
|     return WxGsonBuilder.create().toJson(this); | ||||
|   } | ||||
|  | ||||
|   public static WxMpGuideInfo fromJson(String json) { | ||||
|     return WxGsonBuilder.create().fromJson(json, WxMpGuideInfo.class); | ||||
|   } | ||||
| } | ||||
| @ -1156,4 +1156,31 @@ public interface WxMpApiUrl { | ||||
|       return buildUrl(config.getHostConfig(), prefix, path); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * 对话能力 | ||||
|    */ | ||||
|   @AllArgsConstructor | ||||
|   enum Guide implements WxMpApiUrl { | ||||
|     /** | ||||
|      * 添加顾问 | ||||
|      */ | ||||
|     ADD_GUIDE(API_DEFAULT_HOST_URL, "/cgi-bin/guide/addguideacct"), | ||||
|  | ||||
|     /** | ||||
|      * 获取顾问信息 | ||||
|      */ | ||||
|     GET_GUIDE(API_DEFAULT_HOST_URL, "/cgi-bin/guide/getguideacct"); | ||||
|     private final String prefix; | ||||
|     private final String path; | ||||
|  | ||||
|     @Override | ||||
|     public String getUrl(WxMpConfigStorage config) { | ||||
|       if (null == config) { | ||||
|         return buildUrl(null, prefix, path); | ||||
|       } | ||||
|  | ||||
|       return buildUrl(config.getHostConfig(), prefix, path); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,39 @@ | ||||
| package me.chanjar.weixin.mp.api.impl; | ||||
|  | ||||
| import com.google.inject.Inject; | ||||
| 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 org.testng.annotations.Guice; | ||||
| import org.testng.annotations.Test; | ||||
|  | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
|  | ||||
| /** | ||||
|  * 单元测试. | ||||
|  * | ||||
|  * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||
|  * @date 2020-10-06 | ||||
|  */ | ||||
| @Guice(modules = ApiTestModule.class) | ||||
| public class WxMpGuideServiceImplTest { | ||||
|   @Inject | ||||
|   protected WxMpService wxService; | ||||
|  | ||||
|   @Test | ||||
|   public void testAddGuide() throws WxErrorException { | ||||
|     this.wxService.getGuideService().addGuide("abc", "", null, null); | ||||
|   } | ||||
|  | ||||
|   @Test | ||||
|   public void testAddGuide_another() throws WxErrorException { | ||||
|     this.wxService.getGuideService().addGuide(WxMpGuideInfo.builder().account("cde").build()); | ||||
|   } | ||||
|  | ||||
|   @Test | ||||
|   public void testGetGuide() throws WxErrorException { | ||||
|     final WxMpGuideInfo guideInfo = this.wxService.getGuideService().getGuide("abc", null); | ||||
|     assertThat(guideInfo).isNotNull(); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Binary Wang
					Binary Wang