diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/error.xml b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/error.xml
index 022c2621..03758181 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/error.xml
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/error.xml
@@ -383,7 +383,6 @@
ORDERPAID
订单已支付
-
OUT_TRADE_NO_USED
OUT_TRADE_NO_USED
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/AbstractTokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/AbstractTokenHolder.java
index d5f682e6..24d9169d 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/AbstractTokenHolder.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/AbstractTokenHolder.java
@@ -26,14 +26,6 @@ public abstract class AbstractTokenHolder implements TokenHolder {
this.weixinConfig = new WeixinConfig(appid, appsecret);
}
- protected String getAppid() {
- return this.weixinConfig.getAppId();
- }
-
- protected String getAppsecret() {
- return this.weixinConfig.getAppSecret();
- }
-
public WeixinConfig getConfig() {
return this.weixinConfig;
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
index 7f966268..3d855bb8 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
@@ -50,8 +50,8 @@ public class FileTokenHolder extends AbstractTokenHolder {
*/
@Override
public Token getToken() throws WeixinException {
- String appid = getAppid();
- String appsecret = getAppsecret();
+ String appid = getConfig().getAppId();
+ String appsecret = getConfig().getAppSecret();
if (StringUtils.isBlank(appid) || StringUtils.isBlank(appsecret)) {
throw new IllegalArgumentException(
"appid or appsecret not be null!");
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
index 6ecdbb5a..6367bc24 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
@@ -48,8 +48,8 @@ public class RedisTokenHolder extends AbstractTokenHolder {
@Override
public Token getToken() throws WeixinException {
- String appid = getAppid();
- String appsecret = getAppsecret();
+ String appid = getConfig().getAppId();
+ String appsecret = getConfig().getAppSecret();
if (StringUtils.isBlank(appid) || StringUtils.isBlank(appsecret)) {
throw new IllegalArgumentException(
"appid or appsecret not be null!");
diff --git a/weixin4j-mp/README.md b/weixin4j-mp/README.md
index 4a796045..151d40a8 100644
--- a/weixin4j-mp/README.md
+++ b/weixin4j-mp/README.md
@@ -34,7 +34,7 @@ weixin4j-mp
-------
* 2014-10-27
- + 用netty构建http服务器并支持消息分发
+ + 用netty构建http服务器&消息分发
* 2014-10-28
@@ -42,7 +42,7 @@ weixin4j-mp
* 2014-10-31
- + `weixin.properties`切分为API调用地址/公众号信息两部分
+ + `weixin.properties`切分为API调用地址和公众号appid等信息两部分
* 2014-11-03
diff --git a/weixin4j-mp/weixin4j-mp-api/README.md b/weixin4j-mp/weixin4j-mp-api/README.md
index 09b1bf1d..59527a14 100644
--- a/weixin4j-mp/weixin4j-mp-api/README.md
+++ b/weixin4j-mp/weixin4j-mp-api/README.md
@@ -1,7 +1,7 @@
weixin4j-mp-api
===============
-微信[公众平台](http://mp.weixin.qq.com/wiki)开发工具包
+[微信公众平台](http://mp.weixin.qq.com/wiki)开发工具包
功能列表
-------
@@ -40,7 +40,7 @@ weixin.properties说明
| media_path | 调用媒体接口时保存媒体文件的物理路径 |
| bill_path | 调用支付(`V3`)下载对账单接口保存excel文件的物理路径 |
-示例
+示例(properties中换行用右斜杆\)
> account={"appId":"appId","appSecret":"appSecret",
> "token":"开放者的token 非必须","openId":"公众号的openid 非必须",
@@ -58,7 +58,7 @@ weixin.properties说明
// weixinProxy = new WeixinProxy(appid,appsecret);
weixinProxy.getUser(openId);
-3.针对`token`存储有两种方案,`File存储`/`Redis存储`,当然也可自己实现`TokenHolder`(继承`AbstractTokenHolder`类并重写`getToken`方法),默认使用文件(xml)的方式保存token,如果环境中支持`redis`,建议使用`RedisTokenHolder`.
+3.针对`token`存储有两种方案,`File存储`/`Redis存储`,当然也可自己实现`TokenHolder`(继承`AbstractTokenHolder`并重写`getToken`方法),默认使用文件(xml)的方式保存token,如果环境中支持`redis`,建议使用`RedisTokenHolder`.
WeixinProxy weixinProxy = new WeixinProxy(new RedisTokenHolder());
// weixinProxy = new WeixinProxy(new RedisTokenHolder(appid,appsecret));
@@ -69,7 +69,7 @@ weixin.properties说明
-------
* 2014-10-27
- + 用netty构建http服务器并支持消息分发
+ + 用netty构建http服务器&消息分发
* 2014-10-28
@@ -77,7 +77,7 @@ weixin.properties说明
* 2014-10-31
- + `weixin.properties`切分为API调用地址/公众号信息两部分
+ + `weixin.properties`切分为API调用地址和公众号appid等信息两部分
* 2014-11-03
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/README.md b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/README.md
index 3ae3b5fd..753465e8 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/README.md
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/README.md
@@ -1 +1,5 @@
-支付模块【JSP AY】【NATIVE PAY】【APP PAY】
\ No newline at end of file
+支付模块【JSAPI】【NATIVE】
+微信公众平台[V2版本支付]文档(https://mp.weixin.qq.com/paymch/readtemplate?t=mp/business/course2_tmpl&lang=zh_CN&token=6056275)
+微信公众平台[V3版本支付]文档(https://mp.weixin.qq.com/paymch/readtemplate?t=mp/business/course3_tmpl&lang=zh_CN&token=6056275)
+
+**在`2014年10月9号`之前申请并审核通过的支付接口应该属于`V2版本`支付,而之后申请的接口则为`V3版本`支付**
\ No newline at end of file
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundConverter.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundConverter.java
index bcec0f61..b31f9040 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundConverter.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/RefundConverter.java
@@ -31,13 +31,14 @@ import com.thoughtworks.xstream.mapper.Mapper;
*/
public class RefundConverter {
private final static XStream xStream = XStream.get();
- private final ReflectionConverter reflectionConverter;
+ private final Mapper mapper;
+ private final ReflectionProvider reflectionProvider;
public RefundConverter() {
xStream.processAnnotations(Refund.class);
xStream.registerConverter(new RefundConverter.$());
- reflectionConverter = new ReflectionConverter(xStream.getMapper(),
- xStream.getReflectionProvider());
+ this.mapper = xStream.getMapper();
+ this.reflectionProvider = xStream.getReflectionProvider();
}
public String toXML(Refund refund) {
@@ -57,7 +58,8 @@ public class RefundConverter {
@Override
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
- reflectionConverter.marshal(source, writer, context);
+ new ReflectionConverter(mapper, reflectionProvider).marshal(source,
+ writer, context);
}
@SuppressWarnings("unchecked")
@@ -65,9 +67,6 @@ public class RefundConverter {
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
Refund refund = new Refund();
- Mapper mapper = xStream.getMapper();
- ReflectionProvider reflectionProvider = xStream
- .getReflectionProvider();
Pattern pattern = Pattern.compile("(_\\d)$");
Matcher matcher = null;
Map> outMap = new HashMap>();
diff --git a/weixin4j-mp/weixin4j-mp-server/README.md b/weixin4j-mp/weixin4j-mp-server/README.md
index 6996c974..c0cb4e87 100644
--- a/weixin4j-mp/weixin4j-mp-server/README.md
+++ b/weixin4j-mp/weixin4j-mp-server/README.md
@@ -15,6 +15,26 @@ weixin4j-mp-server
--------
1.正确填写`weixin.properties`中的属性值
+| 属性名 | 说明 |
+| :---------- | :-------------- |
+| account | 微信公众号信息 `json格式` |
+| token_path | 使用FileTokenHolder时token保存的物理路径 |
+| qr_path | 调用二维码接口时保存二维码图片的物理路径 |
+| media_path | 调用媒体接口时保存媒体文件的物理路径 |
+| bill_path | 调用支付(`V3`)下载对账单接口保存excel文件的物理路径 |
+
+示例(properties中换行用右斜杆\)
+
+> account={"appId":"appId","appSecret":"appSecret",
+> "token":"开放者的token 非必须","openId":"公众号的openid 非必须",
+> "mchId":"V3.x版本下的微信商户号",
+> "partnerId":"财付通的商户号","partnerKey":"财付通商户权限密钥Key",
+> "paySignKey":"微信支付中调用API的密钥"}
+> token_path=/tmp/weixin/token
+> qr_path=/tmp/weixin/qr
+> media_path=/tmp/weixin/media
+> bill_path=/tmp/weixin/bill
+
2.mvn package,得到一个zip的压缩包,解压到启动目录(见`src/main/startup.sh/APP_HOME`)
3.启动netty服务(`com.foxinmy.weixin4j.mp.startup.WeixinServiceBootstrap`)