From 447c73e43a71093207d35caec77fc6273ebe6d4d Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Mon, 16 Oct 2017 14:32:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=8C=96=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E6=A8=A1=E5=9D=97=E7=9A=84=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../miniapp/api/impl/WxMaMsgServiceImpl.java | 3 +- .../wx/miniapp/api/impl/WxMaServiceImpl.java | 9 +++-- .../miniapp/api/impl/WxMaUserServiceImpl.java | 4 +- ...er.java => AbstractWxMaQrcodeWrapper.java} | 5 ++- .../wx/miniapp/bean/WxMaCodeLineColor.java | 1 + .../wx/miniapp/bean/WxMaKefuMessage.java | 4 +- .../wx/miniapp/bean/WxMaQrcode.java | 2 +- .../wx/miniapp/bean/WxMaWxcode.java | 6 ++- .../wx/miniapp/bean/WxMaWxcodeLimit.java | 6 ++- .../wx/miniapp/builder/ImageBuilder.java | 4 +- .../wx/miniapp/config/WxMaInMemoryConfig.java | 1 + .../wx/miniapp/constant/WxMaConstants.java | 37 +++++++++++++++++-- .../wx/miniapp/message/WxMaMessageRouter.java | 12 +++--- .../message/WxMaMessageRouterRule.java | 2 +- .../util/http/QrCodeRequestExecutor.java | 6 +-- .../wx/miniapp/bean/WxMaKefuMessageTest.java | 4 +- .../wx/miniapp/demo/WxMaDemoServer.java | 8 ++-- 17 files changed, 77 insertions(+), 37 deletions(-) rename weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/{WxMaQrcodeWrapper.java => AbstractWxMaQrcodeWrapper.java} (76%) diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java index 70a4e504..aadc04f8 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java @@ -4,6 +4,7 @@ import cn.binarywang.wx.miniapp.api.WxMaMsgService; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage; import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; +import cn.binarywang.wx.miniapp.constant.WxMaConstants; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import me.chanjar.weixin.common.bean.result.WxError; @@ -30,7 +31,7 @@ public class WxMaMsgServiceImpl implements WxMaMsgService { public void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException { String responseContent = this.wxMaService.post(TEMPLATE_MSG_SEND_URL, templateMessage.toJson()); JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); - if (jsonObject.get("errcode").getAsInt() != 0) { + if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { throw new WxErrorException(WxError.fromJson(responseContent)); } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java index 106f020e..9cfa7efa 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaServiceImpl.java @@ -2,6 +2,7 @@ package cn.binarywang.wx.miniapp.api.impl; import cn.binarywang.wx.miniapp.api.*; import cn.binarywang.wx.miniapp.config.WxMaConfig; +import cn.binarywang.wx.miniapp.constant.WxMaConstants; import com.google.gson.JsonParser; import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.bean.result.WxError; @@ -147,6 +148,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp T execute(RequestExecutor executor, String uri, E data) throws WxErrorException { int retryTimes = 0; do { @@ -195,11 +197,10 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp params = new HashMap<>(); + Map params = new HashMap<>(8); params.put("appid", config.getAppid()); params.put("secret", config.getSecret()); params.put("js_code", jsCode); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcodeWrapper.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/AbstractWxMaQrcodeWrapper.java similarity index 76% rename from weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcodeWrapper.java rename to weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/AbstractWxMaQrcodeWrapper.java index 37c5c5db..b4ad7517 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcodeWrapper.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/AbstractWxMaQrcodeWrapper.java @@ -4,9 +4,10 @@ import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; /** * 微信二维码(小程序码)包装器 - * Created by Element on 2017/7/27. + * + * @author Element */ -public abstract class WxMaQrcodeWrapper { +public abstract class AbstractWxMaQrcodeWrapper { @Override public String toString() { diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaCodeLineColor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaCodeLineColor.java index 5312d973..850da06d 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaCodeLineColor.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaCodeLineColor.java @@ -6,6 +6,7 @@ package cn.binarywang.wx.miniapp.bean; * 用于描述二维码(小程序码)颜色(RGB参数值), * 详情请查看文档 https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html * + * @author Element */ public class WxMaCodeLineColor { private String r = "0", g = "0", b = "0"; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaKefuMessage.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaKefuMessage.java index d75fbf12..680eeb65 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaKefuMessage.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaKefuMessage.java @@ -25,14 +25,14 @@ public class WxMaKefuMessage implements Serializable { /** * 获得文本消息builder */ - public static TextBuilder TEXT() { + public static TextBuilder newTextBuilder() { return new TextBuilder(); } /** * 获得图片消息builder */ - public static ImageBuilder IMAGE() { + public static ImageBuilder newImageBuilder() { return new ImageBuilder(); } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcode.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcode.java index a047d7c8..39b870fb 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcode.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcode.java @@ -7,7 +7,7 @@ import java.io.Serializable; /** * @author Binary Wang */ -public class WxMaQrcode extends WxMaQrcodeWrapper implements Serializable { +public class WxMaQrcode extends AbstractWxMaQrcodeWrapper implements Serializable { private static final long serialVersionUID = 5777119669111011584L; private String path; private int width = 430; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java index faf78f58..8654ed99 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java @@ -6,9 +6,11 @@ import com.google.gson.annotations.SerializedName; import java.io.Serializable; /** - * Created by Element on 2017/7/27. + * + * @author Element + * @date 2017/7/27 */ -public class WxMaWxcode extends WxMaQrcodeWrapper implements Serializable { +public class WxMaWxcode extends AbstractWxMaQrcodeWrapper implements Serializable { private static final long serialVersionUID = 1287399621649210322L; private String path; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java index 864a082e..92f6837a 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java @@ -6,9 +6,11 @@ import com.google.gson.annotations.SerializedName; import java.io.Serializable; /** - * Created by Element on 2017/7/27. + * + * @author Element + * @date 2017/7/27 */ -public class WxMaWxcodeLimit extends WxMaQrcodeWrapper implements Serializable { +public class WxMaWxcodeLimit extends AbstractWxMaQrcodeWrapper implements Serializable { private static final long serialVersionUID = 4782193774524960401L; private String scene; private String page; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java index a903e97c..d4bd0688 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java @@ -13,8 +13,8 @@ public final class ImageBuilder extends BaseBuilder { this.msgType = WxMaConstants.KefuMsgType.IMAGE; } - public ImageBuilder mediaId(String media_id) { - this.mediaId = media_id; + public ImageBuilder mediaId(String mediaId) { + this.mediaId = mediaId; return this; } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaInMemoryConfig.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaInMemoryConfig.java index 735a52b5..7d84c90f 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaInMemoryConfig.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaInMemoryConfig.java @@ -175,6 +175,7 @@ public class WxMaInMemoryConfig implements WxMaConfig { return true; } + @Override public String getAppid() { return appid; } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java index 14016fa5..ccc492d1 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaConstants.java @@ -8,11 +8,19 @@ package cn.binarywang.wx.miniapp.constant; * @author Binary Wang */ public class WxMaConstants { + /** + * 微信接口返回的参数errcode + */ + public static final String ERRCODE = "errcode"; + /** * 素材类型 */ public static class MediaType { - public static final String IMAGE = "image";//图片 + /** + * 图片 + */ + public static final String IMAGE = "image"; } /** @@ -27,7 +35,30 @@ public class WxMaConstants { * 客服消息的消息类型 */ public static class KefuMsgType { - public static final String TEXT = "text";//文本消息 - public static final String IMAGE = "image";//图片消息 + /** + * 文本消息 + */ + public static final String TEXT = "text"; + /** + * 图片消息 + */ + public static final String IMAGE = "image"; + } + + public static final class ErrorCode { + /** + * 40001 获取access_token时AppSecret错误,或者access_token无效 + */ + public static final int ERR_40001 = 40001; + + /** + * 42001 access_token超时 + */ + public static final int ERR_42001 = 42001; + + /** + * 40014 不合法的access_token,请开发者认真比对access_token的有效性(如是否过期) + */ + public static final int ERR_40014 = 40014; } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouter.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouter.java index cbe42b1f..be3af708 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouter.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouter.java @@ -2,6 +2,7 @@ package cn.binarywang.wx.miniapp.message; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaMessage; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import me.chanjar.weixin.common.api.WxErrorExceptionHandler; import me.chanjar.weixin.common.api.WxMessageDuplicateChecker; import me.chanjar.weixin.common.api.WxMessageInMemoryDuplicateChecker; @@ -17,10 +18,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; +import java.util.concurrent.*; /** * @author Binary Wang @@ -42,7 +40,9 @@ public class WxMaMessageRouter { public WxMaMessageRouter(WxMaService wxMaService) { this.wxMaService = wxMaService; - this.executorService = Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE); + ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("WxMaMessageRouter-pool-%d").build(); + this.executorService = new ThreadPoolExecutor(DEFAULT_THREAD_POOL_SIZE, DEFAULT_THREAD_POOL_SIZE, + 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), namedThreadFactory); this.messageDuplicateChecker = new WxMessageInMemoryDuplicateChecker(); this.sessionManager = new StandardSessionManager(); this.exceptionHandler = new LogExceptionHandler(); @@ -159,7 +159,7 @@ public class WxMaMessageRouter { } public void route(final WxMaMessage wxMessage) { - this.route(wxMessage, new HashMap()); + this.route(wxMessage, new HashMap(2)); } /** diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouterRule.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouterRule.java index 835eb289..53536529 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouterRule.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouterRule.java @@ -196,7 +196,7 @@ public class WxMaMessageRouterRule { WxSessionManager sessionManager, WxErrorExceptionHandler exceptionHandler) { if (context == null) { - context = new HashMap<>(); + context = new HashMap<>(16); } try { diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java index 3c026f4a..1cbdf384 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java @@ -1,6 +1,6 @@ package cn.binarywang.wx.miniapp.util.http; -import cn.binarywang.wx.miniapp.bean.WxMaQrcodeWrapper; +import cn.binarywang.wx.miniapp.bean.AbstractWxMaQrcodeWrapper; import me.chanjar.weixin.common.bean.result.WxError; import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.util.fs.FileUtils; @@ -25,7 +25,7 @@ import java.util.UUID; /** * @author Binary Wang */ -public class QrCodeRequestExecutor implements RequestExecutor { +public class QrCodeRequestExecutor implements RequestExecutor { protected RequestHttp requestHttp; public QrCodeRequestExecutor(RequestHttp requestHttp) { @@ -33,7 +33,7 @@ public class QrCodeRequestExecutor implements RequestExecutor context, WxMaService service, WxSessionManager sessionManager) throws WxErrorException { System.out.println("收到消息:" + wxMessage.toString()); - service.getMsgService().sendKefuMsg(WxMaKefuMessage.TEXT().content("收到信息为:" + wxMessage.toJson()) + service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson()) .toUser(wxMessage.getFromUser()).build()); } }; @@ -44,7 +44,7 @@ public class WxMaDemoServer { public void handle(WxMaMessage wxMessage, Map context, WxMaService service, WxSessionManager sessionManager) throws WxErrorException { - service.getMsgService().sendKefuMsg(WxMaKefuMessage.TEXT().content("回复文本消息") + service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息") .toUser(wxMessage.getFromUser()).build()); } @@ -60,7 +60,7 @@ public class WxMaDemoServer { ClassLoader.getSystemResourceAsStream("tmp.png")); service.getMsgService().sendKefuMsg( WxMaKefuMessage - .IMAGE() + .newImageBuilder() .mediaId(uploadResult.getMediaId()) .toUser(wxMessage.getFromUser()) .build()); @@ -79,7 +79,7 @@ public class WxMaDemoServer { WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia(WxMaConstants.MediaType.IMAGE, file); service.getMsgService().sendKefuMsg( WxMaKefuMessage - .IMAGE() + .newImageBuilder() .mediaId(uploadResult.getMediaId()) .toUser(wxMessage.getFromUser()) .build());