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 5193b3ca..3a175373 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
@@ -1,6 +1,7 @@
package com.foxinmy.weixin4j.exception;
import com.foxinmy.weixin4j.util.StringUtil;
+import com.foxinmy.weixin4j.util.WeixinErrorUtil;
/**
* 调用微信接口抛出的异常
@@ -15,17 +16,17 @@ public class WeixinException extends Exception {
private static final long serialVersionUID = 7148145661883468514L;
- private String errorCode;
- private String errorMsg;
+ private String code;
+ private String desc;
- public WeixinException(String errorCode, String errorMsg) {
- this.errorCode = errorCode;
- this.errorMsg = errorMsg;
+ public WeixinException(String code, String desc) {
+ this.code = code;
+ this.desc = desc;
}
- public WeixinException(String errorMsg) {
- this.errorCode = "-1";
- this.errorMsg = errorMsg;
+ public WeixinException(String desc) {
+ this.code = "-1";
+ this.desc = desc;
}
public WeixinException(Throwable e) {
@@ -37,25 +38,27 @@ public class WeixinException extends Exception {
}
public String getErrorCode() {
- return errorCode;
+ return code;
}
public String getErrorMsg() {
- return errorMsg;
+ return desc;
}
@Override
public String getMessage() {
StringBuilder buf = new StringBuilder();
- if (StringUtil.isNotBlank(errorCode)) {
- buf.append(errorCode);
+ if (StringUtil.isNotBlank(code)) {
+ buf.append(code);
}
- if (StringUtil.isNotBlank(errorMsg)) {
- buf.append(" ").append(errorMsg);
+ if (StringUtil.isNotBlank(desc)) {
+ buf.append(" >> ").append(desc);
}
- if (buf.length() == 0) {
+ if (buf.length() > 0) {
+ buf.append(" >> ").append(WeixinErrorUtil.getText(code));
+ return buf.toString();
+ } else {
return super.getMessage();
}
- return buf.toString();
}
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/exception/WeixinPayException.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/exception/WeixinPayException.java
index 5e52cdec..b66f40b0 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/exception/WeixinPayException.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/exception/WeixinPayException.java
@@ -12,14 +12,14 @@ package com.foxinmy.weixin4j.exception;
public class WeixinPayException extends WeixinException {
private static final long serialVersionUID = 7148145661883468514L;
- public WeixinPayException(String errorMsg) {
- super(errorMsg);
+ public WeixinPayException(String desc) {
+ super(desc);
}
- public WeixinPayException(String errorCode, String errorMsg) {
- super(errorCode, errorMsg);
+ public WeixinPayException(String code, String desc) {
+ super(code, desc);
}
-
+
public WeixinPayException(Throwable e) {
super(e);
}
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 78867682..a446df0a 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
@@ -22,8 +22,6 @@ import com.foxinmy.weixin4j.http.factory.HttpClientFactory;
import com.foxinmy.weixin4j.logging.InternalLogger;
import com.foxinmy.weixin4j.logging.InternalLoggerFactory;
import com.foxinmy.weixin4j.model.Consts;
-import com.foxinmy.weixin4j.util.StringUtil;
-import com.foxinmy.weixin4j.util.WeixinErrorUtil;
import com.foxinmy.weixin4j.xml.XmlStream;
/**
@@ -95,7 +93,8 @@ public class WeixinRequestExecutor {
return doRequest(request);
}
- protected WeixinResponse doRequest(HttpRequest request) throws WeixinException {
+ protected WeixinResponse doRequest(HttpRequest request)
+ throws WeixinException {
request.setParams(params);
try {
logger.info("weixin request >> " + request.getMethod() + " "
@@ -144,10 +143,6 @@ public class WeixinRequestExecutor {
JsonResult jsonResult = response.getAsJsonResult();
response.setJsonResult(true);
if (jsonResult.getCode() != 0) {
- if (StringUtil.isBlank(jsonResult.getDesc())) {
- jsonResult.setDesc(WeixinErrorUtil.getText(Integer
- .toString(jsonResult.getCode())));
- }
throw new WeixinException(Integer.toString(jsonResult.getCode()),
jsonResult.getDesc());
}
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 aa4ed292..410cac0f 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
@@ -1,41 +1,34 @@
-
-
-
+
+
+
+
+ -1
+ 系统繁忙,请稍后再试
+
0
- OK
请求成功
-
- -1
- system error
- 系统繁忙
-
-
40001
- invalid credential
- 不合法的调用凭证
+ 获取access_token时AppSecret错误,或者access_token无效
40002
- invalid grant_type
- 不合法的grant_type
+ 不合法的凭证类型
40003
- invalid openid
- 不合法的OpenID
+ 非法的openid
40004
- invalid media type
不合法的媒体文件类型
40005
- 不合法的文件类型
+ 不支持的媒体类型
40006
@@ -43,73 +36,60 @@
40007
- invalid media_id
- 不合法的media_id
+ 无效的media_id
40008
- invalid message type
- 不合法的message_type
+ 不合法的消息类型
40009
- invalid image size
- 不合法的图片大小
+ 媒体文件长度不合法
40010
- invalid voice size
- 不合法的语音大小
+ 不合法的语音文件大小
40011
- invalid video size
- 不合法的视频大小
+ 不合法的视频文件大小
40012
- invalid thumb size
- 不合法的缩略图大小
+ 不合法的缩略图文件大小
40013
- invalid appid
- 不合法的AppID
+ 不合法的Appid,请开发者检查AppID的正确性,避免异常字符,注意大小写。
40014
- invalid access_token
- 不合法的access_token
+ 不合法的access_token,请开发者认真比对access_token的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口
+
40015
- invalid menu type
不合法的菜单类型
40016
- invalid button size
- 不合法的菜单按钮个数
+ 不合法的按钮个数
40017
- invalid button type
- 不合法的按钮类型
+ 不合法的按钮个数
40018
- invalid button name size
- 不合法的按钮名称长度
+ 不合法的按钮名字长度
40019
- invalid button key size
不合法的按钮KEY长度
40020
- invalid button url size
- 不合法的url长度
+ 不合法的按钮URL长度
40021
@@ -121,50 +101,43 @@
40023
- invalid sub button size
不合法的子菜单按钮个数
40024
- invalid sub button type
- 不合法的子菜单类型
+ 不合法的子菜单按钮类型
40025
- invalid sub button name size
- 不合法的子菜单按钮名称长度
+ 不合法的子菜单按钮名字长度
40026
- invalid sub button key size
不合法的子菜单按钮KEY长度
40027
- invalid sub button url size
- 不合法的子菜单按钮url长度
+ 不合法的子菜单按钮URL长度
40028
- 不合法的自定义菜单使用员工
+ 不合法的自定义菜单使用用户
40029
- invalid code
- 不合法或已过期的code
+ 不合法的oauth_code
40030
- invalid refresh_token
不合法的refresh_token
40031
- 不合法的UserID列表
+ 不合法的openid列表
40032
- 不合法的UserID列表长度
+ 每次传入的openid列表个数不能超过50个
40033
@@ -172,17 +145,7 @@
40035
- 不合法的参数
-
-
- 40036
- invalid template_id size
- 不合法的template_id长度
-
-
- 40037
- invalid template_id
- 不合法的template_id
+ 不符合的图片大小
40038
@@ -190,8 +153,7 @@
40039
- invalid url size
- 不合法的url长度
+ 不合法的URL长度
40040
@@ -207,26 +169,35 @@
40048
- invalid url domain
- 不合法的url域名
+ url中包含不合法domain
+
+
+ 40050
+ 不合法的分组id
+
+
+ 40051
+ 分组名字不合法
+
+
+ 40053
+ 不合法的actioninfo,请开发者确认参数正确。
40054
- invalid sub button url domain
- 不合法的子菜单按钮url域名
+ 不合法的子菜单url域名
40055
- invalid button url domain
- 不合法的菜单按钮url域名
+ 不合法的按钮url域名
40056
- 不合法的agentid
+ 不合法的Code码。
40057
- 不合法的callbackurl
+ 不合法的callbackurl或者callbackurl验证失败
40058
@@ -262,8 +233,7 @@
40066
- invalid url/department
- 不合法的url/不合法的部门列表
+ 不合法的部门列表
40067
@@ -279,15 +249,15 @@
40070
- 列表中所有标签(用户)ID都不合法
+ 基本信息base info中填写的库存信息SKU不合法,参考CreateCard创建卡券接口
40071
- 不合法的标签名字,标签名字已经存在
+ 不合法的卡券类型。
40072
- 不合法的标签名字长度
+ 不合法的编码方式。
40073
@@ -297,21 +267,25 @@
40074
news消息不支持指定为高保密消息
+
+ 40075
+ 错误的encrypt码
+
40077
不合法的预授权码
40078
- 不合法的临时授权码
+ 不合法的卡券状态。
40079
- 不合法的授权信息
+ 不合法的时间。
40080
- 不合法的suitesecret
+ 不合法的CardExt。
40082
@@ -343,7 +317,23 @@
40094
- 不合法的URL
+ invalid args
+
+
+ 40099
+ 卡券已被核销。
+
+
+ 40100
+ 不合法的时间区间。
+
+
+ 40104
+ 创建子商户时填的类目id不对
+
+
+ 40116
+ 不合法的Code码。
40117
@@ -365,67 +355,85 @@
40121
不合法的media_id类型
+
+ 40122
+ 不合法的库存数量。
+
+
+ 40124
+ 会员卡设置查过限制的 custom_field字段。
+
+
+ 40127
+ 卡券被用户删除或转赠中。
+
+
+ 40132
+ 微信号不合法
+
40137
不支持的图片格式
+
+ 40139
+ 子商户id不正确
+
+
+ 40140
+ 子商户状态不对,创建卡券时要求已审核,更新子商户信息时要求已驳回
+
+
+ 40141
+ 图片url错误
+
41001
- access_token missing
- 缺失access_token参数
+ 缺少access_token参数
41002
- appid missing
- 缺失appid参数
+ 缺少appid参数
41003
- refresh_token missing
- 缺失refresh_token参数
+ 缺少refresh_token参数
41004
- appsecret missing
- 缺失secret参数
+ appid为空
41005
- media data missing
- 缺失二进制媒体文件
+ 缺少多媒体文件数据
41006
- media_id missing
- 缺失media_id参数
+ 缺少media_id参数
41007
- sub_menu data missing
- 缺失子菜单数据
+ 缺少子菜单数据
41008
- missing code
- 缺失code参数
+ 缺少oauth code
41009
- missing openid
- 缺失openid参数
+ 缺少openid
41010
- missing url
- 缺失url参数
+ 缺少url
41011
- 缺少agentid
+ 缺少必填字段。
41012
- 缺少应用头像mediaid
+ 缺少cardid参数。
41013
@@ -469,7 +477,7 @@
41025
- 缺少永久授权码
+ 缺少location_list
41034
@@ -481,18 +489,15 @@
42001
- access_token expired
- access_token超时
+ token过期
42002
- refresh_token expired
refresh_token超时
42003
- code expired
- code超时
+ oauth_code超时
42004
@@ -502,25 +507,29 @@
42007
用户修改微信密码,accesstoken和refreshtoken失效,需要重新授权
+
+ 42008
+ 临时授权码失效
+
+
+ 42009
+ suitetoken失效
+
43001
- require GET method
- 需要使用GET方法请求
+ 需要GET请求
43002
- require POST method
- 需要使用POST方法请求
+ 需要POST请求
43003
- require https
- 需要使用HTTPS
+ 需要HTTPS请求
43004
- require subscribe
- 需要订阅关系
+ 需要接收者关注
43005
@@ -536,15 +545,15 @@
43008
- 需要支付授权
+ 当前账号未开通支付权限或未开通支付后送券接口权限,无法设置支付后送朋友的券功能
43009
- 需要员工已关注
+ 自定义SN权限,请前往公众平台申请。
43010
- 需要处于回调模式
+ 无储值权限,请前往公众平台申请。
43011
@@ -554,90 +563,69 @@
43013
应用对成员不可见
+
+ 43014
+ 母商户资料未提交、未审核或审核未通过(母商户资料提交并审核通过后,才能提交子商户资料)
+
+
+ 43016
+ 第三方平台账号需要完成认证
+
44001
- empty media data
多媒体文件为空
44002
- empty post data
- 空白的POST数据
+ POST的数据包为空
44003
- empty news data
- 空白的news数据
+ 图文消息内容为空
44004
- empty content
- 空白的内容
-
-
- 44005
- empty list size
- 空白的列表
+ 文本消息内容为空
45001
- media size out of limit
- 二进制文件超过限制
+ 多媒体文件大小超过限制
45002
- content size out of limit
- content参数超过限制
+ 消息内容超过限制
45003
- title size out of limit
- title参数超过限制
+ 标题字段超过限制
45004
- description size out of limit
- description参数超过限制
+ 描述字段超过限制
45005
- url size out of limit
- url参数长度超过限制
+ 链接字段超过限制
45006
- picurl size out of limit
- picurl参数超过限制
+ 图片链接字段超过限制
45007
- playtime out of limit
- 播放时间超过限制(语音为60s最大)
+ 语音播放时间超过限制
45008
- article size out of limit
- 图文消息的文章数量不能超过10条
+ 图文消息超过限制
45009
- api freq out of limit
- 接口调动频率超过限制
+ 接口调用超过限制
45010
- create menu limit
- 建立菜单被限制
-
-
- 45011
- api limit
- 频率限制
-
-
- 45012
- template size out of limit
- 模板大小超过限制
+ 创建菜单个数超过限制
45015
@@ -645,27 +633,24 @@
45016
- can't modify sys group
- 不能修改默认组
+ 系统分组,不允许修改
45017
- can't set group name too long sys group
- 修改组名过长
+ 分组名字过长
45018
- too many group now, no need to add new
- 组数量过多
+ 分组数量超过上限
+
+
+ 45021
+ 字段超过长度限制,请参考相应接口的字段说明。
45022
应用名字长度不合法,合法长度为2-16个字
-
- 45047
- 客服接口下行条数超过上限
-
45024
账号数量超过上限
@@ -682,10 +667,62 @@
45027
mpnews每天只能发送100次
+
+ 45028
+ 素材数量超过上限
+
+
+ 45029
+ media_id对该应用不可见
+
+
+ 45030
+ 该cardid无接口权限。
+
+
+ 45031
+ 库存为0。
+
45032
作者名字长度超过限制
+
+ 45033
+ 用户领取次数超过限制get_limit
+
+
+ 45047
+ 客服接口下行条数超过上限
+
+
+ 45056
+ 创建的标签数过多,请注意不能超过100个
+
+
+ 45057
+ 该标签下粉丝数超过10w,不允许直接删除
+
+
+ 45058
+ 不能修改0/1/2这三个系统默认保留的标签
+
+
+ 45059
+ 有粉丝身上的标签数已经超过限制
+
+
+ 45157
+ 标签名非法,请注意不能和其他标签重名
+
+
+ 45158
+ 标签名长度超过30个字节
+
+
+ 45159
+ 非法的标签
+
46001
不存在媒体数据
@@ -700,74 +737,47 @@
46004
- 不存在的员工
+ 不存在的用户
47001
解析JSON/XML内容错误
+
+ 48001
+ 接口功能未授权,请确认公众号已获得该权限
+
48002
- Api禁用
-
-
-
- 61450
- 系统错误(system error)
+ Api禁用(一般是管理组类型与Api不匹配,例如普通管理组调用会话服务的Api)
- 61451
- 参数错误(invalid parameter)
+ 48003
+ suitetoken无效
- 61452
- 无效客服账号(invalid kf_account)
+ 48004
+ api接口被封禁,请登录mp.weixin.qq.com查看详情
- 61453
- 账号已存在(kf_account exsited)
+ 48005
+ api禁止删除被自动回复和自定义菜单引用的素材
- 61454
- 账号名长度超过限制(前缀10个英文字符)(invalid kf_acount length)
+ 48006
+ api禁止清零调用次数,因为清零次数达到上限
- 61455
- 账号名包含非法字符(英文+数字)(illegal character in kf_account)
-
-
- 61456
- 账号个数超过限制(10个客服账号)(kf_account count exceeded)
-
-
- 61457
- 无效头像文件类型(invalid file type)
-
-
- 61458
- 客户正在被其他客服接待(customer accepted by xxx@xxxx)
-
-
- 61459
- 客服不在线(kf offline)
-
-
- 61500
- 日期格式错误
-
-
- 61501
- 日期范围错误
+ 49003
+ 传入的openid不属于此AppID
50001
- api/redirect_uri unauthorized
- 接口未授权
+ 用户未授权该api
-
50002
- 员工不在权限范围
+ 用户受限,可能是违规后接口被封禁
50003
@@ -775,7 +785,7 @@
50004
- 员工状态不正确(未关注状态)
+ 成员状态不正确,需要成员为企业验证中状态
50005
@@ -823,7 +833,7 @@
60011
- 管理员权限不足(user/department/agent)无权限
+ 管理组权限不足,(user/department/agent)无权限
60012
@@ -907,7 +917,7 @@
60110
- 部门个数超出限制
+ 用户同时归属部门超过20个
60111
@@ -935,7 +945,7 @@
60118
- 成员无有效邀请字段(微信,邮箱,手机号)
+ 成员无有效邀请字段,详情参考(邀请成员关注)的接口说明
60119
@@ -977,9 +987,449 @@
60128
字段不合法,可能存在主键冲突或者格式错误
+
+ 60129
+ 用户设置了拒绝邀请
+
+
+ 61017
+ 子商户未发起授权,不能进行授权确认
+
+
+ 61018
+ 已经confirm确认,无需重复确认
+
+
+ 61019
+ 非强授权,不能用confirm确认
+
+
+ 61020
+ 提交的参数错误,即不包含在接口字段范围内
+
+
+ 61021
+ 尚未进行资料提交,不可confirm
+
+
+ 61022
+ 审核中和审核通过的商户资料均不能重提。仅审核驳回可重提
+
+
+ 61300
+ 不合法的基本信息(base_info)
+
+
+ 61301
+ 不合法的详情信息(detail_info)
+
+
+ 61302
+ 不合法的商品推广区信息(action_info)
+
+
+ 61303
+ 商品信息不存在
+
+
+ 61304
+ 推广服务区(action_info)中的product不合法
+
+
+ 61305
+ 不合法的keystand或keystr。ean13标准下,编码内容必须满足商户号段。
+
+
+ 61306
+ 推广服务区(action_info)中的appid不合法
+
+
+ 61307
+ 推广服务区(action_info)中的cardid不合法
+
+
+ 61308
+ 基本信息(base_info)不存在
+
+
+ 61309
+ 详情信息(detail_info)不存在
+
+
+ 61310
+ 推广服务区(action_info)不存在
+
+
+ 61311
+ 推广服务区(action_info)中的media不合法
+
+
+ 61312
+ 图片大小超出限制
+
+
+ 61313
+ 图片内容不合法或没经过Base64编码
+
+
+ 61314
+ 不合法的ExtInfo
+
+
+ 61316
+ 条码冲突,创建了其他正在使用的条码
+
+
+ 61317
+ 无效的ticket
+
+
+ 61319
+ 商户类目ID无效
+
+
+ 61320
+ 商户全局信息不存在
+
+
+ 61322
+ 商户无此商品类目权限
+
+
+ 61323
+ 商户无此条码权限
+
+
+ 61324
+ 推广服务区服务栏数量超过限制
+
+
+ 61334
+ 商品信息不存在
+
+
+ 61337
+ 商品信息已存在
+
+
+ 61341
+ 白名单人数超过限制
+
+
+ 61342
+ Keystandard与创建时填写的不匹配
+
+
+ 61343
+ Keystandard不合法
+
+
+ 61345
+ 推广服务区(action_info)中的code不合法
+
+
+ 61346
+ 推广服务区(action_info)中的store不合法
+
+
+ 61347
+ 推广服务区(action_info)中的media不合法
+
+
+ 61348
+ 推广服务区(action_info)中的text不合法
+
+
+ 61450
+ 系统错误(system error)
+
+
+ 61451
+ 参数错误(invalid parameter)
+
+
+ 61452
+ 无效客服账号(invalid kf_account)
+
+
+ 61453
+ 账号已存在(kf_account exsited)
+
+
+ 61454
+ 账号名长度超过限制(前缀10个英文字符)(invalid kf_acount length)
+
+
+ 61455
+ 账号名包含非法字符(英文+数字)(illegal character in kf_account)
+
+
+ 61456
+ 账号个数超过限制(100个客服账号)(kf_account count exceeded)
+
+
+ 61457
+ 无效头像文件类型(invalid file type)
+
+
+ 61458
+ 客户正在被其他客服接待(customer accepted by xxx@xxxx)
+
+
+ 61459
+ 客服不在线(kf offline)
+
+
+ 61500
+ 日期格式错误
+
+
+ 63154
+ 不合法的商品状态
+
+
+ 63155
+ 不合法的主页颜色
+
+
+ 63156
+ 不合法的品牌标签
+
+
+ 63157
+ 不合法的推荐商品设置,被推荐的商品也必须来自该账号,并处于发布状态。
+
+
+ 63158
+ 商品总数超过限制,上限10万条。
+
+
+ 63159
+ 商品建议零售价为空。未设置购买渠道(包括微信小店、电商链接)时,建议零售价必填。
+
+
+ 63160
+ 价格信息不合法。retail_price和sale_price参数内容应为数字。
+
+
+ 63161
+ 组件区组件数量超过限制,相同组件仅能设置一个。
+
+
+ 63162
+ 防伪组件中native_show设置不合法
+
+
+ 63163
+ 防伪组件中anti_fake_url不存在
+
+
+ 63164
+ 组件区组件类型设置不合法
+
+
+ 63166
+ 商品审核中,不可进行更新、取消发布和删除商品等操作
+
+
+ 63167
+ 商品未发布,��可进行取消发布操作
+
+
+ 63168
+ 商品审核未通过,不可进行取消发布操作
+
+
+ 63169
+ 商品处于发布状态,不可再次发布
+
+
+ 65104
+ invalid category
+
+
+ 65105
+ invalid photo url
+
+
+ 65106
+ poi audit state must be approved
+
+
+ 65107
+ not allow modify
+
+
+ 65109
+ invalid business
+
+
+ 65110
+ invalid address
+
+
+ 65111
+ invalid telephone
+
+
+ 65112
+ invalid city
+
+
+ 65113
+ invalid province
+
+
+ 65114
+ empty photo list
+
+
+ 65115
+ invalid poi id
+
+
+ 65301
+ 不存在此menuid对应的个性化菜单
+
+
+ 65302
+ 没有相应的用户
+
+
+ 65303
+ 没有默认菜单,不能创建个性化菜单
+
+
+ 65304
+ MatchRule信息为空
+
+
+ 65305
+ 个性化菜单数量受限
+
+
+ 65306
+ 不支持个性化菜单的帐号
+
+
+ 65307
+ 个性化菜单信息为空
+
+
+ 65308
+ 包含没有响应类型的button
+
+
+ 65309
+ 个性化菜单开关处于关闭状态
+
+
+ 65310
+ 填写了省份或城市信息,国家信息不能为空
+
+
+ 65311
+ 填写了城市信息,省份信息不能为空
+
+
+ 65312
+ 不合法的国家信息
+
+
+ 65313
+ 不合法的省份信息
+
+
+ 65314
+ 不合法的城市信息
+
+
+ 65316
+ 该公众号的菜单设置了过多的域名外跳(最多跳转到3个域名的链接)
+
+
+ 65317
+ 不合法的URL
+
+
+ 65400
+ API不可用,即没有开通或升级到新版客服功能
+
+
+ 65401
+ 无效客服帐号
+
+
+ 65402
+ 客服帐号尚未绑定微信号,不能投入使用
+
+
+ 65403
+ 客服昵称不合法
+
+
+ 65404
+ 客服帐号不合法
+
+
+ 65405
+ 帐号数目已达到上限,不能继续添加
+
+
+ 65406
+ 已经存在的客服帐号
+
+
+ 65407
+ 邀请对象已经是该公众号客服
+
+
+ 65408
+ 本公众号已经有一个邀请给该微信
+
+
+ 65409
+ 无效的微信号
+
+
+ 65410
+ 邀请对象绑定公众号客服数达到上限(目前每个微信号可以绑定5个公众号客服帐号)
+
+
+ 65411
+ 该帐号已经有一个等待确认的邀请,不能重复邀请
+
+
+ 65412
+ 该帐号已经绑定微信号,不能进行邀请
+
+
+ 65413
+ 不存在对应用户的会话信息
+
+
+ 65414
+ 粉丝正在被其他客服接待
+
+
+ 65415
+ 指定的客服不在线
+
+
+ 65416
+ 查询参数不合法
+
+
+ 65417
+ 查询时间段超出限制
+
80001
- 可信域名没有IPC备案,后续将不能在该域名下正常使用jssdk
+ 可信域名不匹配,或者可信域名没有IPC备案(后续将不能在该域名下正常使用jssdk)
+
+
+ 81003
+ 邀请额度已用完
82001
@@ -1001,7 +1451,6 @@
85002
包含不合法的词语
-
86001
不合法的会话ID
@@ -1178,159 +1627,29 @@
86319
不合法的客服,kf不在客服列表中
+
+ 86320
+ 不合法的客服类型
+
90001
- 未开通摇一摇周边
+ 未认证摇一摇周边
90002
- 缺少ticket参数
+ 缺少摇一摇周边ticket参数
90003
- ticket参数不合法
+ 摇一摇周边ticket参数不合法
90004
- ticket过期
-
-
-
- 7000000
- 请求正常,无语义结果
+ 摇一摇周边ticket过期
- 7000001
- 缺失请求参数
-
-
- 7000002
- signature 参数无效
-
-
- 7000003
- 地理位置相关配置 1 无效
-
-
- 7000004
- 地理位置相关配置 2 无效
-
-
- 7000005
- 请求地理位置信息失败
-
-
- 7000006
- 地理位置结果解析失败
-
-
- 7000007
- 内部初始化失败
-
-
- 7000008
- 非法 appid(获取密钥失败)
-
-
- 7000009
- 请求语义服务失败
-
-
- 7000010
- 非法 post 请求
-
-
- 7000011
- post 请求 json 字段无效
-
-
- 7000030
- 查询 query 太短
-
-
- 7000031
- 查询 query 太长
-
-
- 7000032
- 城市、经纬度信息缺失
-
-
- 7000033
- query 请求语义处理失败
-
-
- 7000034
- 获取天气信息失败
-
-
- 7000035
- 获取股票信息失败
-
-
- 7000036
- utf8 编码转换失败
-
-
-
- SYSTEMERROR
- SYSTEMERROR
- 接口后台错误
-
-
- INVALID_TRANSACTIONID
- INVALID_TRANSACTIONID
- 无效 transaction_id
-
-
- PARAM_ERROR
- PARAM_ERROR
- 提交参数错误
-
-
- ORDERPAID
- ORDERPAID
- 订单已支付
-
-
- OUT_TRADE_NO_USED
- OUT_TRADE_NO_USED
- 商户订单号重复
-
-
- NOAUTH
- NOAUTH
- 商户无权限
-
-
- NOTENOUGH
- NOTENOUGH
- 余额不足
-
-
- NOTSUPORTCARD
- NOTSUPORTCARD
- 不支持卡类型
-
-
- ORDERCLOSED
- ORDERCLOSED
- 订单已关闭
-
-
- BANKERROR
- BANKERROR
- 银行系统异常
-
-
- REFUND_FEE_INVALID
- REFUND_FEE_INVALID
- 退款金额大于支付金额
-
-
- ORDERNOTEXIST
- ORDERNOTEXIST
- 订单不存在
+ 90005
+ 未开启摇一摇周边服务
9001001
@@ -1440,4 +1759,773 @@
9001036
查询起始值begin不合法
+
+ 9001037
+ 单个设备绑定页面不能超过30个
+
+
+ 9001038
+ 设备总数超过了限额
+
+
+ 9001039
+ 不合法的联系人名字
+
+
+ 9001040
+ 不合法的联系人电话
+
+
+ 9001041
+ 不合法的联系人邮箱
+
+
+ 9001042
+ 不合法的行业id
+
+
+ 9001043
+ 不合法的资质证明文件url,文件需通过“素材管理”接口上传
+
+
+ 9001044
+ 缺少资质证明文件
+
+
+ 9001045
+ 申请理由不能超过500字
+
+
+ 9001046
+ 公众账号未认证
+
+
+ 9001047
+ 不合法的设备申请批次id
+
+
+ 9001048
+ 审核状态为审核中或审核已通过,不能再提交申请请求
+
+
+ 9001049
+ 获取分组元数据失败
+
+
+ 9001050
+ 账号下分组数达到上限,最多为100个
+
+
+ 9001051
+ 分组包含的设备数达到上限,最多为10000个
+
+
+ 9001052
+ 每次添加到分组的设备数达到上限,每次最多操作1000个设备
+
+
+ 9001053
+ 每次从分组删除的设备数达到上限,每次最多操作1000个设备
+
+
+ 9001054
+ 待删除的分组仍存在设备
+
+
+ 9001055
+ 分组名称过长,上限为100个字符
+
+
+ 9001056
+ 分组待添加或删除的设备列表中包含有不属于该分组的设备id
+
+
+ 9001057
+ 分组相关信息操作失败
+
+
+ 9001058
+ 分组id不存在
+
+
+ 9001059
+ 模板页面logo_url为空
+
+
+ 9001060
+ 创建红包活动失败
+
+
+ 9001061
+ 获得红包活动ID失败
+
+
+ 9001062
+ 创建模板页面失败
+
+
+ 9001063
+ 红包提供商户公众号ID和红包发放商户公众号ID不一致
+
+
+ 9001064
+ 红包权限审核失败
+
+
+ 9001065
+ 红包权限正在审核
+
+
+ 9001066
+ 红包权限被取消
+
+
+ 9001067
+ 没有红包权限
+
+
+ 9001068
+ 红包活动时间不在红包权限有效时间内
+
+
+ 9001069
+ 设置红包活动开关失败
+
+
+ 9001070
+ 获得红包活动信息失败
+
+
+ 9001071
+ 查询红包ticket失败
+
+
+ 9001072
+ 红包ticket数量超过限制
+
+
+ 9001073
+ sponsor_appid与预下单时的wxappid不一致
+
+
+ 9001074
+ 获得红包发送ID失败
+
+
+ 9001075
+ 录入活动的红包总数超过创建活动时预设的total
+
+
+ 9001076
+ 添加红包发送ID失败
+
+
+ 9001077
+ 解码红包发送ID失败
+
+
+ 9001078
+ 获取公众号uin失败
+
+
+ 9001079
+ 接口调用appid与调用创建活动接口的appid不一致
+
+
+ 9001090
+ 录入的所有ticket都是无效ticket,可能原因为ticket重复使用,过期或金额不在1-1000元之间
+
+
+ 9001091
+ 活动已过期
+
+
+ 9002001
+ 不合法的请求方式
+
+
+ 9002002
+ 系统异常
+
+
+ 9002003
+ 网络异常,后台服务超时,请稍后再试
+
+
+ 9002004
+ 后台服务调用异常
+
+
+ 9002005
+ 签权失败
+
+
+ 9002006
+ 未开通微信连Wi-Fi连插件
+
+
+ 9002007
+ 缺少参数
+
+
+ 9002008
+ 不合法的参数
+
+
+ 9002009
+ 门店ID不存在
+
+
+ 9002010
+ ssid和密码均未以大写字母“WX”开头,两者中至少有一个以“WX”开头才可添加设备成功
+
+
+ 9002011
+ ssid不能包含中文字符
+
+
+ 9002012
+ password不能包含中文字符
+
+
+ 9002013
+ password必需大于8个字符
+
+
+ 9002014
+ 门店下设备的密码不一样
+
+
+ 9002015
+ 门店下设备不属于同一SSID
+
+
+ 9002016
+ 设备已添加过
+
+
+ 9002017
+ 设备不存在,无法删除
+
+
+ 9002018
+ 门店下有专业设备,不能设置顶部常驻入口
+
+
+ 9002019
+ 门店下没有设备
+
+
+ 9002020
+ 未认证的账号不能设置商家主页
+
+
+ 9002022
+ 门店下已添加非密码型设备,无法再添加密码型设备
+
+
+ 9002023
+ 未认证公众账号不能获取
+
+
+ 9002024
+ 该账号下没有密码型设备
+
+
+ 9002025
+ 该账号下的所有设备,只有全为密码型设备才能获取
+
+
+ 9002026
+ 查询列表超过最大限制
+
+
+ 9002027
+ 门店下是非密码型设备,不能下载二维码
+
+
+ 9002028
+ 门店下已添加非portal改造型设备
+
+
+ 9002029
+ 非第三方授权不能获取
+
+
+ 9002030
+ 未开通注册portal型设备
+
+
+ 9002031
+ 保留现有连网方式的门店,不支持扫二维码方式连网,无法下载二维码
+
+
+ 9002032
+ 必需全部设备均为使用微信方式连网才可以获取
+
+
+ 9002033
+ 该账号下无设备,至少有一台设备才能获取
+
+
+ 9002034
+ 该账号下有专业设备,无法获取
+
+
+ 9002035
+ 保留现有连网方式的门店,无法清除门店网络及设备
+
+
+ 9002037
+ portal型设备只能修改ssid
+
+
+ 9002038
+ ssid必须以大写字母“WX”开头
+
+
+ 9002039
+ 门店下无网络信息,无法进行修改
+
+
+ 9002040
+ 专业型设备的门店,不支持修改网络信息
+
+
+ 9002041
+ 未认证的账号不能设置
+
+
+ 9002042
+ 保留现有连网方式的门店,不支持设置连网完成页
+
+
+ 9007001
+ 门店下的ssid重复
+
+
+ 9007003
+ 与门店下的设备类型不一致
+
+
+ 9007004
+ 找不到门店ssid信息
+
+
+ 9007005
+ 门店下不同的ssid门店信息数量已超过最大限制
+
+
+ 9007006
+ 无协议设备的门店,不支持下载二维码
+
+
+ 9007007
+ 专业型设备的门店,不支持下载二维码
+
+
+ 9008001
+ 找不到卡券
+
+
+ 9008002
+ 投放时间超过卡券有效期
+
+
+ -1
+ 系统错误。
+
+
+ -1000
+ 系统错误
+
+
+
+ 132011004
+ 参数错误,报关时仅传入订单号,不传入子订单号(sub_order_no)时,不能填费用信息,须以支付系统中的值为准,请检查参数是否都正确
+
+
+
+ 132021028
+ 交易币种与商户结算币种不一致】,报关时传入子订单号(sub_order_no)时,币种参数(fee_type)必填,请检查所传币种参数(fee_type)是否为空
+
+
+
+ AL_STOCK_OVER
+ 活动已结束,活动已结束,属于正常逻辑错误
+
+
+ AMOUNT_LIMIT
+ 付款金额不能小于最低限额,付款金额不能小于最低限额,每次付款金额必须大于1元
+
+
+ APPID_MCHID_NOT_MATCH
+ appid和mch_id不匹配,appid和mch_id不匹配,请确认appid和mch_id是否匹配
+
+
+ APPID_NOT_EXIST
+ AppId未设置(sub_order_no),appid为必传字段,请检查appid是否正确
+
+
+ AUTHCODEEXPIRE
+ 二维码已过期,请用户在微信上刷新后再试,支付确认失败,用户的条码已经过期,请收银员提示用户,请用户在微信上刷新条码,然后请收银员重新扫码。
+ 直接将错误展示给收银员
+
+
+
+ AUTHORITY_NOT_FOUND
+ 未开通自助清关功能,须先开通自助清关功能才可成功调用接口,请检查是否已开通自助清关功能,开通路径:微信支付商户平台-产品中心-自助清关中申请开通。
+
+
+
+ AUTH_CODE_ERROR
+ 授权码参数错误,支付确认失败,请求参数未按指引进行填写,每个二维码仅限使用一次,请刷新再试
+
+
+ AUTH_CODE_INVALID
+ 授权码检验错误,支付确认失败,收银员扫描的不是微信支付的条码,请扫描微信支付被扫条码/二维码
+
+
+ BANKERROR
+ 银行系统异常,支付结果未知,银行端超时,请立即调用被扫订单结果查询API,查询当前订单的不同状态,决定下一步的操作。
+
+
+
+ BUYER_MISMATCH
+ 支付帐号错误,支付确认失败,暂不支持同一笔订单更换支付方,请确认支付方是否相同
+
+
+ CA_ERROR
+ 请求未携带证书,或请求携带的证书出错,到商户平台下载证书,请求带上证书后重试。
+
+
+ CA_VERIFY_FAILED
+ 证书验证失败,检查证书是否正确
+
+
+ CHCUSTOMSNO_NOT_SET
+ 海关备案号未设置,海关备案号为必传字段,请检查备案号是否为空
+
+
+ CODE_2_ID_ERR
+ 商户id有误,确认商户id是否正确并合法
+
+
+ COUPON_NOT_FOUND
+ 券没有查找成功,确认券id、用户openid的正确性
+
+
+ COUPON_STOCK_ID_EMPTY
+ 批次id为空,确认批次id正确传入
+
+
+ COUPON_STOCK_ID_NOT_VALID
+ 批次id不正确,确认批次id正确性以及和商户id的所属关系是否正确
+
+
+ COUPON_STOCK_NOT_FOUND
+ 批次信息不存在,确认批次id信息正确
+
+
+ CUSTOMSCONFIG_NOT_SET
+ 海关配置未设置,报关接口需要商户已配置过海关信息才可以访问,请参照上文中的海关备案指引,进行海关信息报备
+
+
+ CUSTOMS_NOT_SET
+ 海关信息未设置,海关信息为必传字段,请检查海关信息是否为空
+
+
+ DAY_ OVER_LIMITED
+ 企业红包的按天日发放受限,单个商户日发送红包数量不大于10000个;(可联系微信支付wxhongbao@tencent.com调高额度)
+
+
+
+ ERR_VERIFY_SSL_SERIAL
+ 获取客户端证书序列号失败!,检查证书是否正确
+
+
+ ERR_VERIFY_SSL_SN
+ 获取客户端证书特征名称(DN)域失败!,检查证书是否正确
+
+
+ FATAL_ERROR
+ 两次请求参数不一致,两次请求商户单号一样,但是参数不一致,如果想重试前一次的请求,请用原参数重试,如果重新发送,请更换单号。
+
+
+
+ FEETYPE_NOT_SET
+ 币种类型未设置,拆单情况下,币种为必填参数,请检查fee_type是否为空
+
+
+ FREQ_LIMIT
+ 受频率限制,请对请求做频率控制
+
+
+ FREQ_OVER_LIMIT
+ 超过发放频率限制,请稍后再试,请求对发放请求做频率控制
+
+
+ GET_COUPON_STOCK_FAIL
+ 获取批次信息失败,确认批次id信息正确
+
+
+ ILLEGAL_APPID
+ 错误传入了app的appid,接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。
+
+
+
+ INVALID_MCHCUSTOMSNO
+ 无效的海关备案号长度,海关备案号一般为6位字符串,请检查海关备案号是否正确
+
+
+ INVALID_SUBORDER_NO
+ 无效的子订单号长度(sub_order_no),子订单号要求是32位以内的字符串,请检查子订单号长度是否正确
+
+
+ INVALID_TRANSACTIONID
+ 无效transaction_id,请求参数未按指引进行填写,参数错误,请重新检查
+
+
+ INVALID_TRANSACTION_ID
+ 无效的微信订单号长度,微信订单号为28位数字,请确保长度一致,请检查微信订单号(transaction_id)是否正确
+
+
+
+ LACK_PARAMS
+ 缺少参数,缺少必要的请求参数,请检查参数是否齐全
+
+
+ MCHID_INVALID_LENGTH
+ 无效的商户号长度,报关接口只支持12开头10位数字的商户号,请检查商户号长度是否为10位
+
+
+ MCHID_NOT_EXIST
+ ��户号(mch_id)未设置,MCH_ID为必传字段,请检查mch_id是否正确
+
+
+ MCHID_NOT_SET
+ 商户号未设置,商户号为必传参数,请求时必传,请检查商户号是否为空
+
+
+ MCH_ID_EMPTY
+ 商户id为空,确认商户id正确传入
+
+
+ MONEY_LIMIT
+ 红包金额发放限制,每个红包金额必须大于1元,小于1000元(可联系微信支付wxhongbao@tencent.com调高额度至4999元)
+
+
+
+ NAME_MISMATCH
+ 姓名校验出错,请求参数里填写了需要检验姓名,但是输入了错误的姓名,填写正确的用户姓名
+
+
+ NETWORK ERROR
+ 网络环境不佳,请重试,请重试
+
+
+ NETWORKERROR
+ 网络环境不佳,请重试,请重试
+
+
+ NOAUTH
+ 没有权限,没有授权请求此api,请联系微信支付开通api权限
+
+
+ NOTENOUGH
+ 余额不足,帐号余额不足,请用户充值或更换支付卡后再支付
+
+
+ NOTSUPORTCARD
+ 不支持卡类型,支付确认失败,用户使用卡种不支持当前支付形式,请用户重新选择卡种
+ 建议:商户系统返回给收银台的提示为“该卡不支持当前支付,提示用户换卡支付或绑新卡支付”
+
+
+
+ NOT_FOUND
+ 指定单号数据不存在,查询单号对应的数据不存在,请使用正确的商户订单号查询
+
+
+ NOT_UTF8
+ 编码格式错误,未使用指定编码格式,请使用NOT_UTF8编码格式
+
+
+ NO_AUTH
+ 无权限,未获得此接口的调用权限,请检查当前商户号是否已获得此接口的调用权限
+
+
+ OPENID_ERROR
+ Openid错误,Openid格式错误或者不属于商家公众账号,请核对商户自身公众号appid和用户在此公众号下的openid。
+
+
+
+ OPEN_ID_EMPTY
+ 用户openid为空,检查用户openid是否正确并合法
+
+
+ ORDERCLOSED
+ 订单已关闭,订单已关闭,无法重复关闭,订单已关闭,无需继续调用
+
+
+ ORDERNOTEXIST
+ 订单不存在,订单系统不存在此订单,不需要关单,当作未提交的支付的订单
+
+
+ ORDERPAID
+ 订单已支付,订单已支付,不能发起关单,订单已支付,不能发起关单,请当作已支付的正常交易
+
+
+ ORDERREVERSED
+ 订单已撤销,支付确认失败,当前订单已经被撤销,当前订单状态为“订单已撤销”,请提示用户重新支付
+
+
+ OUTTRADENO_NOT_SET
+ 商户订单号(out_trade_no)未设置,商户订单号为必传参数,请检查商户订单号(out_trade_no)是否为空
+
+
+
+ OUT_TRADE_NO_USED
+ 商户订单号重复,同一笔交易不能多次提交,请核实商户订单号是否重复提交
+
+
+ PARAM_ERROR
+ 参数错误,请查看err_code_des,修改设置错误的参数
+
+
+ PAYFEE_NOT_MATCH
+ 金额不匹配,报关的订单金额必须和支付的金额一致,请检查报关订单的金额是否正确
+
+
+ POST_DATA_EMPTY
+ post数据为空,post数据不能为空,请检查post数据是否为空
+
+
+ REQUIRE_POST_METHOD
+ 请使用post方法,未使用post传递参数 ,请检查请求参数是否通过post方法提交
+
+
+ REQ_PARAM_XML_ERR
+ 输入的参数xml格式有误,检查输入的xml格式是否正确
+
+
+ SECOND_OVER_LIMITED
+ 企业红包的按分钟发放受限,每分钟发送红包数量不得超过1800个;(可联系微信支付wxhongbao@tencent.com调高额度)
+
+
+
+ SENDNUM_LIMIT
+ 该用户今日领取红包个数超过限制,如有需要、请在微信支付商户平台【api安全】中重新配置
+ 【每日同一用户领取本商户红包不允许超过的个数】。
+
+
+
+ SEND_FAILED
+ 红包发放失败,请更换单号再重试,原商户单号已经失败,如果还要对同一个用户发放红包, 需要更换新的商户单号再试。
+
+
+ SIGNERROR
+ 签名错误,参数签名结果不正确,请检查签名参数和方法是否都符合签名算法要求
+
+
+ SIGN_ERROR
+ 商户签名错误,按文档要求重新生成签名后再重试。
+
+
+ STOCK_IS_NOT_VALID
+ 抱歉,该代金券已失效,
+
+
+ SYSTEMERROR
+ 系统繁忙,请再试。,系统繁忙。
+
+
+ TRANSACTION_ID_NOT_SET
+ 微信订单号(transaction_id)未设置,微信订单号(transaction_id)为必传参数,请检查微信订单号(transaction_id)是否为空
+
+
+
+ USERPAYING
+ 用户支付中,需要输入密码,支付结果未知,该笔交易因为业务规则要求,需要用户输入支付密码。,等待5秒,然后调用被扫订单结果查询API,查询当前订单的不同状态,决定下一步的操作。
+
+
+
+ USER_ACCOUNT_ABNORMAL
+ 退款请求失败,用户帐号异常或注销,此状态代表退款申请失败,商户可自行处理退款。
+
+
+ USER_AL_GET_COUPON
+ 你已领取过该代金券,用户已领过,正常逻辑报错
+
+
+ XML_ERROR
+ 请求的xml格式错误,或者post的数据为空,检查请求串,确认无误后重试
+
+
+ XML_FORMAT_ERROR
+ XML格式错误,XML格式错误,请检查XML参数格式是否正确
+
+
+ appid字段必填,最长为32个字符
+ 请求的appid字段填写错误,填写正确的appid后重试
+
+
+ client_ip必须是合法的IP字符串
+ 请求的client_ip填写不正确,填写正确的IP后重试
+
+
+ nick_name字段必填,并且少于16字符
+ 请求的nick_name字段错误,按文档填写正确的nick_name后重试
+
+
+ nonce_str字段必填,并且少于32字符
+ 请求的nonce_str字段填写不正确,按文档要求填写正确的nonce_str值后重试
+
+
+ re_openid字段为必填并且少于32个字符
+ 请求的re_openid字段非法,填写对re_openid后重试
+
+
+ remark字段为必填,并且少于256字符
+ 请求的remark字段填写错误,填写正确的remark后重试
+
+
+ send_name字段为必填并且少于32字符
+ 请求的send_name字段填写不正确,按文档填写正确的send_name字段后重试
+
+
+ total_num必须为1
+ total_num字段值不为1,修改total_num值为1后重试
+
+
+ wishing字段为必填,并且少于128个字符
+ 缺少wishing字段,填写wishing字段再重试
+
+
+ 发放金额、最小金额、最大金额必须相等
+ 请求的金额相关字段填写错误,按文档要求填写正确的金额后重试
+
+
+ 商户号和wxappid不匹配
+ 商户号和wxappid不匹配,请修改Mchid或wxappid参数
+
+
+ 找不到对应的商户号
+ 请求的mchid字段填写错误,填写正确的mchid字段后重试
+
+
+ 红包金额参数错误
+ 红包金额过大,修改金额重试
+
+
+ 订单号字段必填,最长为28个字符
+ 请求的mch_billno字段填写错误,填写正确的billno后重试
+
+
+ 输入的商户号有误
+ 请求的mchid字段非法(或者没填),填写对应的商户���再重试
+
+
+ 金额和原始单参数不一致
+ 更换了金额,但商户单号未更新,请商户检查代码实现逻辑,请检查金额、商户订单号是否正确
+
\ No newline at end of file
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKConfigurator.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKConfigurator.java
index 205b905a..285821fc 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKConfigurator.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKConfigurator.java
@@ -97,9 +97,11 @@ public class JSSDKConfigurator {
*
* @param url
* 当前网页的URL,不包含#及其后面部分
- * @return
+ * @return jssdk配置JSON字符串
* @see 通过config接口注入权限验证配置
+ * href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN">公众号JSSDK
+ * @see 企业号JSSDK
* @throws WeixinException
*/
public String toJSONConfig(String url) throws WeixinException {
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/AbstractTokenCreator.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/AbstractTokenCreator.java
index c9c77771..9aa39bb2 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/AbstractTokenCreator.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/AbstractTokenCreator.java
@@ -19,7 +19,7 @@ public abstract class AbstractTokenCreator implements TokenCreator {
}
/**
- * 缓存key:附加weixin4j前缀
+ * 缓存key:附加weixin4j_前缀
*
* @return
*/
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenStorager.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenStorager.java
index 99c049e7..61de6eac 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenStorager.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenStorager.java
@@ -16,9 +16,9 @@ import com.foxinmy.weixin4j.model.Token;
*/
public interface TokenStorager extends CacheStorager {
/**
- * 考虑到程序的临界值,实际有效时间应该减去下面这个数
+ * 考虑到临界情况,在实际有效时间上减去60秒
*/
- final long CUTMS = 1 * 60 * 1000l;
+ final long CUTMS = 60 * 1000l;
/**
* 缓存key的前缀
*/
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/WeixinErrorUtil.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/WeixinErrorUtil.java
index f27390cf..e2471a75 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/WeixinErrorUtil.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/WeixinErrorUtil.java
@@ -74,11 +74,14 @@ public final class WeixinErrorUtil {
}
public String getText() {
- return StringUtil.isBlank(text) ? "未知错误" : text;
+ return StringUtil.isBlank(text) ? "" : text;
}
}
public static String getText(String code) throws RuntimeException {
+ if (StringUtil.isBlank(code)) {
+ return "";
+ }
String text = errorCacheMap.get(code);
if (StringUtil.isBlank(text)) {
ErrorTextHandler textHandler = new ErrorTextHandler(code);
diff --git a/weixin4j-example/pom.xml b/weixin4j-example/pom.xml
index 9024a17f..975f1e45 100644
--- a/weixin4j-example/pom.xml
+++ b/weixin4j-example/pom.xml
@@ -36,16 +36,19 @@
+
com.foxinmy
weixin4j-mp
1.6.8
+
com.foxinmy
weixin4j-qy
1.6.8
+
com.foxinmy
weixin4j-server
@@ -63,5 +66,12 @@
spring-context
4.2.1.RELEASE
+
+
+ org.jsoup
+ jsoup
+ 1.9.1
+ test
+
\ No newline at end of file
diff --git a/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/ErrorBuilder.java b/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/ErrorBuilder.java
new file mode 100644
index 00000000..9b095225
--- /dev/null
+++ b/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/ErrorBuilder.java
@@ -0,0 +1,36 @@
+package com.foxinmy.weixin4j.test;
+
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.Map.Entry;
+
+public class ErrorBuilder {
+
+ public static void main(String[] args) throws Exception {
+ Map error = new TreeMap();
+ error.putAll(QyErrorBuilder.build());
+ error.putAll(MpErrorBuilder.build());
+ StringBuilder xml = new StringBuilder();
+ xml.append("");
+ xml.append("");
+ xml.append("");
+ xml.append("");
+ for (Entry entry : error.entrySet()) {
+ xml.append("");
+ xml.append("").append(entry.getKey()).append("");
+ xml.append("").append(entry.getValue()).append("");
+ xml.append("");
+ }
+ xml.append("");
+ error = PayErrorBuilder.builder();
+ for (Entry entry : error.entrySet()) {
+ xml.append("");
+ xml.append("").append(entry.getKey()).append("");
+ xml.append("").append(entry.getValue()).append("");
+ xml.append("");
+ }
+ xml.append("");
+ System.err.println("\n");
+ System.err.println(xml.toString());
+ }
+}
diff --git a/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/MpErrorBuilder.java b/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/MpErrorBuilder.java
new file mode 100644
index 00000000..a5b6eec6
--- /dev/null
+++ b/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/MpErrorBuilder.java
@@ -0,0 +1,110 @@
+package com.foxinmy.weixin4j.test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import sun.org.mozilla.javascript.internal.NativeArray;
+import sun.org.mozilla.javascript.internal.NativeObject;
+
+/**
+ * 收集微信公众平台错误码
+ *
+ * @className MpErrorBuilder
+ * @author jy
+ * @date 2016年5月5日
+ * @since JDK 1.7
+ * @see
+ */
+public class MpErrorBuilder {
+
+ private static final String HOME = "https://mp.weixin.qq.com/wiki";
+
+ private static final String RESOURCE = "https://mp.weixin.qq.com/wiki?action=doc&id=%s";
+
+ private static List collectUrl() throws Exception {
+ Document root = Jsoup.connect(HOME).get();
+ List resources = null;
+ Elements eles = root.getElementById("resMenu").getElementsByTag("a");
+ if (eles.isEmpty()) {
+ Element ele = root.getElementsByTag("script").last();
+ StringBuilder script = new StringBuilder();
+ script.append("window = {};");
+ script.append("seajs = {};");
+ script.append("seajs.use = function(arg1,arg2){return window.cgiData.list};");
+ script.append("wx_main = {};");
+ script.append(ele.html());
+ ScriptEngine engine = new ScriptEngineManager()
+ .getEngineByName("javascript");
+ NativeArray na = (NativeArray) ((NativeObject) engine.eval(script
+ .toString())).get("list");
+ resources = new ArrayList();
+ for (int i = 0; i < na.getLength(); i++) {
+ recurrenceMenu(resources, (NativeObject) na.get(i));
+ }
+ } else {
+ resources = new ArrayList(eles.size());
+ for (Element ele : eles) {
+ resources.add(String.format(RESOURCE,
+ ele.getElementsByAttribute("data-id")));
+ }
+ }
+ return resources;
+ }
+
+ private static void recurrenceMenu(List resources,
+ NativeObject rootObject) {
+ NativeArray children = (NativeArray) rootObject.get("children");
+ if (children.getLength() == 0l) {
+ resources.add(String.format(RESOURCE, rootObject.get("id")
+ .toString()));
+ return;
+ }
+ for (int i = 0; i < children.getLength(); i++) {
+ recurrenceMenu(resources, (NativeObject) children.get(i));
+ }
+ }
+
+ private static Map analyCode(String resource)
+ throws Exception {
+ Document root = Jsoup.connect(resource).get();
+ Elements tables = root.getElementsByTag("table");
+ Map error = new HashMap();
+ for (Element table : tables) {
+ Elements trs = table.getElementsByTag("tr");
+ String text = trs.first().child(0).text().trim();
+ if (text.equals("返回码") || text.equals("错误码")) {
+ for (int i = 1; i < trs.size(); i++) {
+ error.put(trs.get(i).child(0).text().trim(), trs.get(i)
+ .child(1).text().trim());
+ }
+ }
+ }
+ return error;
+ }
+
+ public static Map build() throws Exception {
+ System.err.println("0.开始收集URI资源...");
+ List resources = collectUrl();
+ System.err.println("共收集到URI资源:" + resources.size());
+ System.err.println("1.开始解析URI资源...");
+ Map error = new HashMap();
+ for (int i = 0; i < resources.size(); i++) {
+ System.err
+ .println("开始解析第" + (i + 1) + "个URI资源:" + resources.get(i));
+ Map result = analyCode(resources.get(i));
+ System.err.println(resources.get(i) + ":" + result.size());
+ error.putAll(result);
+ }
+ return error;
+ }
+}
diff --git a/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/PayErrorBuilder.java b/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/PayErrorBuilder.java
new file mode 100644
index 00000000..5739afe0
--- /dev/null
+++ b/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/PayErrorBuilder.java
@@ -0,0 +1,129 @@
+package com.foxinmy.weixin4j.test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+/**
+ * 手机微信商户平台错误码
+ *
+ * @className PayErrorBuilder
+ * @author jy
+ * @date 2016年5月5日
+ * @since JDK 1.7
+ * @see
+ */
+public class PayErrorBuilder {
+
+ private static final String HOME = "https://pay.weixin.qq.com/wiki/doc/api/index.html";
+
+ private static final List EXTRA_RESOURCES;
+ static {
+ EXTRA_RESOURCES = new ArrayList();
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_3#");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_4");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_5");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_7&index=6");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=16_5");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=16_6");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1");
+ EXTRA_RESOURCES
+ .add("https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_2");
+ }
+
+ private static List collectUrl() throws Exception {
+ Document root = Jsoup.connect(HOME).get();
+ List resources = new ArrayList();
+ Elements eles = root.getElementsByClass("guide-main");
+ for (Element ele : eles) {
+ for (Element li : ele.children()) {
+ System.err.println(li.child(0).child(1).text() + "资源列表:");
+ root = Jsoup.connect(li.child(0).absUrl("href")).get();
+ Elements dls = root.getElementsByClass("menu").first()
+ .getElementsByTag("dl");
+ for (Element dl : dls) {
+ if (dl.child(0).text().equalsIgnoreCase("api列表")) {
+ for (int i = 1; i < dl.children().size(); i++) {
+ System.err.println(dl.children().get(i).child(0)
+ .text());
+ resources.add(dl.children().get(i).child(0)
+ .absUrl("href"));
+ }
+ break;
+ }
+ }
+ }
+ }
+ resources.addAll(EXTRA_RESOURCES);
+ return resources;
+ }
+
+ private static Map analyCode(String resource)
+ throws Exception {
+ Document root = Jsoup.connect(resource).get();
+ Elements eles = root.getElementsByClass("data-box");
+ Map error = new HashMap();
+ String text = "";
+ StringBuilder desc = new StringBuilder();
+ for (Element box : eles) {
+ Elements trs = box.getElementsByTag("tr");
+ if (trs.isEmpty()) {
+ continue;
+ }
+ text = box.child(0).text().trim();
+ boolean b1 = text.equals("错误码") || text.equals("返回码");
+ text = trs.first().text().trim();
+ boolean b2 = text.equals("错误码") || text.equals("返回码");
+ if (b1 || b2) {
+ for (int i = 1; i < trs.size(); i++) {
+ desc.append(trs.get(i).child(1).text().trim());
+ for (int j = 2; j < trs.get(i).children().size(); j++) {
+ desc.append(",").append(
+ trs.get(i).child(j).text().trim());
+ }
+ error.put(trs.get(i).child(0).text().trim(),
+ desc.toString());
+ desc.delete(0, desc.length());
+ }
+ }
+ }
+ return error;
+ }
+
+ public static Map builder() throws Exception {
+ System.err.println("0.开始收集URI资源...");
+ List resources = collectUrl();
+ System.err.println("共收集到URI资源:" + resources.size());
+ System.err.println("1.开始解析URI资源...");
+ Map error = new TreeMap();
+ for (int i = 0; i < resources.size(); i++) {
+ System.err
+ .println("开始解析第" + (i + 1) + "个URI资源:" + resources.get(i));
+ Map result = analyCode(resources.get(i));
+ System.err.println(resources.get(i) + ":" + result.size());
+ error.putAll(result);
+ }
+ System.err.println("共收集到状态码:" + error.size());
+ return error;
+ }
+}
diff --git a/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/QyErrorBuilder.java b/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/QyErrorBuilder.java
new file mode 100644
index 00000000..b1149d87
--- /dev/null
+++ b/weixin4j-example/src/test/java/com/foxinmy/weixin4j/test/QyErrorBuilder.java
@@ -0,0 +1,40 @@
+package com.foxinmy.weixin4j.test;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.select.Elements;
+
+/**
+ * 收集微信企业号错误码
+ *
+ * @className QyErrorBuilder
+ * @author jy
+ * @date 2016年5月5日
+ * @since JDK 1.7
+ * @see
+ */
+public class QyErrorBuilder {
+
+ private static final String HOME = "http://qydev.weixin.qq.com/wiki/index.php?title=%E5%85%A8%E5%B1%80%E8%BF%94%E5%9B%9E%E7%A0%81%E8%AF%B4%E6%98%8E";
+
+ private static Map analyCode() throws Exception {
+ Document root = Jsoup.connect(HOME).get();
+ Elements trs = root.getElementsByTag("tr");
+ Map error = new TreeMap();
+ for (int i = 1; i < trs.size(); i++) {
+ error.put(trs.get(i).child(0).text().trim(), trs.get(i).child(1)
+ .text().trim());
+ }
+ return error;
+ }
+
+ public static Map build() throws Exception {
+ System.err.println("开始解析URI资源:" + HOME);
+ Map error = analyCode();
+ System.err.println("共收集到状态码:" + error.size());
+ return error;
+ }
+}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java
index c501870f..b8cca58c 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java
@@ -44,7 +44,6 @@ import com.foxinmy.weixin4j.util.IOUtil;
import com.foxinmy.weixin4j.util.ObjectId;
import com.foxinmy.weixin4j.util.RegexUtil;
import com.foxinmy.weixin4j.util.StringUtil;
-import com.foxinmy.weixin4j.util.WeixinErrorUtil;
/**
* 素材相关API
@@ -265,8 +264,8 @@ public class MediaApi extends MpApi {
String disposition = headers
.getFirst(HttpHeaders.CONTENT_DISPOSITION);
logger.info("weixin response << " + response.getProtocol()
- + response.getStatus().toString() + "[" + contentType + "]->"
- + disposition);
+ + response.getStatus().toString() + "[" + contentType
+ + "]->" + disposition);
if (contentType.contains(ContentType.TEXT_PLAIN.getMimeType())
|| contentType.contains(ContentType.APPLICATION_JSON
.getMimeType())
@@ -275,10 +274,6 @@ public class MediaApi extends MpApi {
content.length, Consts.UTF_8.newDecoder(),
JsonResult.class);
if (jsonResult.getCode() != 0) {
- if (StringUtil.isBlank(jsonResult.getDesc())) {
- jsonResult.setDesc(WeixinErrorUtil.getText(Integer
- .toString(jsonResult.getCode())));
- }
throw new WeixinException(Integer.toString(jsonResult
.getCode()), jsonResult.getDesc());
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/MediaApi.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/MediaApi.java
index 97a177f5..c6b0a390 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/MediaApi.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/MediaApi.java
@@ -47,7 +47,6 @@ import com.foxinmy.weixin4j.util.IOUtil;
import com.foxinmy.weixin4j.util.ObjectId;
import com.foxinmy.weixin4j.util.RegexUtil;
import com.foxinmy.weixin4j.util.StringUtil;
-import com.foxinmy.weixin4j.util.WeixinErrorUtil;
/**
* 媒体相关API
@@ -236,10 +235,6 @@ public class MediaApi extends QyApi {
content.length, Consts.UTF_8.newDecoder(),
JsonResult.class);
if (jsonResult.getCode() != 0) {
- if (StringUtil.isBlank(jsonResult.getDesc())) {
- jsonResult.setDesc(WeixinErrorUtil.getText(Integer
- .toString(jsonResult.getCode())));
- }
throw new WeixinException(Integer.toString(jsonResult
.getCode()), jsonResult.getDesc());
}