diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java
index b41467f21..0d807402a 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/GsonHelper.java
@@ -4,7 +4,6 @@ import com.google.common.collect.Lists;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
-import jodd.util.MathUtil;
import me.chanjar.weixin.common.error.WxRuntimeException;
import java.util.List;
@@ -173,7 +172,7 @@ public class GsonHelper {
* @param keyOrValue 包含key或value的数组
*/
public static void put(JsonObject jsonObject, Object... keyOrValue) {
- if (MathUtil.isOdd(keyOrValue.length)) {
+ if (keyOrValue.length % 2 == 1) {
throw new WxRuntimeException("参数个数必须为偶数");
}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayUnifiedOrderV3Result.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayUnifiedOrderV3Result.java
index 58e74196f..c9b5744b3 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayUnifiedOrderV3Result.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPayUnifiedOrderV3Result.java
@@ -6,6 +6,7 @@ import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
+import me.chanjar.weixin.common.error.WxRuntimeException;
import java.io.Serializable;
import java.security.PrivateKey;
@@ -72,6 +73,8 @@ public class WxPayUnifiedOrderV3Result implements Serializable {
@Data
@Accessors(chain = true)
public static class JsapiResult implements Serializable {
+ private static final long serialVersionUID = 4465376277943307271L;
+
private String appId;
private String timeStamp;
private String nonceStr;
@@ -80,16 +83,18 @@ public class WxPayUnifiedOrderV3Result implements Serializable {
private String paySign;
private String getSignStr() {
- return String.format("%s\n%s\n%s\n%s\n", appId, timeStamp, nonceStr, packageValue);
+ return String.format("%s%n%s%n%s%n%s%n", appId, timeStamp, nonceStr, packageValue);
}
}
@Data
@Accessors(chain = true)
public static class AppResult implements Serializable {
+ private static final long serialVersionUID = 5465773025172875110L;
+
private String appid;
- private String partnerid;
- private String prepayid;
+ private String partnerId;
+ private String prepayId;
private String packageValue;
private String noncestr;
private String timestamp;
@@ -111,14 +116,15 @@ public class WxPayUnifiedOrderV3Result implements Serializable {
return (T) this.h5Url;
case APP:
AppResult appResult = new AppResult();
- appResult.setAppid(appId).setPrepayid(this.prepayId).setPartnerid(mchId)
+ appResult.setAppid(appId).setPrepayId(this.prepayId).setPartnerId(mchId)
.setNoncestr(nonceStr).setTimestamp(timestamp)
//暂填写固定值Sign=WXPay
.setPackageValue("Sign=WXPay");
return (T) appResult;
case NATIVE:
return (T) this.codeUrl;
+ default:
+ throw new WxRuntimeException("不支持的支付类型");
}
- return null;
}
}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/ResourcesUtils.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/ResourcesUtils.java
index 3a9e78855..ac68b00bb 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/ResourcesUtils.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/ResourcesUtils.java
@@ -1,120 +1,86 @@
package com.github.binarywang.wxpay.util;
-import jodd.io.IOUtil;
import jodd.util.ClassUtil;
import lombok.val;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
-import java.net.URLConnection;
/**
* 基于jodd.util.ResourcesUtil改造实现
+ *
* @author jodd
*/
public class ResourcesUtils {
+ /**
+ * Retrieves given resource as URL. Resource is always absolute and may
+ * starts with a slash character.
+ *
+ * Resource will be loaded using class loaders in the following order:
+ *
+ * - {@link Thread#getContextClassLoader() Thread.currentThread().getContextClassLoader()}
+ * - {@link Class#getClassLoader() ClassLoaderUtil.class.getClassLoader()}
+ * - if
callingClass
is provided: {@link Class#getClassLoader() callingClass.getClassLoader()}
+ *
+ */
+ public static URL getResourceUrl(String resourceName, final ClassLoader classLoader) {
- /**
- * Retrieves given resource as URL.
- * @see #getResourceUrl(String, ClassLoader)
- */
- public static URL getResourceUrl(final String resourceName) {
- return getResourceUrl(resourceName, null);
- }
+ if (resourceName.startsWith("/")) {
+ resourceName = resourceName.substring(1);
+ }
- /**
- * Retrieves given resource as URL. Resource is always absolute and may
- * starts with a slash character.
- *
- * Resource will be loaded using class loaders in the following order:
- *
- * - {@link Thread#getContextClassLoader() Thread.currentThread().getContextClassLoader()}
- * - {@link Class#getClassLoader() ClassLoaderUtil.class.getClassLoader()}
- * - if
callingClass
is provided: {@link Class#getClassLoader() callingClass.getClassLoader()}
- *
- */
- public static URL getResourceUrl(String resourceName, final ClassLoader classLoader) {
+ URL resourceUrl;
- if (resourceName.startsWith("/")) {
- resourceName = resourceName.substring(1);
- }
+ // try #1 - using provided class loader
+ if (classLoader != null) {
+ resourceUrl = classLoader.getResource(resourceName);
+ if (resourceUrl != null) {
+ return resourceUrl;
+ }
+ }
- URL resourceUrl;
+ // try #2 - using thread class loader
+ final ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
+ if ((currentThreadClassLoader != null) && (currentThreadClassLoader != classLoader)) {
+ resourceUrl = currentThreadClassLoader.getResource(resourceName);
+ if (resourceUrl != null) {
+ return resourceUrl;
+ }
+ }
- // try #1 - using provided class loader
- if (classLoader != null) {
- resourceUrl = classLoader.getResource(resourceName);
- if (resourceUrl != null) {
- return resourceUrl;
- }
- }
-
- // try #2 - using thread class loader
- final ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
- if ((currentThreadClassLoader != null) && (currentThreadClassLoader != classLoader)) {
- resourceUrl = currentThreadClassLoader.getResource(resourceName);
- if (resourceUrl != null) {
- return resourceUrl;
- }
- }
-
- // try #3 - using caller classloader, similar as Class.forName()
+ // try #3 - using caller classloader, similar as Class.forName()
val callerClass = ClassUtil.getCallerClass(2);
val callerClassLoader = callerClass.getClassLoader();
- if ((callerClassLoader != classLoader) && (callerClassLoader != currentThreadClassLoader)) {
- resourceUrl = callerClassLoader.getResource(resourceName);
+ if ((callerClassLoader != classLoader) && (callerClassLoader != currentThreadClassLoader)) {
+ resourceUrl = callerClassLoader.getResource(resourceName);
return resourceUrl;
- }
+ }
- return null;
- }
+ return null;
+ }
- public static String getResourceAsString(final String resourceName) throws IOException {
- final InputStream inputStream = getResourceAsStream(resourceName);
- try {
- final char[] data = IOUtil.readChars(inputStream);
- return new String(data);
- }
- finally {
- IOUtil.close(inputStream);
- }
- }
+ /**
+ * Opens a resource of the specified name for reading.
+ *
+ * @see #getResourceAsStream(String, ClassLoader)
+ */
+ public static InputStream getResourceAsStream(final String resourceName) throws IOException {
+ return getResourceAsStream(resourceName, null);
+ }
- /**
- * Opens a resource of the specified name for reading.
- * @see #getResourceAsStream(String, ClassLoader)
- */
- public static InputStream getResourceAsStream(final String resourceName) throws IOException {
- return getResourceAsStream(resourceName, null);
- }
-
- /**
- * Opens a resource of the specified name for reading.
- * @see #getResourceUrl(String, ClassLoader)
- */
- public static InputStream getResourceAsStream(final String resourceName, final ClassLoader callingClass) throws IOException {
- final URL url = getResourceUrl(resourceName, callingClass);
- if (url != null) {
- return url.openStream();
- }
- return null;
- }
-
- /**
- * Opens a resource of the specified name for reading. Controls caching,
- * that is important when the same jar is reloaded using custom classloader.
- */
- public static InputStream getResourceAsStream(final String resourceName, final ClassLoader callingClass,
- final boolean useCache) throws IOException {
- final URL url = getResourceUrl(resourceName, callingClass);
- if (url != null) {
- final URLConnection urlConnection = url.openConnection();
- urlConnection.setUseCaches(useCache);
- return urlConnection.getInputStream();
- }
- return null;
- }
+ /**
+ * Opens a resource of the specified name for reading.
+ *
+ * @see #getResourceUrl(String, ClassLoader)
+ */
+ public static InputStream getResourceAsStream(final String resourceName, final ClassLoader callingClass) throws IOException {
+ final URL url = getResourceUrl(resourceName, callingClass);
+ if (url != null) {
+ return url.openStream();
+ }
+ return null;
+ }
}
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/util/SignUtils.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/util/SignUtils.java
index fff68ce28..7065d0638 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/util/SignUtils.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/util/SignUtils.java
@@ -6,8 +6,10 @@ import java.security.*;
import java.util.Base64;
import java.util.Random;
+/**
+* @author cloudx
+ */
public class SignUtils {
-
public static String sign(String string, PrivateKey privateKey) {
try {
Signature sign = Signature.getInstance("SHA256withRSA");
@@ -35,7 +37,7 @@ public class SignUtils {
* 生成随机字符串
*
* @param length 字符串长度
- * @return
+ * @return 随机字符串
*/
public static String genRandomStr(int length) {
String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";