From a874973428eaad7e547d4836e490f752845bb771 Mon Sep 17 00:00:00 2001 From: fengyapeng Date: Tue, 20 Dec 2016 10:27:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9weixin4j=20=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E5=85=B6=E6=9B=B4=E9=80=82=E7=94=A8=E4=BA=8Ewyying?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin4j/exception/WeixinException.java | 101 ++++++++++-------- .../http/weixin/WeixinRequestExecutor.java | 30 +++--- .../foxinmy/weixin4j/http/weixin/error.xml | 78 +++++++++++--- .../com/foxinmy/weixin4j/model/Token.java | 32 +++++- 4 files changed, 170 insertions(+), 71 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/exception/WeixinException.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/exception/WeixinException.java index 40a5c752..aa6b5681 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/exception/WeixinException.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/exception/WeixinException.java @@ -2,65 +2,82 @@ package com.foxinmy.weixin4j.exception; import com.foxinmy.weixin4j.util.StringUtil; import com.foxinmy.weixin4j.util.WeixinErrorUtil; +import com.foxinmy.weixin4j.util.WeixinErrorUtil2; /** * 调用微信接口抛出的异常 * - * @className WeixinException * @author jinyu(foxinmy@gmail.com) + * @className WeixinException * @date 2014年4月10日 - * @since JDK 1.6 * @see + * @since JDK 1.6 */ public class WeixinException extends Exception { - private static final long serialVersionUID = 7148145661883468514L; + private static final long serialVersionUID = 7148145661883468514L; - private String code; - private String desc; + private String code; + private String desc; + private String describeErrorMsg; - public WeixinException(String code, String desc) { - this.code = code; - this.desc = desc; - } + public WeixinException(String code, String desc) { + this(code, desc, null); + } - public WeixinException(String desc) { - this.code = "-1"; - this.desc = desc; - } - public WeixinException(Throwable e) { - super(e); - } + public WeixinException(String errorCode, String errorMsg, String describeErrorMsg) { + this.code = errorCode; + this.desc = errorMsg; + if (describeErrorMsg == null) { + this.describeErrorMsg = errorMsg; + } else { + this.describeErrorMsg = describeErrorMsg; + } + } - public WeixinException(String message, Throwable cause) { - super(message, cause); - } + public WeixinException(String desc) { + this.code = "-1"; + this.desc = desc; + } - public String getErrorCode() { - return code; - } + public String getDescribeErrorMsg() { + return describeErrorMsg; + } - public String getErrorDesc() { - return desc; - } - public String getErrorText() { - return WeixinErrorUtil.getText(code); - } + public WeixinException(Throwable e) { + super(e); + } - @Override - public String getMessage() { - if (StringUtil.isNotBlank(code)) { - StringBuilder buf = new StringBuilder(); - buf.append(code).append(" >> ").append(desc); - String text = getErrorText(); - if (StringUtil.isNotBlank(text)) { - buf.append(" >> ").append(text); - } - return buf.toString(); - } else { - return super.getMessage(); - } - } + public WeixinException(String message, Throwable cause) { + super(message, cause); + } + + public String getErrorCode() { + return code; + } + + public String getErrorDesc() { + return desc; + } + + public String getErrorText() { + return WeixinErrorUtil2.getText(code); + } + + @Override + public String getMessage() { + if (StringUtil.isNotBlank(code)) { + StringBuilder buf = new StringBuilder(); + buf.append(code).append(" >> ").append(desc); + String text = getErrorText(); + if (StringUtil.isNotBlank(text)) { + buf.append(" >> ").append(text); + } + return buf.toString(); + } else { + return super.getMessage(); + } + } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/WeixinRequestExecutor.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/WeixinRequestExecutor.java index f24cf664..8f4eb32d 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/WeixinRequestExecutor.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/WeixinRequestExecutor.java @@ -28,21 +28,24 @@ import com.foxinmy.weixin4j.http.message.XmlMessageConverter; import com.foxinmy.weixin4j.logging.InternalLogLevel; import com.foxinmy.weixin4j.logging.InternalLogger; import com.foxinmy.weixin4j.logging.InternalLoggerFactory; + + import com.foxinmy.weixin4j.util.Consts; +import com.foxinmy.weixin4j.util.WeixinErrorUtil2; /** * 负责微信请求的执行 * + * @author jy * @className WeixinRequestExecutor * @author jinyu(foxinmy@gmail.com) * @date 2015年8月15日 - * @since JDK 1.6 * @see + * @since JDK 1.6 */ public class WeixinRequestExecutor { - protected final InternalLogger logger = InternalLoggerFactory - .getInstance(getClass()); + protected final InternalLogger logger = InternalLoggerFactory.getInstance(getClass()); private static final String SUCCESS_CODE = ",0,success,"; @@ -58,7 +61,7 @@ public class WeixinRequestExecutor { /** * Post方法执行微信请求 - * + * * @param url * 请求URL * @param body @@ -75,7 +78,7 @@ public class WeixinRequestExecutor { /** * Post方法执行微信请求,用于文件上传 - * + * * @param url * 请求URL * @param bodyParts @@ -97,7 +100,7 @@ public class WeixinRequestExecutor { /** * Get方法执行微信请求 - * + * * @param url * 请求URL,如:https://api.weixin.qq.com/cgi-bin/token * @param parameters @@ -118,7 +121,7 @@ public class WeixinRequestExecutor { /** * 执行微信请求 - * + * * @param request * 微信请求 * @return 微信响应 @@ -130,6 +133,9 @@ public class WeixinRequestExecutor { logger.debug("weixin request >> " + request.getMethod() + " " + request.getURI().toString()); } + if(request.getEntity() instanceof StringEntity){ + logger.debug("weixin request body >> " + ((StringEntity) request.getEntity()).getContentString()); + } HttpResponse httpResponse = httpClient.execute(request); WeixinResponse response = new WeixinResponse(httpResponse); handleResponse(response); @@ -141,7 +147,7 @@ public class WeixinRequestExecutor { /** * 响应内容是否为流 - * + * * @param response * 微信响应 * @return true/false @@ -159,7 +165,7 @@ public class WeixinRequestExecutor { /** * handle the weixin response - * + * * @param response * 微信请求响应 * @throws WeixinException @@ -182,7 +188,7 @@ public class WeixinRequestExecutor { if (!SUCCESS_CODE.contains(String.format(",%s,", result.getReturnCode() .toLowerCase()))) { throw new WeixinException(result.getReturnCode(), - result.getReturnMsg()); + result.getReturnMsg(),WeixinErrorUtil2.getText(result.getReturnCode())); } if (XmlMessageConverter.GLOBAL.canConvert(XmlResult.class, response)) { try { @@ -191,7 +197,7 @@ public class WeixinRequestExecutor { if (!SUCCESS_CODE.contains(String.format(",%s,", xmlResult .getResultCode().toLowerCase()))) { throw new WeixinException(xmlResult.getErrCode(), - xmlResult.getErrCodeDes()); + xmlResult.getErrCodeDes(),WeixinErrorUtil2.getText(xmlResult.getErrCode())); } } catch (IOException e) { ; @@ -205,7 +211,7 @@ public class WeixinRequestExecutor { /** * 创建 SSL微信请求对象 - * + * * @param password * 加载密钥 * @param inputStream diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/error.xml b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/error.xml index a520e717..aa0ec8d8 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/error.xml +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/weixin/error.xml @@ -2,14 +2,16 @@ - - -1 - 系统繁忙,请稍后再试 - 0 请求成功 + + -1 + system error + 微信系统繁忙,请稍候再试 + + 40001 获取access_token时AppSecret错误,或者access_token无效 @@ -36,7 +38,8 @@ 40007 - 无效的media_id + invalid media_id + 请检查您的素材! 40008 @@ -133,7 +136,7 @@ 40031 - 不合法的openid列表 + 不合法的粉丝列表 40032 @@ -339,6 +342,10 @@ 40116 不合法的Code码。 + + 40113 + 不支持的文件类型 + 40117 分组名字不合法 @@ -375,6 +382,15 @@ 40132 微信号不合法 + + 40130 + 最少选择两名粉丝 + + + 40132 + invalid username + 无效的微信号 + 40137 不支持的图片格式 @@ -533,7 +549,8 @@ 43004 - 需要接收者关注 + require subscribe + 未关注公众号 43005 @@ -593,19 +610,23 @@ 45001 - 多媒体文件大小超过限制 + media size out of limit + 多媒体文件大小超过微信限制 45002 - 消息内容超过限制 + content size out of limit + 发送内容超过限制 45003 - 标题字段超过限制 + title size out of limit + 标题超过限制 45004 - 描述字段超过限制 + description size out of limit + 描述超过限制 45005 @@ -651,6 +672,10 @@ 45021 字段超过长度限制,请参考相应接口的字段说明。 + + 45028 + 群发次数超过限制 + 45022 应用名字长度不合法,合法长度为2-16个字 @@ -715,10 +740,32 @@ 45058 不能修改0/1/2这三个系统默认保留的标签 + + 48001 + 公众号没有调用该接口的权限 + + + 48002 + 公众号没有调用该接口的权限 + + + 48003 + 请登录公众号后台,打开“群发功能”,同意腾讯群发消息声明 + + 45059 有粉丝身上的标签数已经超过限制 + + 48005 + 此素材被自定义菜单引用,请先解除引用关系再编辑素材 + forbid to delete material used by auto-reply or menu hint: [JMOD7a0063e292] + + + 61450 + 系统错误(system error) + 45157 标签名非法,请注意不能和其他标签重名 @@ -2420,8 +2467,8 @@ 金额不匹配,报关的订单金额必须和支付的金额一致,请检查报关订单的金额是否正确 - POST_DATA_EMPTY - post数据为空,post数据不能为空,请检查post数据是否为空 + 9001007 + 上传文件无效 REQUIRE_POST_METHOD @@ -2432,9 +2479,8 @@ 输入的参数xml格式有误,检查输入的xml格式是否正确 - SECOND_OVER_LIMITED - 企业红包的按分钟发放受限,每分钟发送红包数量不得超过1800个;(可联系微信支付wxhongbao@tencent.com调高额度) - + 9001010 + 文件上传到微信失败 SENDNUM_LIMIT diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Token.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Token.java index a25f8755..1bfcec19 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Token.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Token.java @@ -3,6 +3,7 @@ package com.foxinmy.weixin4j.model; import java.util.HashMap; import java.util.Map; +import com.alibaba.fastjson.annotation.JSONField; import com.foxinmy.weixin4j.cache.Cacheable; /** @@ -25,10 +26,12 @@ public class Token implements Cacheable { /** * 获取到的凭证 */ + @JSONField(name = "access_token") private String accessToken; /** * 凭证有效时间,单位:毫秒 */ + @JSONField(name = "expires_in") private long expires; /** * token创建的时间,单位:毫秒 @@ -39,6 +42,11 @@ public class Token implements Cacheable { */ private Map extra; + /** + * 请求返回的原始结果 + */ + private String originalResult; + /** * 永不过期、创建时间为当前时间戳的token对象 * @@ -55,7 +63,7 @@ public class Token implements Cacheable { * @param accessToken * 凭证字符串 * @param expires - * 过期时间 单位毫秒 + * 过期时间 单位秒 */ public Token(String accessToken, long expires) { this(accessToken, expires, System.currentTimeMillis()); @@ -77,6 +85,26 @@ public class Token implements Cacheable { this.extra = new HashMap(); } + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public void setExpires(long expires) { + this.expires = expires; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } + + public String getOriginalResult() { + return originalResult; + } + + public void setOriginalResult(String originalResult) { + this.originalResult = originalResult; + } + public String getAccessToken() { return accessToken; } @@ -100,6 +128,8 @@ public class Token implements Cacheable { return this; } + + @Override public String toString() { return "Token [accessToken=" + accessToken + ", expires=" + expires