7000000
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Consts.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Consts.java
index cccebc3e..636eeca8 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Consts.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Consts.java
@@ -11,4 +11,12 @@ public final class Consts {
public static final String AES = "AES";
public static final String PROTOCOL_FILE = "file";
public static final String PROTOCOL_JAR = "jar";
+
+ public static final String MP_ASSESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
+ public static final String QY_ASSESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s";
+
+ public static final String UNIFIEDORDER = "https://api.mch.weixin.qq.com/pay/unifiedorder";
+ public static final String MICROPAYURL = "https://api.mch.weixin.qq.com/pay/micropay";
+ public static final String NATIVEURLV2 = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&productid=%s×tamp=%s&noncestr=%s";
+ public static final String NATIVEURLV3 = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&mch_id=%s&product_id=%s&time_stamp=%s&nonce_str=%s";
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Gender.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Gender.java
new file mode 100644
index 00000000..faf19c76
--- /dev/null
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Gender.java
@@ -0,0 +1,14 @@
+package com.foxinmy.weixin4j.model;
+
+/**
+ * 用户性别
+ *
+ * @className Gender
+ * @author jy
+ * @date 2014年11月5日
+ * @since JDK 1.7
+ * @see
+ */
+public enum Gender {
+ male, female, unknown;
+}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinAccount.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinAccount.java
index 7ec0afc8..ad29b88d 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinAccount.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinAccount.java
@@ -2,48 +2,51 @@ package com.foxinmy.weixin4j.model;
import java.io.Serializable;
-import org.apache.commons.lang3.StringUtils;
-
/**
- * 微信账户信息
+ * 微信账号信息
*
* @className WeixinAccount
* @author jy
- * @date 2014年8月17日
+ * @date 2014年11月18日
* @since JDK 1.7
* @see
*/
-public class WeixinAccount implements Serializable {
- private static final long serialVersionUID = 3689999353867189585L;
+public abstract class WeixinAccount implements Serializable {
+ private static final long serialVersionUID = -6001008896414323534L;
+ // 唯一的身份标识
+ private String id;
+ // 调用接口的密钥
+ private String secret;
private String token;
- // 支付场景下为用户的openid 其余情况可能是公众号的原始ID
- private String openId;
- // 公众号身份的唯一标识
- private String appId;
- // 公众平台接口 API 的权限获取所需密钥 Key
- private String appSecret;
- // 公众号支付请求中用于加密的密钥 Key,可验证商户唯一身份,PaySignKey 对应于支付场景中的 appKey 值
- private String paySignKey;
// 安全模式下的加密密钥
private String encodingAesKey;
- // 财付通商户身份的标识
- private String partnerId;
- // 财付通商户权限密钥Key
- private String partnerKey;
- // 微信支付商户号V3.x版本
- private String mchId;
- // 微信支付分配的设备号
- private String deviceInfo;
- // 微信支付版本号(如果无则按照mchId来做判断)
- private int version;
- // 是否已经认证
- private boolean isAlive;
- // 是否是服务号
- private boolean isService;
- // 是否是订阅号
- private boolean isSubscribe;
+ public abstract String getTokenUrl();
+
+ public WeixinAccount() {
+ }
+
+ public WeixinAccount(String id, String secret) {
+ this.id = id;
+ this.secret = secret;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getSecret() {
+ return secret;
+ }
+
+ public void setSecret(String secret) {
+ this.secret = secret;
+ }
public String getToken() {
return token;
@@ -53,30 +56,6 @@ public class WeixinAccount implements Serializable {
this.token = token;
}
- public String getOpenId() {
- return openId;
- }
-
- public void setOpenId(String openId) {
- this.openId = openId;
- }
-
- public String getAppId() {
- return appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
- }
-
- public String getAppSecret() {
- return appSecret;
- }
-
- public void setAppSecret(String appSecret) {
- this.appSecret = appSecret;
- }
-
public String getEncodingAesKey() {
return encodingAesKey;
}
@@ -85,130 +64,9 @@ public class WeixinAccount implements Serializable {
this.encodingAesKey = encodingAesKey;
}
- public String getPaySignKey() {
- return paySignKey;
- }
-
- public void setPaySignKey(String paySignKey) {
- this.paySignKey = paySignKey;
- }
-
- public String getPartnerId() {
- return partnerId;
- }
-
- public void setPartnerId(String partnerId) {
- this.partnerId = partnerId;
- }
-
- public String getPartnerKey() {
- return partnerKey;
- }
-
- public void setPartnerKey(String partnerKey) {
- this.partnerKey = partnerKey;
- }
-
- public String getMchId() {
- return mchId;
- }
-
- public void setMchId(String mchId) {
- this.mchId = mchId;
- }
-
- public String getDeviceInfo() {
- return deviceInfo;
- }
-
- public void setDeviceInfo(String deviceInfo) {
- this.deviceInfo = deviceInfo;
- }
-
- public boolean getIsAlive() {
- return isAlive;
- }
-
- public void setIsAlive(Boolean isAlive) {
- this.isAlive = isAlive;
- }
-
- public boolean getIsService() {
- return isService;
- }
-
- public void setIsService(Boolean isService) {
- this.isService = isService;
- }
-
- public boolean getIsSubscribe() {
- return isSubscribe;
- }
-
- public void setIsSubscribe(Boolean isSubscribe) {
- this.isSubscribe = isSubscribe;
- }
-
- public int getVersion() {
- if (version == 0) {
- return StringUtils.isNotBlank(mchId) ? 3 : 2;
- }
- return version;
- }
-
- public void setVersion(int version) {
- this.version = version;
- }
-
- public WeixinAccount() {
-
- }
-
- public WeixinAccount(String appId, String appSecret) {
- this.appId = appId;
- this.appSecret = appSecret;
- }
-
- /**
- * V3版本字段
- *
- * @param appId
- * @param appSecret
- * @param paySignKey
- * @param mchId
- */
- public WeixinAccount(String appId, String appSecret, String paySignKey,
- String mchId) {
- this(appId, appSecret);
- this.paySignKey = paySignKey;
- this.mchId = mchId;
- }
-
- /**
- * V2版本字段
- *
- * @param appId
- * @param appSecret
- * @param paySignKey
- * @param partnerId
- * @param partnerKey
- */
- public WeixinAccount(String appId, String appSecret, String paySignKey,
- String partnerId, String partnerKey) {
- this(appId, appSecret);
- this.paySignKey = paySignKey;
- this.partnerId = partnerId;
- this.partnerKey = partnerKey;
- }
-
@Override
public String toString() {
- return "WeixinAccount [token=" + token + ", openId=" + openId
- + ", appId=" + appId + ", appSecret=" + appSecret
- + ", encodingAesKey=" + encodingAesKey + ", paySignKey="
- + paySignKey + ", partnerId=" + partnerId + ", partnerKey="
- + partnerKey + ", mchId=" + mchId + ", deviceInfo="
- + deviceInfo + ", isAlive=" + isAlive + ", isService="
- + isService + ", isSubscribe=" + isSubscribe + "]";
+ return "WeixinAccount [id=" + id + ", secret=" + secret + ", token="
+ + token + ", encodingAesKey=" + encodingAesKey + "]";
}
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinMpAccount.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinMpAccount.java
new file mode 100644
index 00000000..3d26f1d3
--- /dev/null
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinMpAccount.java
@@ -0,0 +1,178 @@
+package com.foxinmy.weixin4j.model;
+
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 微信公众平台信息
+ *
+ * @className WeixinMpAccount
+ * @author jy
+ * @date 2014年8月17日
+ * @since JDK 1.7
+ * @see
+ */
+public class WeixinMpAccount extends WeixinAccount {
+ private static final long serialVersionUID = 3689999353867189585L;
+
+ // 支付场景下为用户的openid 其余情况可能是公众号的原始ID
+ private String openId;
+ // 公众号支付请求中用于加密的密钥 Key,可验证商户唯一身份,PaySignKey 对应于支付场景中的 appKey 值
+ private String paySignKey;
+ // 财付通商户身份的标识
+ private String partnerId;
+ // 财付通商户权限密钥Key
+ private String partnerKey;
+ // 微信支付商户号V3.x版本
+ private String mchId;
+ // 微信支付分配的设备号
+ private String deviceInfo;
+ // 微信支付版本号(如果无则按照mchId来做判断)
+ private int version;
+
+ // 是否已经认证
+ private boolean isAlive;
+ // 是否是服务号
+ private boolean isService;
+ // 是否是订阅号
+ private boolean isSubscribe;
+
+ @Override
+ public String getTokenUrl() {
+ return String.format(Consts.MP_ASSESS_TOKEN_URL, getId(), getSecret());
+ }
+
+ public String getOpenId() {
+ return openId;
+ }
+
+ public void setOpenId(String openId) {
+ this.openId = openId;
+ }
+
+ public String getPaySignKey() {
+ return paySignKey;
+ }
+
+ public void setPaySignKey(String paySignKey) {
+ this.paySignKey = paySignKey;
+ }
+
+ public String getPartnerId() {
+ return partnerId;
+ }
+
+ public void setPartnerId(String partnerId) {
+ this.partnerId = partnerId;
+ }
+
+ public String getPartnerKey() {
+ return partnerKey;
+ }
+
+ public void setPartnerKey(String partnerKey) {
+ this.partnerKey = partnerKey;
+ }
+
+ public String getMchId() {
+ return mchId;
+ }
+
+ public void setMchId(String mchId) {
+ this.mchId = mchId;
+ }
+
+ public String getDeviceInfo() {
+ return deviceInfo;
+ }
+
+ public void setDeviceInfo(String deviceInfo) {
+ this.deviceInfo = deviceInfo;
+ }
+
+ public boolean getIsAlive() {
+ return isAlive;
+ }
+
+ public void setIsAlive(Boolean isAlive) {
+ this.isAlive = isAlive;
+ }
+
+ public boolean getIsService() {
+ return isService;
+ }
+
+ public void setIsService(Boolean isService) {
+ this.isService = isService;
+ }
+
+ public boolean getIsSubscribe() {
+ return isSubscribe;
+ }
+
+ public void setIsSubscribe(Boolean isSubscribe) {
+ this.isSubscribe = isSubscribe;
+ }
+
+ public int getVersion() {
+ if (version == 0) {
+ return StringUtils.isNotBlank(mchId) ? 3 : 2;
+ }
+ return version;
+ }
+
+ public void setVersion(int version) {
+ this.version = version;
+ }
+
+ public WeixinMpAccount() {
+
+ }
+
+ public WeixinMpAccount(String appId, String appSecret) {
+ super(appId, appSecret);
+ }
+
+ /**
+ * V3版本字段
+ *
+ * @param appId
+ * @param appSecret
+ * @param paySignKey
+ * @param mchId
+ */
+ public WeixinMpAccount(String appId, String appSecret, String paySignKey,
+ String mchId) {
+ this(appId, appSecret);
+ this.paySignKey = paySignKey;
+ this.mchId = mchId;
+ }
+
+ /**
+ * V2版本字段
+ *
+ * @param appId
+ * @param appSecret
+ * @param paySignKey
+ * @param partnerId
+ * @param partnerKey
+ */
+ public WeixinMpAccount(String appId, String appSecret, String paySignKey,
+ String partnerId, String partnerKey) {
+ this(appId, appSecret);
+ this.paySignKey = paySignKey;
+ this.partnerId = partnerId;
+ this.partnerKey = partnerKey;
+ }
+
+ @Override
+ public String toString() {
+ return "WeixinMpAccount [openId=" + openId + ", paySignKey="
+ + paySignKey + ", partnerId=" + partnerId + ", partnerKey="
+ + partnerKey + ", mchId=" + mchId + ", deviceInfo="
+ + deviceInfo + ", version=" + version + ", isAlive=" + isAlive
+ + ", isService=" + isService + ", isSubscribe=" + isSubscribe
+ + ", getId()=" + getId() + ", getSecret()=" + getSecret()
+ + ", getToken()=" + getToken() + ", getEncodingAesKey()="
+ + getEncodingAesKey() + "]";
+ }
+}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinQyAccount.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinQyAccount.java
new file mode 100644
index 00000000..9192ff25
--- /dev/null
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinQyAccount.java
@@ -0,0 +1,34 @@
+package com.foxinmy.weixin4j.model;
+
+/**
+ * 微信企业号信息
+ *
+ * @className WeixinQyAccount
+ * @author jy
+ * @date 2014年11月18日
+ * @since JDK 1.7
+ * @see
+ */
+public class WeixinQyAccount extends WeixinAccount {
+ private static final long serialVersionUID = 3689999353867189585L;
+
+ public WeixinQyAccount() {
+ }
+
+ public WeixinQyAccount(String corpid, String corpsecret) {
+ super(corpid, corpsecret);
+ }
+
+ @Override
+ public String getTokenUrl() {
+ return String.format(Consts.QY_ASSESS_TOKEN_URL, getId(), getSecret());
+ }
+
+ @Override
+ public String toString() {
+ return "WeixinQyAccount [getTokenUrl()=" + getTokenUrl() + ", getId()="
+ + getId() + ", getSecret()=" + getSecret() + ", getToken()="
+ + getToken() + ", getEncodingAesKey()=" + getEncodingAesKey()
+ + "]";
+ }
+}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/BaseMessage.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/BaseMessage.java
index fe296d8a..8dd900ff 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/BaseMessage.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/BaseMessage.java
@@ -1,15 +1,8 @@
package com.foxinmy.weixin4j.msg;
-import java.io.Writer;
-
import com.foxinmy.weixin4j.model.BaseMsg;
import com.foxinmy.weixin4j.type.MessageType;
-import com.foxinmy.weixin4j.util.ClassUtil;
-import com.foxinmy.weixin4j.xml.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
-import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
-import com.thoughtworks.xstream.io.json.JsonWriter;
/**
* 普通消息基类
@@ -26,32 +19,12 @@ import com.thoughtworks.xstream.io.json.JsonWriter;
public class BaseMessage extends BaseMsg {
private static final long serialVersionUID = 7761192742840031607L;
- private final static XStream xmlStream = XStream.get();
- private final static XStream jsonStream = new XStream(
- new JsonHierarchicalStreamDriver() {
- public HierarchicalStreamWriter createWriter(Writer writer) {
- return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
- }
- });
@XStreamAlias("MsgType")
private MessageType msgType; // 消息类型
@XStreamAlias("MsgId")
private long msgId; // 消息ID
- static {
- Class>[] classes = ClassUtil.getClasses(
- TextMessage.class.getPackage()).toArray(new Class[0]);
-
- xmlStream.processAnnotations(classes);
- xmlStream.omitField(BaseMessage.class, "msgId");
-
- jsonStream.setMode(XStream.NO_REFERENCES);
- jsonStream.autodetectAnnotations(true);
- jsonStream.processAnnotations(classes);
- jsonStream.omitField(BaseMessage.class, "msgId");
- }
-
public BaseMessage(MessageType msgType) {
this.msgType = msgType;
}
@@ -79,25 +52,4 @@ public class BaseMessage extends BaseMsg {
}
return false;
}
-
- /**
- * 消息对象转换为微信服务器接受的xml格式消息
- *
- * @return xml字符串
- */
- public String toXml() {
- Class extends BaseMessage> targetClass = getMsgType()
- .getMessageClass();
- xmlStream.alias("xml", targetClass);
- return xmlStream.toXML(this);
- }
-
- /**
- * 消息对象转换为微信服务器接受的json格式字符串
- *
- * @return json字符串
- */
- public String toJson() {
- return jsonStream.toXML(this);
- }
}
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 ec5ca972..b0fd49f8 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
@@ -2,10 +2,11 @@ package com.foxinmy.weixin4j.token;
import com.foxinmy.weixin4j.http.HttpRequest;
import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.util.ConfigUtil;
/**
- * 获取weixin.properties中的appid&appsecret信息
+ * 获取weixin.properties中的id&secret信息
*
* @className AbstractTokenHolder
* @author jy
@@ -14,12 +15,18 @@ import com.foxinmy.weixin4j.util.ConfigUtil;
* @see
*/
public abstract class AbstractTokenHolder implements TokenHolder {
- protected final String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
- protected final HttpRequest request = new HttpRequest();
- private final WeixinAccount weixinAccount;
- public AbstractTokenHolder() {
- this.weixinAccount = ConfigUtil.getWeixinAccount();
+ protected final HttpRequest request = new HttpRequest();
+ protected final WeixinAccount weixinAccount;
+
+ public AbstractTokenHolder(AccountType accountType) {
+ if (accountType == AccountType.MP) {
+ this.weixinAccount = ConfigUtil.getWeixinMpAccount();
+ } else if (accountType == AccountType.QY) {
+ this.weixinAccount = ConfigUtil.getWeixinQyAccount();
+ } else {
+ this.weixinAccount = null;
+ }
}
public AbstractTokenHolder(WeixinAccount weixinAccount) {
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 9a8749ca..21affe2c 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
@@ -13,6 +13,7 @@ import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.util.ConfigUtil;
import com.foxinmy.weixin4j.xml.XStream;
@@ -24,23 +25,20 @@ import com.foxinmy.weixin4j.xml.XStream;
* @date 2014年9月27日
* @since JDK 1.7
* @see 获取token说明
+ * href="http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96access_token">微信公众平台获取token说明
+ * @see 微信企业号获取token说明
* @see com.foxinmy.weixin4j.model.Token
*/
public class FileTokenHolder extends AbstractTokenHolder {
- public FileTokenHolder() {
- super();
+ public FileTokenHolder(AccountType accountType) {
+ super(accountType);
}
public FileTokenHolder(WeixinAccount weixinAccount) {
super(weixinAccount);
}
- public FileTokenHolder(String appid, String appsecret) {
- this(new WeixinAccount(appid, appsecret));
- }
-
/**
* 获取token
*
@@ -55,14 +53,13 @@ public class FileTokenHolder extends AbstractTokenHolder {
*/
@Override
public Token getToken() throws WeixinException {
- String appid = getAccount().getAppId();
- String appsecret = getAccount().getAppSecret();
- if (StringUtils.isBlank(appid) || StringUtils.isBlank(appsecret)) {
+ String id = weixinAccount.getId();
+ if (StringUtils.isBlank(id) || StringUtils.isBlank(weixinAccount.getSecret())) {
throw new IllegalArgumentException(
- "appid or appsecret not be null!");
+ "id or secret not be null!");
}
File token_file = new File(String.format("%s/token_%s.xml",
- ConfigUtil.getValue("token_path"), appid));
+ ConfigUtil.getValue("token_path"), id));
Token token = null;
Calendar ca = Calendar.getInstance();
long now_time = ca.getTimeInMillis();
@@ -78,8 +75,7 @@ public class FileTokenHolder extends AbstractTokenHolder {
} else {
token_file.createNewFile();
}
- String api_token_uri = String.format(tokenUrl, appid, appsecret);
- Response response = request.get(api_token_uri);
+ Response response = request.get(weixinAccount.getTokenUrl());
token = response.getAsObject(new TypeReference() {
});
token.setTime(now_time);
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 1e4c1a94..2105a3a7 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
@@ -11,6 +11,7 @@ import com.alibaba.fastjson.TypeReference;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.type.AccountType;
/**
* 基于redis保存的Token获取类
@@ -20,7 +21,10 @@ import com.foxinmy.weixin4j.model.WeixinAccount;
* @date 2014年9月27日
* @since JDK 1.7
* @see 获取token说明
+ * href="http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96access_token">微信公众平台获取token说明
+ * @see 微信企业号获取token说明
* @see com.foxinmy.weixin4j.model.Token
*/
public class RedisTokenHolder extends AbstractTokenHolder {
@@ -37,47 +41,39 @@ public class RedisTokenHolder extends AbstractTokenHolder {
this.jedisPool = new JedisPool(poolConfig, host, port);
}
- public RedisTokenHolder() {
- this("localhost", 6379);
- }
-
- public RedisTokenHolder(String host, int port) {
- super();
+ public RedisTokenHolder(String host, int port, AccountType accountType) {
+ super(accountType);
createPool(host, port);
}
+ public RedisTokenHolder(AccountType accountType) {
+ this("localhost", 6379, accountType);
+ }
+
public RedisTokenHolder(WeixinAccount weixinAccount) {
- this(weixinAccount, "localhost", 6379);
+ this("localhost", 6379, weixinAccount);
}
- public RedisTokenHolder(String appId, String appSecret, String host,
- int port) {
- this(new WeixinAccount(appId, appSecret), host, port);
- }
-
- public RedisTokenHolder(WeixinAccount weixinAccount, String host, int port) {
+ public RedisTokenHolder(String host, int port, WeixinAccount weixinAccount) {
super(weixinAccount);
createPool(host, port);
}
@Override
public Token getToken() throws WeixinException {
- String appid = getAccount().getAppId();
- String appsecret = getAccount().getAppSecret();
- if (StringUtils.isBlank(appid) || StringUtils.isBlank(appsecret)) {
- throw new IllegalArgumentException(
- "appid or appsecret not be null!");
+ String id = weixinAccount.getId();
+ if (StringUtils.isBlank(id)
+ || StringUtils.isBlank(weixinAccount.getSecret())) {
+ throw new IllegalArgumentException("id or secret not be null!");
}
Token token = null;
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
- String key = String.format("token:%s", appid);
+ String key = String.format("token:%s", id);
String accessToken = jedis.get(key);
if (StringUtils.isBlank(accessToken)) {
- String api_token_uri = String
- .format(tokenUrl, appid, appsecret);
- token = request.get(api_token_uri).getAsObject(
+ token = request.get(weixinAccount.getTokenUrl()).getAsObject(
new TypeReference() {
});
jedis.setex(key, token.getExpiresIn() - 3,
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenHolder.java
index f84041ff..094a5242 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenHolder.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenHolder.java
@@ -18,6 +18,5 @@ import com.foxinmy.weixin4j.model.WeixinAccount;
*/
public interface TokenHolder {
public WeixinAccount getAccount();
-
public Token getToken() throws WeixinException;
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/AccountType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/AccountType.java
new file mode 100644
index 00000000..8899289f
--- /dev/null
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/AccountType.java
@@ -0,0 +1,14 @@
+package com.foxinmy.weixin4j.type;
+
+/**
+ * 账号类型
+ *
+ * @className AccountType
+ * @author jy
+ * @date 2014年11月18日
+ * @since JDK 1.7
+ * @see
+ */
+public enum AccountType {
+ MP, QY
+}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/ConfigUtil.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/ConfigUtil.java
index 5bd3952d..e7403cf1 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/ConfigUtil.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/ConfigUtil.java
@@ -5,7 +5,8 @@ import java.util.ResourceBundle;
import java.util.Set;
import com.alibaba.fastjson.JSON;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
+import com.foxinmy.weixin4j.model.WeixinQyAccount;
/**
* 商户配置工具类
@@ -33,8 +34,13 @@ public class ConfigUtil {
return weixinBundle.getString(key);
}
- public static WeixinAccount getWeixinAccount() {
+ public static WeixinMpAccount getWeixinMpAccount() {
String text = getValue("account");
- return JSON.parseObject(text, WeixinAccount.class);
+ return JSON.parseObject(text, WeixinMpAccount.class);
+ }
+
+ public static WeixinQyAccount getWeixinQyAccount() {
+ String text = getValue("account");
+ return JSON.parseObject(text, WeixinQyAccount.class);
}
}
diff --git a/weixin4j-mp/pom.xml b/weixin4j-mp/pom.xml
index a10554f6..b54e612f 100644
--- a/weixin4j-mp/pom.xml
+++ b/weixin4j-mp/pom.xml
@@ -19,29 +19,6 @@
weixin4j-mp
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
- ${maven.assembly.plugin.version}
-
-
- src/main/assembly.xml
-
-
-
-
- make-assembly
- package
-
- single
-
-
-
-
-
-
diff --git a/weixin4j-mp/weixin4j-mp-api/README.md b/weixin4j-mp/weixin4j-mp-api/README.md
index d6915fc2..191014a1 100644
--- a/weixin4j-mp/weixin4j-mp-api/README.md
+++ b/weixin4j-mp/weixin4j-mp-api/README.md
@@ -46,7 +46,7 @@ weixin.properties说明
示例(properties中换行用右斜杆\\)
-> account={"appId":"appId","appSecret":"appSecret",
+> account={"id":"appId","secret":"appSecret",
> "token":"开放者的token 非必须","openId":"公众号的openid 非必须",
> "encodingAesKey":"公众号设置了加密方式且为「安全模式」需要填入",
> "mchId":"V3.x版本下的微信商户号",
@@ -69,7 +69,6 @@ weixin.properties说明
3.针对`token`存储有两种方案,`File存储`/`Redis存储`,当然也可自己实现`TokenHolder`(继承`AbstractTokenHolder`并重写`getToken`方法),默认使用文件(xml)的方式保存token,如果环境中支持`redis`,建议使用`RedisTokenHolder`.
WeixinProxy weixinProxy = new WeixinProxy(new RedisTokenHolder());
- // weixinProxy = new WeixinProxy(new RedisTokenHolder(appid,appsecret));
// weixinProxy = new WeixinProxy(new RedisTokenHolder(weixinAccount));
4.`mvn package`.
diff --git a/weixin4j-mp/weixin4j-mp-api/pom.xml b/weixin4j-mp/weixin4j-mp-api/pom.xml
index eba1602c..4345ef9d 100644
--- a/weixin4j-mp/weixin4j-mp-api/pom.xml
+++ b/weixin4j-mp/weixin4j-mp-api/pom.xml
@@ -10,7 +10,7 @@
weixin4j-mp-api
weixin4j-mp-api
- https://github.com/foxinmy/weixin4j/tree/master/weixin4j-mp/weixin4j-api
+ https://github.com/foxinmy/weixin4j/tree/master/weixin4j-mp/weixin4j-mp-api
微信公众号API
weixin4j-mp-api
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
index 13bdb137..3fa077a6 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
@@ -10,7 +10,7 @@ import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.JsonResult;
import com.foxinmy.weixin4j.http.XmlResult;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.api.CustomApi;
import com.foxinmy.weixin4j.mp.api.GroupApi;
import com.foxinmy.weixin4j.mp.api.HelperApi;
@@ -45,10 +45,11 @@ import com.foxinmy.weixin4j.mp.type.BillType;
import com.foxinmy.weixin4j.mp.type.IdQuery;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
+import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.type.MediaType;
/**
- * 微信服务实现
+ * 微信公众平台接口实现
*
* @className WeixinProxy
* @author jy.hu
@@ -74,18 +75,18 @@ public class WeixinProxy {
* 默认采用文件存放Token信息
*/
public WeixinProxy() {
- this(new FileTokenHolder());
+ this(new FileTokenHolder(AccountType.MP));
}
/**
- * appid,appsecret
+ * appid,appsecret
* 将无法调用支付相关接口
*
* @param appid
* @param appsecret
*/
public WeixinProxy(String appid, String appsecret) {
- this(new FileTokenHolder(appid, appsecret));
+ this(new WeixinMpAccount(appid, appsecret));
}
/**
@@ -93,7 +94,7 @@ public class WeixinProxy {
*
* @param weixinAccount
*/
- public WeixinProxy(WeixinAccount weixinAccount) {
+ public WeixinProxy(WeixinMpAccount weixinAccount) {
this(new FileTokenHolder(weixinAccount));
}
@@ -793,7 +794,7 @@ public class WeixinProxy {
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.PayApi
*/
- public Order orderQueryV2(WeixinAccount weixinAccount, String outTradeNo)
+ public Order orderQueryV2(WeixinMpAccount weixinAccount, String outTradeNo)
throws WeixinException {
return payApi.orderQueryV2(outTradeNo);
}
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/HelperApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/HelperApi.java
index b99ff6d5..b65a2569 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/HelperApi.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/HelperApi.java
@@ -8,7 +8,7 @@ import com.alibaba.fastjson.TypeReference;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.model.Token;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.model.SemQuery;
import com.foxinmy.weixin4j.mp.model.SemResult;
import com.foxinmy.weixin4j.token.TokenHolder;
@@ -65,10 +65,10 @@ public class HelperApi extends BaseApi {
* @throws WeixinException
*/
public SemResult semantic(SemQuery semQuery) throws WeixinException {
- WeixinAccount weixinAccount = tokenHolder.getAccount();
+ WeixinMpAccount weixinAccount = (WeixinMpAccount) tokenHolder.getAccount();
String semantic_uri = getRequestUri("semantic_uri");
Token token = tokenHolder.getToken();
- semQuery.appid(weixinAccount.getAppId());
+ semQuery.appid(weixinAccount.getId());
Response response = request.post(
String.format(semantic_uri, token.getAccessToken()),
semQuery.toJson());
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java
index d2d05a05..a7deec63 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java
@@ -41,7 +41,7 @@ import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.http.SSLHttpRequest;
import com.foxinmy.weixin4j.http.XmlResult;
import com.foxinmy.weixin4j.model.Token;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.payment.ApiResult;
import com.foxinmy.weixin4j.mp.payment.PayUtil;
import com.foxinmy.weixin4j.mp.payment.Refund;
@@ -70,11 +70,11 @@ import com.foxinmy.weixin4j.util.RandomUtil;
*/
public class PayApi extends BaseApi {
private final TokenHolder tokenHolder;
- private final WeixinAccount weixinAccount;
+ private final WeixinMpAccount weixinAccount;
public PayApi(TokenHolder tokenHolder) {
this.tokenHolder = tokenHolder;
- this.weixinAccount = tokenHolder.getAccount();
+ this.weixinAccount = (WeixinMpAccount) tokenHolder.getAccount();
}
/**
@@ -101,7 +101,7 @@ public class PayApi extends BaseApi {
Token token = tokenHolder.getToken();
Map param = new HashMap();
- param.put("appid", weixinAccount.getAppId());
+ param.put("appid", weixinAccount.getId());
param.put("appkey", weixinAccount.getPaySignKey());
param.put("openid", openId);
param.put("transid", transid);
@@ -142,14 +142,14 @@ public class PayApi extends BaseApi {
String timestamp = DateUtil.timestamp2string();
JSONObject obj = new JSONObject();
- obj.put("appid", weixinAccount.getAppId());
+ obj.put("appid", weixinAccount.getId());
obj.put("appkey", weixinAccount.getPaySignKey());
obj.put("package", sb.toString());
obj.put("timestamp", timestamp);
String signature = PayUtil.paysignSha(obj, null);
obj.clear();
- obj.put("appid", weixinAccount.getAppId());
+ obj.put("appid", weixinAccount.getId());
obj.put("package", sb.toString());
obj.put("timestamp", timestamp);
obj.put("app_signature", signature);
@@ -494,7 +494,7 @@ public class PayApi extends BaseApi {
String _billDate = DateUtil.fortmat2yyyyMMdd(billDate);
String bill_path = ConfigUtil.getValue("bill_path");
String fileName = String.format("%s_%s_%s.xls", _billDate, billType
- .name().toLowerCase(), weixinAccount.getAppId());
+ .name().toLowerCase(), weixinAccount.getId());
File file = new File(String.format("%s/%s", bill_path, fileName));
if (file.exists()) {
return file;
@@ -592,7 +592,7 @@ public class PayApi extends BaseApi {
*/
private Map baseMapV3(IdQuery idQuery) {
Map map = new HashMap();
- map.put("appid", weixinAccount.getAppId());
+ map.put("appid", weixinAccount.getId());
map.put("mch_id", weixinAccount.getMchId());
map.put("nonce_str", RandomUtil.generateString(16));
if (StringUtils.isNotBlank(weixinAccount.getDeviceInfo())) {
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java
index 5bd6913a..7a52ac78 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java
@@ -1,5 +1,6 @@
package com.foxinmy.weixin4j.mp.api;
+import com.alibaba.fastjson.JSON;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.JsonResult;
import com.foxinmy.weixin4j.http.Response;
@@ -39,9 +40,9 @@ public class TmplApi extends BaseApi {
throws WeixinException {
Token token = tokenHolder.getToken();
String template_send_uri = getRequestUri("template_send_uri");
+ String para = JSON.toJSONString(tplMessage);
Response response = request.post(
- String.format(template_send_uri, token.getAccessToken()),
- tplMessage.toJson());
+ String.format(template_send_uri, token.getAccessToken()), para);
return response.getAsJsonResult();
}
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
index e85fee95..d172aa8d 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
@@ -48,7 +48,7 @@ public class UserApi extends BaseApi {
WeixinAccount weixinAccount = tokenHolder.getAccount();
String user_token_uri = getRequestUri("sns_user_token_uri");
Response response = request.get(String.format(user_token_uri,
- weixinAccount.getAppId(), weixinAccount.getAppSecret(), code));
+ weixinAccount.getId(), weixinAccount.getSecret(), code));
return response.getAsObject(new TypeReference() {
});
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/Group.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/Group.java
index ce9bd840..7a6726ec 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/Group.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/Group.java
@@ -55,11 +55,10 @@ public class Group implements Serializable {
/**
* 返回创建分组所需的json格式字符串
*
- * @return {"group": {"id": 107, "name": "test"}}
+ * @return {"group": {"name": "test"}}
*/
public String toCreateJson() {
- return String.format("{\"group\":{\"id\":%s,\"name\":\"%s\"}}", id,
- name);
+ return String.format("{\"group\":{\"name\":\"%s\"}}", name);
}
/**
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/User.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/User.java
index 0368a7bf..e34d8ec4 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/User.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/User.java
@@ -4,8 +4,8 @@ import java.io.Serializable;
import org.apache.commons.lang3.StringUtils;
+import com.foxinmy.weixin4j.model.Gender;
import com.foxinmy.weixin4j.mp.type.FaceSize;
-import com.foxinmy.weixin4j.mp.type.Gender;
import com.foxinmy.weixin4j.mp.type.Lang;
/**
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/msg/notify/BaseNotify.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/msg/notify/BaseNotify.java
index 6045ad98..1c2e1ce8 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/msg/notify/BaseNotify.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/msg/notify/BaseNotify.java
@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.io.Writer;
import com.foxinmy.weixin4j.mp.type.ResponseType;
+import com.foxinmy.weixin4j.util.ClassUtil;
import com.foxinmy.weixin4j.xml.XStream;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
@@ -22,6 +23,21 @@ public class BaseNotify implements Serializable {
private static final long serialVersionUID = 7190233634431087729L;
+ private final static XStream jsonStream = new XStream(
+ new JsonHierarchicalStreamDriver() {
+ public HierarchicalStreamWriter createWriter(Writer writer) {
+ return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
+ }
+ });
+ static {
+ Class>[] classes = ClassUtil
+ .getClasses(BaseNotify.class.getPackage())
+ .toArray(new Class[0]);
+
+ jsonStream.setMode(XStream.NO_REFERENCES);
+ jsonStream.autodetectAnnotations(true);
+ jsonStream.processAnnotations(classes);
+ }
private String touser;
private ResponseType msgtype;
@@ -56,15 +72,7 @@ public class BaseNotify implements Serializable {
* @return {"touser": "to","msgtype": "text","text": {"content": "123"}}
*/
public String toJson() {
- XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
- public HierarchicalStreamWriter createWriter(Writer writer) {
- return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
- }
- });
- xstream.setMode(XStream.NO_REFERENCES);
- xstream.autodetectAnnotations(true);
- xstream.processAnnotations(this.getClass());
- return xstream.toXML(this);
+ return jsonStream.toXML(this);
}
@Override
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/MicroPayPackage.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/MicroPayPackage.java
index 240b5e0c..c11e212b 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/MicroPayPackage.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/MicroPayPackage.java
@@ -4,7 +4,7 @@ import java.util.Date;
import org.apache.commons.lang3.StringUtils;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.util.RandomUtil;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@@ -33,10 +33,10 @@ public class MicroPayPackage extends PayPackage {
}
- public MicroPayPackage(WeixinAccount weixinAccount, String body,
+ public MicroPayPackage(WeixinMpAccount weixinAccount, String body,
String attach, String out_trade_no, double total_fee,
String spbill_create_ip, String auth_code) {
- this(weixinAccount.getAppId(), weixinAccount.getMchId(), weixinAccount
+ this(weixinAccount.getId(), weixinAccount.getMchId(), weixinAccount
.getDeviceInfo(), RandomUtil.generateString(16), body, attach,
out_trade_no, total_fee, spbill_create_ip, null, null, null,
auth_code);
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayAction.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayAction.java
index 6c5c1ba6..7d9b9f52 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayAction.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayAction.java
@@ -12,7 +12,7 @@ import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.PayException;
import com.foxinmy.weixin4j.http.XmlResult;
import com.foxinmy.weixin4j.model.Consts;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.payment.v2.NativePayNotifyV2;
import com.foxinmy.weixin4j.mp.payment.v2.NativePayResponseV2;
import com.foxinmy.weixin4j.mp.payment.v2.PayFeedback;
@@ -46,7 +46,7 @@ public class PayAction {
public JSONObject jsPay() {
JSONObject obj = new JSONObject();
PayPackage payPackage = null;
- WeixinAccount weixinAccount = ConfigUtil.getWeixinAccount();
+ WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount();
// V3 支付
payPackage = new PayPackageV3(weixinAccount, "用户openid", "商品描述",
"系统内部订单号", 1d, "IP地址", TradeType.JSAPI);
@@ -111,7 +111,7 @@ public class PayAction {
log.info("jspay_notify_orderinfo,{}", objMap);
JsPayNotify payNotify = XStream.get(inputStream, JsPayNotify.class);
log.info("jspay_notify_userinfo,{}", payNotify);
- WeixinAccount weixinAccount = ConfigUtil.getWeixinAccount();
+ WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount();
// 验证财付通签名
String sign = objMap.get("sign");
objMap.remove("sign");
@@ -153,7 +153,7 @@ public class PayAction {
log.info("jaapi_notify_order_info:", order);
String sign = order.getSign();
order.setSign(null);
- WeixinAccount weixinAccount = ConfigUtil.getWeixinAccount();
+ WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount();
String valid_sign = PayUtil.paysignMd5(order,
weixinAccount.getPaySignKey());
log.info("微信签名----->sign={},vaild_sign={}", sign, valid_sign);
@@ -187,7 +187,7 @@ public class PayAction {
NativePayNotifyV2 payNotify = XStream.get(inputStream,
NativePayNotifyV2.class);
log.info("native_pay_notify,{}", payNotify);
- WeixinAccount weixinAccount = ConfigUtil.getWeixinAccount();
+ WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount();
String sign = payNotify.getPaySign();
payNotify.setPaySign(null);
payNotify.setSignType(null);
@@ -227,7 +227,7 @@ public class PayAction {
NativePayNotifyV3.class);
String sign = payNotify.getSign();
payNotify.setSign(null);
- WeixinAccount weixinAccount = ConfigUtil.getWeixinAccount();
+ WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount();
String valid_sign = PayUtil.paysignMd5(payNotify,
weixinAccount.getPaySignKey());
log.info("微信签名----->sign={},vaild_sign={}", sign, valid_sign);
@@ -272,7 +272,7 @@ public class PayAction {
public String warning(InputStream inputStream) {
PayWarn payWarn = XStream.get(inputStream, PayWarn.class);
log.info("pay_warning,{}", payWarn);
- WeixinAccount weixinAccount = ConfigUtil.getWeixinAccount();
+ WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount();
String sign = payWarn.getPaySign();
payWarn.setPaySign(null);
payWarn.setSignType(null);
@@ -293,7 +293,7 @@ public class PayAction {
public String feedback(InputStream inputStream) {
PayFeedback feedback = XStream.get(inputStream, PayFeedback.class);
log.info("pay_feedback_info:{}", feedback);
- WeixinAccount weixinAccount = ConfigUtil.getWeixinAccount();
+ WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount();
// 验证微信签名
Map obj = new HashMap();
obj.put("openid", feedback.getOpenId());
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java
index 44f85416..092ef016 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/PayUtil.java
@@ -13,7 +13,8 @@ import com.foxinmy.weixin4j.exception.PayException;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.HttpRequest;
import com.foxinmy.weixin4j.http.Response;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.Consts;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.payment.v2.JsPayRequestV2;
import com.foxinmy.weixin4j.mp.payment.v2.NativePayResponseV2;
import com.foxinmy.weixin4j.mp.payment.v2.PayPackageV2;
@@ -37,11 +38,6 @@ import com.foxinmy.weixin4j.xml.XStream;
* @see
*/
public class PayUtil {
- private static final String UNIFIEDORDER = "https://api.mch.weixin.qq.com/pay/unifiedorder";
- private static final String MICROPAYURL = "https://api.mch.weixin.qq.com/pay/micropay";
- private static final String NATIVEURLV2 = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&productid=%s×tamp=%s&noncestr=%s";
- private static final String NATIVEURLV3 = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&mch_id=%s&product_id=%s&time_stamp=%s&nonce_str=%s";
-
/**
* 生成JSAPI字符串
*
@@ -53,7 +49,7 @@ public class PayUtil {
* @throws PayException
*/
public static String createPayJsRequestJson(PayPackage payPackage,
- WeixinAccount weixinAccount) throws PayException {
+ WeixinMpAccount weixinAccount) throws PayException {
if (payPackage instanceof PayPackageV2) {
return createPayJsRequestJsonV2((PayPackageV2) payPackage,
weixinAccount);
@@ -74,7 +70,7 @@ public class PayUtil {
* @return
*/
public static String createPayJsRequestJsonV2(PayPackageV2 payPackage,
- WeixinAccount weixinAccount) {
+ WeixinMpAccount weixinAccount) {
if (StringUtils.isBlank(payPackage.getPartner())) {
payPackage.setPartner(weixinAccount.getPartnerId());
}
@@ -101,7 +97,7 @@ public class PayUtil {
* @return
*/
public static String createPayJsRequestJsonV2(String body, String orderNo,
- double orderFee, String ip, WeixinAccount weixinAccount) {
+ double orderFee, String ip, WeixinMpAccount weixinAccount) {
PayPackageV2 payPackage = new PayPackageV2(body, orderNo, orderFee, ip);
payPackage.setPartner(weixinAccount.getPartnerId());
return createPayJsRequestJsonV2(payPackage, weixinAccount);
@@ -168,7 +164,7 @@ public class PayUtil {
*/
public static String createPayJsRequestJsonV3(String openId, String body,
String orderNo, double orderFee, String ip, String notifyUrl,
- WeixinAccount weixinAccount) throws PayException {
+ WeixinMpAccount weixinAccount) throws PayException {
PayPackageV3 payPackage = new PayPackageV3(weixinAccount, openId, body,
orderNo, orderFee, ip, TradeType.JSAPI);
payPackage.setNotify_url(notifyUrl);
@@ -186,7 +182,7 @@ public class PayUtil {
* @throws PayException
*/
public static String createPayJsRequestJsonV3(PayPackageV3 payPackage,
- WeixinAccount weixinAccount) throws PayException {
+ WeixinMpAccount weixinAccount) throws PayException {
String paySignKey = weixinAccount.getPaySignKey();
payPackage.setSign(paysignMd5(payPackage, paySignKey));
PrePay prePay = createPrePay(payPackage);
@@ -201,7 +197,7 @@ public class PayUtil {
String payJsRequestXml = XStream.to(payPackage).replaceAll("__", "_");
HttpRequest request = new HttpRequest();
try {
- Response response = request.post(UNIFIEDORDER, payJsRequestXml);
+ Response response = request.post(Consts.UNIFIEDORDER, payJsRequestXml);
prePay = response.getAsObject(new TypeReference() {
});
} catch (WeixinException e) {
@@ -263,17 +259,17 @@ public class PayUtil {
* 与订单ID等价
* @return
*/
- public String createNativePayRequestURLV2(WeixinAccount weixinAccount,
+ public String createNativePayRequestURLV2(WeixinMpAccount weixinAccount,
String productId) {
Map map = new HashMap();
String timestamp = DateUtil.timestamp2string();
String noncestr = RandomUtil.generateString(16);
- map.put("appid", weixinAccount.getAppId());
+ map.put("appid", weixinAccount.getId());
map.put("timestamp", timestamp);
map.put("noncestr", noncestr);
map.put("productid", productId);
String sign = paysignSha(map, weixinAccount.getPaySignKey());
- return String.format(NATIVEURLV2, sign, weixinAccount.getAppId(),
+ return String.format(Consts.NATIVEURLV2, sign, weixinAccount.getId(),
productId, timestamp, noncestr);
}
@@ -286,29 +282,29 @@ public class PayUtil {
* 与订单ID等价
* @return
*/
- public String createNativePayRequestURLV3(WeixinAccount weixinAccount,
+ public String createNativePayRequestURLV3(WeixinMpAccount weixinAccount,
String productId) {
Map map = new HashMap();
String timestamp = DateUtil.timestamp2string();
String noncestr = RandomUtil.generateString(16);
- map.put("appid", weixinAccount.getAppId());
+ map.put("appid", weixinAccount.getId());
map.put("mch_id", weixinAccount.getMchId());
map.put("time_stamp", timestamp);
map.put("nonce_str", noncestr);
map.put("product_id", productId);
String sign = paysignMd5(map, weixinAccount.getPaySignKey());
- return String.format(NATIVEURLV3, sign, weixinAccount.getAppId(),
+ return String.format(Consts.NATIVEURLV3, sign, weixinAccount.getId(),
weixinAccount.getMchId(), productId, timestamp, noncestr);
}
- public static String createNativePayRequestV2(WeixinAccount weixinAccount,
+ public static String createNativePayRequestV2(WeixinMpAccount weixinAccount,
PayPackageV2 payPackage) {
NativePayResponseV2 payRequest = new NativePayResponseV2(weixinAccount,
payPackage);
Map map = new HashMap();
String timestamp = DateUtil.timestamp2string();
String noncestr = RandomUtil.generateString(16);
- map.put("appid", weixinAccount.getAppId());
+ map.put("appid", weixinAccount.getId());
map.put("timestamp", timestamp);
map.put("noncestr", noncestr);
map.put("package", payRequest.getPackageInfo());
@@ -336,12 +332,12 @@ public class PayUtil {
* @param weixinAccount
* 商户信息
* @return 返回数据
- * @see {@link com.foxinmy.weixin4j.mp.payment.PayUtil#createMicroPay(MicroPayPackage, WeixinAccount)}
+ * @see {@link com.foxinmy.weixin4j.mp.payment.PayUtil#createMicroPay(MicroPayPackage, WeixinMpAccount)}
* @throws WeixinException
*/
public static com.foxinmy.weixin4j.mp.payment.v3.Order createMicroPay(
String authCode, String body, String attach, String orderNo,
- double orderFee, String ip, WeixinAccount weixinAccount)
+ double orderFee, String ip, WeixinMpAccount weixinAccount)
throws WeixinException {
MicroPayPackage payPackage = new MicroPayPackage(weixinAccount, body,
attach, orderNo, orderFee, ip, authCode);
@@ -359,13 +355,13 @@ public class PayUtil {
* @throws WeixinException
*/
public static com.foxinmy.weixin4j.mp.payment.v3.Order createMicroPay(
- MicroPayPackage payPackage, WeixinAccount weixinAccount)
+ MicroPayPackage payPackage, WeixinMpAccount weixinAccount)
throws WeixinException {
String sign = paysignMd5(payPackage, weixinAccount.getPaySignKey());
payPackage.setSign(sign);
String para = XStream.to(payPackage).replaceAll("__", "_");
HttpRequest request = new HttpRequest();
- Response response = request.post(MICROPAYURL, para);
+ Response response = request.post(Consts.MICROPAYURL, para);
return response
.getAsObject(new TypeReference() {
});
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java
index f0ad15a4..774aeb56 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/JsPayRequestV2.java
@@ -5,7 +5,7 @@ import java.beans.Transient;
import org.apache.commons.codec.digest.DigestUtils;
import com.alibaba.fastjson.annotation.JSONField;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.payment.PayRequest;
import com.foxinmy.weixin4j.util.MapUtil;
@@ -28,8 +28,8 @@ public class JsPayRequestV2 extends PayRequest {
private static final long serialVersionUID = -5972173459255255197L;
- public JsPayRequestV2(WeixinAccount weixinAccount, PayPackageV2 payPackage) {
- this.setAppId(weixinAccount.getAppId());
+ public JsPayRequestV2(WeixinMpAccount weixinAccount, PayPackageV2 payPackage) {
+ this.setAppId(weixinAccount.getId());
this.setPackageInfo(package2string(payPackage,
weixinAccount.getPartnerKey()));
}
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayResponseV2.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayResponseV2.java
index e7418e78..398c6ed7 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayResponseV2.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v2/NativePayResponseV2.java
@@ -1,6 +1,6 @@
package com.foxinmy.weixin4j.mp.payment.v2;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.thoughtworks.xstream.annotations.XStreamAlias;
/**
@@ -21,7 +21,7 @@ public class NativePayResponseV2 extends JsPayRequestV2 {
@XStreamAlias("RetErrMsg")
private String retMsg;
- public NativePayResponseV2(WeixinAccount weixinAccount,
+ public NativePayResponseV2(WeixinMpAccount weixinAccount,
PayPackageV2 payPackage) {
super(weixinAccount, payPackage);
this.retCode = "0";
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java
index 4b28abc0..349098ac 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/payment/v3/PayPackageV3.java
@@ -4,7 +4,7 @@ import java.util.Date;
import org.apache.commons.lang3.StringUtils;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.payment.PayPackage;
import com.foxinmy.weixin4j.mp.type.TradeType;
import com.foxinmy.weixin4j.util.RandomUtil;
@@ -38,17 +38,17 @@ public class PayPackageV3 extends PayPackage {
}
- public PayPackageV3(WeixinAccount weixinAccount, String openId,
+ public PayPackageV3(WeixinMpAccount weixinAccount, String openId,
String body, String out_trade_no, double total_fee,
String spbill_create_ip, TradeType tradeType) {
this(weixinAccount, openId, body, null, out_trade_no, total_fee,
spbill_create_ip, null, tradeType);
}
- public PayPackageV3(WeixinAccount weixinAccount, String openId,
+ public PayPackageV3(WeixinMpAccount weixinAccount, String openId,
String body, String attach, String out_trade_no, double total_fee,
String spbill_create_ip, String notify_url, TradeType tradeType) {
- this(weixinAccount.getAppId(), weixinAccount.getMchId(), weixinAccount
+ this(weixinAccount.getId(), weixinAccount.getMchId(), weixinAccount
.getDeviceInfo(), RandomUtil.generateString(16), body, attach,
out_trade_no, total_fee, spbill_create_ip, null, null, null,
notify_url, tradeType, openId, null);
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/response/BaseResponse.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/response/BaseResponse.java
index e73f9b99..e219ead2 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/response/BaseResponse.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/response/BaseResponse.java
@@ -1,16 +1,11 @@
package com.foxinmy.weixin4j.mp.response;
-import java.io.Writer;
-
import com.foxinmy.weixin4j.model.BaseMsg;
import com.foxinmy.weixin4j.mp.type.ResponseType;
import com.foxinmy.weixin4j.msg.BaseMessage;
import com.foxinmy.weixin4j.util.ClassUtil;
import com.foxinmy.weixin4j.xml.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
-import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
-import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
-import com.thoughtworks.xstream.io.json.JsonWriter;
/**
* 响应消息基类
@@ -28,26 +23,15 @@ public class BaseResponse extends BaseMsg {
private static final long serialVersionUID = 7761192742840031607L;
protected final static XStream xmlStream = XStream.get();
- private final static XStream jsonStream = new XStream(
- new JsonHierarchicalStreamDriver() {
- public HierarchicalStreamWriter createWriter(Writer writer) {
- return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
- }
- });
-
- @XStreamAlias("MsgType")
- private ResponseType msgType; // 消息类型
-
static {
Class>[] classes = ClassUtil.getClasses(
BaseResponse.class.getPackage()).toArray(new Class[0]);
+ xmlStream.autodetectAnnotations(true);
xmlStream.processAnnotations(classes);
-
- jsonStream.setMode(XStream.NO_REFERENCES);
- jsonStream.autodetectAnnotations(true);
- jsonStream.processAnnotations(classes);
}
+ @XStreamAlias("MsgType")
+ private ResponseType msgType; // 消息类型
public BaseResponse(ResponseType msgType) {
this.msgType = msgType;
@@ -59,7 +43,7 @@ public class BaseResponse extends BaseMsg {
public BaseResponse(ResponseType msgType, String toUserName,
String fromUserName) {
- super(toUserName,fromUserName);
+ super(toUserName, fromUserName);
this.msgType = msgType;
}
@@ -78,17 +62,6 @@ public class BaseResponse extends BaseMsg {
* @return xml字符串
*/
public String toXml() {
- Class extends BaseResponse> targetClass = msgType.getMessageClass();
- xmlStream.alias("xml", targetClass);
return xmlStream.toXML(this);
}
-
- /**
- * 消息对象转换为微信服务器接受的json格式字符串
- *
- * @return json字符串
- */
- public String toJson() {
- return jsonStream.toXML(this);
- }
}
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/response/TemplateMessage.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/response/TemplateMessage.java
index 53296f0c..52fbe79c 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/response/TemplateMessage.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/response/TemplateMessage.java
@@ -1,13 +1,9 @@
package com.foxinmy.weixin4j.mp.response;
-import java.beans.Transient;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.annotation.JSONField;
-
/**
* 模板消息
*
@@ -115,10 +111,4 @@ public class TemplateMessage implements Serializable {
+ template_id + ", url=" + url + ", topcolor=" + topcolor
+ ", data=" + data + "]";
}
-
- @Transient
- @JSONField(serialize = false)
- public String toJson() {
- return JSON.toJSONString(this);
- }
}
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/type/Gender.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/type/Gender.java
deleted file mode 100644
index d017e058..00000000
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/type/Gender.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.foxinmy.weixin4j.mp.type;
-
-/**
- * 用户性别
- * @className Gender
- * @author jy
- * @date 2014年11月5日
- * @since JDK 1.7
- * @see
- */
-public enum Gender {
- male(1), female(2), unknown(0);
-
- private int sex;
-
- Gender(int sex) {
- this.sex = sex;
- }
-
- public int getInt() {
- return sex;
- }
-}
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties b/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties
index 4cc5d0b7..8e3edf72 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties
@@ -1,6 +1,6 @@
# \u6d4b\u8bd5\u4e4b\u7528 \u6b63\u5f0f\u73af\u5883\u4e0bcopy\u4e00\u4efd\u5230classpath
# \u516c\u4f17\u53f7\u4fe1\u606f
-account={"appId":"wx4ab8f8de58159a57","appSecret":"1d4eb0f4bf556aaed539f30ed05ca795",\
+account={"id":"wx4ab8f8de58159a57","secret":"1d4eb0f4bf556aaed539f30ed05ca795",\
"token":"\u5f00\u653e\u8005\u7684token \u975e\u5fc5\u987b","openId":"\u516c\u4f17\u53f7\u7684openid \u975e\u5fc5\u987b",\
"encodingAesKey":"\u516c\u4f17\u53f7\u8bbe\u7f6e\u4e86\u52a0\u5bc6\u65b9\u5f0f\u4e14\u4e3a\u300c\u5b89\u5168\u6a21\u5f0f\u300d\u65f6\u9700\u8981\u586b\u5165",\
"mchId":"V3.x\u7248\u672c\u4e0b\u7684\u5fae\u4fe1\u5546\u6237\u53f7",\
diff --git a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/TokenTest.java b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/TokenTest.java
index da879980..3de54ff7 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/TokenTest.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/TokenTest.java
@@ -7,6 +7,7 @@ import org.junit.Test;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
+import com.foxinmy.weixin4j.type.AccountType;
/**
* token测试
@@ -22,7 +23,7 @@ public class TokenTest {
@Before
public void setUp() {
- tokenHolder = new FileTokenHolder();
+ tokenHolder = new FileTokenHolder(AccountType.MP);
}
@Test
diff --git a/weixin4j-mp/weixin4j-mp-server/README.md b/weixin4j-mp/weixin4j-mp-server/README.md
index 752ea0a8..a1a47270 100644
--- a/weixin4j-mp/weixin4j-mp-server/README.md
+++ b/weixin4j-mp/weixin4j-mp-server/README.md
@@ -1,7 +1,7 @@
weixin4j-mp-server
==================
-微信netty服务
+微信公众平台netty服务
------------
功能列表
@@ -26,7 +26,7 @@ weixin4j-mp-server
示例(properties中换行用右斜杆\\)
-> account={"appId":"appId","appSecret":"appSecret",
+> account={"id":"appId","secret":"appSecret",
> "token":"开放者的token 非必须","openId":"公众号的openid 非必须",
> "encodingAesKey":"公众号设置了加密方式且为「安全模式」时需要填入",
> "mchId":"V3.x版本下的微信商户号",
diff --git a/weixin4j-mp/weixin4j-mp-server/pom.xml b/weixin4j-mp/weixin4j-mp-server/pom.xml
index 9b63f36d..0c1c43f4 100644
--- a/weixin4j-mp/weixin4j-mp-server/pom.xml
+++ b/weixin4j-mp/weixin4j-mp-server/pom.xml
@@ -10,7 +10,7 @@
weixin4j-mp-server
weixin4j-mp-server
- https://github.com/foxinmy/weixin4j/tree/master/weixin4j-mp/weixin4j-server
+ https://github.com/foxinmy/weixin4j/tree/master/weixin4j-mp/weixin4j-mp-server
微信公众号服务
weixin-mp-server
diff --git a/weixin4j-mp/weixin4j-mp-server/src/main/java/com/foxinmy/weixin4j/mp/server/WeixinMessageDecoder.java b/weixin4j-mp/weixin4j-mp-server/src/main/java/com/foxinmy/weixin4j/mp/server/WeixinMessageDecoder.java
index d6f575a3..6d6e7d49 100644
--- a/weixin4j-mp/weixin4j-mp-server/src/main/java/com/foxinmy/weixin4j/mp/server/WeixinMessageDecoder.java
+++ b/weixin4j-mp/weixin4j-mp-server/src/main/java/com/foxinmy/weixin4j/mp/server/WeixinMessageDecoder.java
@@ -13,7 +13,7 @@ import org.apache.http.Consts;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.model.HttpWeixinMessage;
import com.foxinmy.weixin4j.mp.type.EncryptType;
import com.foxinmy.weixin4j.util.ConfigUtil;
@@ -37,7 +37,7 @@ public class WeixinMessageDecoder extends
@Override
protected void decode(ChannelHandlerContext ctx, FullHttpRequest req,
List