diff --git a/pom.xml b/pom.xml
index b93c50ec..5e219eb6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.github.binarywang
weixin-java-parent
- 2.6.0
+ 2.7.0-SNAPSHOT
pom
WeiXin Java Tools - Parent
微信公众号、企业号上级POM
diff --git a/readme.md b/readme.md
index 5f10da8a..b5533318 100644
--- a/readme.md
+++ b/readme.md
@@ -52,7 +52,7 @@
---------------------------------
## Maven & Gradle 最新正式版本
-* 微信支付(暂时为测试版本):
+* 微信支付:
maven:
```xml
diff --git a/weixin-java-common/pom.xml b/weixin-java-common/pom.xml
index 946c65c2..e666caab 100644
--- a/weixin-java-common/pom.xml
+++ b/weixin-java-common/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
weixin-java-parent
- 2.6.0
+ 2.7.0-SNAPSHOT
weixin-java-common
@@ -39,6 +39,11 @@
jetty-servlet
test
+
+ org.jodd
+ jodd-http
+ 3.7
+
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java
index e95f02de..3cb1d563 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MediaDownloadRequestExecutor.java
@@ -10,6 +10,7 @@ import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.util.fs.FileUtils;
import me.chanjar.weixin.common.util.http.apache.InputStreamResponseHandler;
import me.chanjar.weixin.common.util.http.apache.Utf8ResponseHandler;
+
import me.chanjar.weixin.common.util.http.okhttp.OkhttpProxyInfo;
import okhttp3.*;
@@ -111,7 +112,7 @@ public class MediaDownloadRequestExecutor extends AbstractRequestExecutor {
*/
T executeOkhttp(ConnectionPool pool, final OkhttpProxyInfo proxyInfo, String uri, E data) throws WxErrorException, IOException;
-
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimpleGetRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimpleGetRequestExecutor.java
index 50beb29f..5edb70f3 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimpleGetRequestExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/SimpleGetRequestExecutor.java
@@ -7,6 +7,7 @@ import jodd.http.ProxyInfo;
import me.chanjar.weixin.common.bean.result.WxError;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.util.http.apache.Utf8ResponseHandler;
+
import me.chanjar.weixin.common.util.http.okhttp.OkhttpProxyInfo;
import okhttp3.*;
@@ -28,6 +29,7 @@ import java.util.concurrent.TimeUnit;
*/
public class SimpleGetRequestExecutor extends AbstractRequestExecutor {
+
/**
* apache-http实现方式
*
@@ -98,6 +100,7 @@ public class SimpleGetRequestExecutor extends AbstractRequestExecutor
com.github.binarywang
weixin-java-parent
- 2.6.0
+ 2.7.0-SNAPSHOT
weixin-java-cp
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/apache/WxCpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/apache/WxCpServiceImpl.java
index 8e4d57e3..ca0ed462 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/apache/WxCpServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/apache/WxCpServiceImpl.java
@@ -1,6 +1,5 @@
package me.chanjar.weixin.cp.api.impl.apache;
-
import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.bean.result.WxError;
import me.chanjar.weixin.common.exception.WxErrorException;
@@ -8,6 +7,7 @@ import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder;
import me.chanjar.weixin.cp.api.impl.AbstractWxCpService;
+
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -73,6 +73,7 @@ public class WxCpServiceImpl extends AbstractWxCpService 0) {
httpProxy = new ProxyInfo(ProxyInfo.ProxyType.HTTP, configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort(), configStorage.getHttpProxyUsername(), configStorage.getHttpProxyPassword());
}
httpClient = JoddHttp.httpConnectionProvider;
}
+
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java
index 949709ab..1cf2d312 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpMessageGsonAdapter.java
@@ -61,6 +61,10 @@ public class WxCpMessageGsonAdapter implements JsonSerializer {
messageJson.add("voice", voice);
}
+ if (StringUtils.isNotBlank(message.getSafe())) {
+ messageJson.addProperty("safe", message.getSafe());
+ }
+
if (WxConsts.CUSTOM_MSG_VIDEO.equals(message.getMsgType())) {
JsonObject video = new JsonObject();
video.addProperty("media_id", message.getMediaId());
diff --git a/weixin-java-mp/pom.xml b/weixin-java-mp/pom.xml
index 3f4bf649..77d2488a 100644
--- a/weixin-java-mp/pom.xml
+++ b/weixin-java-mp/pom.xml
@@ -6,7 +6,7 @@
com.github.binarywang
weixin-java-parent
- 2.6.0
+ 2.7.0-SNAPSHOT
weixin-java-mp
WeiXin Java Tools - MP
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
index 33333c44..20cb3064 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
@@ -350,4 +350,5 @@ public interface WxMpService {
*/
void initHttp();
+
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/apache/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/apache/WxMpServiceImpl.java
index 8c8085da..37f7e5a4 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/apache/WxMpServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/apache/WxMpServiceImpl.java
@@ -1,5 +1,6 @@
package me.chanjar.weixin.mp.api.impl.apache;
+
import java.io.IOException;
import java.util.concurrent.locks.Lock;
@@ -71,11 +72,13 @@ public class WxMpServiceImpl extends AbstractWxMpService 0) {
@@ -40,7 +40,6 @@ public class WxMpServiceImpl extends AbstractWxMpService {
-
@Override
public WxMediaImgUploadResult executeJodd(HttpConnectionProvider provider, ProxyInfo proxyInfo, String uri, File data) throws WxErrorException, IOException {
if (data == null) {
@@ -99,6 +102,7 @@ public class MediaImgUploadRequestExecutor extends AbstractRequestExecutor
weixin-java-parent
com.github.binarywang
- 2.6.0
+ 2.7.0-SNAPSHOT
4.0.0
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java
index 2572f091..1a949bc0 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxPayServiceImpl.java
@@ -188,17 +188,37 @@ public class WxPayServiceImpl implements WxPayService {
}
Map payInfo = new HashMap<>();
- payInfo.put("appId", getConfig().getAppId());
- // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。
- // 但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
- payInfo.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
- payInfo.put("nonceStr", String.valueOf(System.currentTimeMillis()));
- payInfo.put("package", "prepay_id=" + prepayId);
- payInfo.put("signType", "MD5");
if ("NATIVE".equals(request.getTradeType())) {
payInfo.put("codeUrl", unifiedOrderResult.getCodeURL());
+ } else if ("APP".equals(request.getTradeType())) {
+ // APP支付绑定的是微信开放平台上的账号,APPID为开放平台上绑定APP后发放的参数
+ String appId = getConfig().getAppId();
+ Map configMap = new HashMap<>();
+ // 此map用于参与调起sdk支付的二次签名,格式全小写,timestamp只能是10位,格式固定,切勿修改
+ String partnerid = getConfig().getMchId();
+ configMap.put("prepayid", prepayId);
+ configMap.put("partnerid", partnerid);
+ configMap.put("package", "Sign=WXPay");
+ configMap.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
+ configMap.put("noncestr", String.valueOf(System.currentTimeMillis()));
+ configMap.put("appid", appId);
+ // 此map用于客户端与微信服务器交互
+ payInfo.put("paySign", SignUtils.createSign(payInfo, this.getConfig().getMchKey()));
+ payInfo.put("prepayId", prepayId);
+ payInfo.put("partnerId", partnerid);
+ payInfo.put("appId", appId);
+ payInfo.put("packageValue", "Sign=WXPay");
+ payInfo.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
+ payInfo.put("nonceStr", String.valueOf(System.currentTimeMillis()));
+ } else if ("JSAPI".equals(request.getTradeType())) {
+ payInfo.put("appId", unifiedOrderResult.getAppid());
+ // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
+ payInfo.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
+ payInfo.put("nonceStr", String.valueOf(System.currentTimeMillis()));
+ payInfo.put("package", "prepay_id=" + prepayId);
+ payInfo.put("signType", "MD5");
+ payInfo.put("paySign", SignUtils.createSign(payInfo, this.getConfig().getMchKey()));
}
- payInfo.put("paySign", SignUtils.createSign(payInfo, this.getConfig().getMchKey()));
return payInfo;
}