orderInfo, O payOrder);
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java
index 1dc0c46..d4c52fa 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/bean/PayOrder.java
@@ -7,7 +7,7 @@ import java.util.Date;
* 支付订单信息
*
* @author egan
- *
+ *
* email egzosn@gmail.com
* date 2016/10/19 22:34
*
@@ -66,7 +66,7 @@ public class PayOrder {
private String wapName;
/**
* 用户唯一标识
- * 微信含 sub_openid 字段
+ * 微信含 sub_openid 字段
*/
private String openid;
/**
@@ -83,6 +83,21 @@ public class PayOrder {
private Date expirationTime;
+ public PayOrder() {
+ }
+
+
+ public PayOrder(String subject, String body, BigDecimal price, String outTradeNo) {
+ this(subject, body, price, outTradeNo, null);
+ }
+
+ public PayOrder(String subject, String body, BigDecimal price, String outTradeNo, TransactionType transactionType) {
+ this.subject = tryTrim(subject);
+ this.body = tryTrim(body);
+ this.price = price;
+ this.outTradeNo = tryTrim(outTradeNo);
+ this.transactionType = transactionType;
+ }
public CurType getCurType() {
@@ -127,13 +142,16 @@ public class PayOrder {
/**
* 支付平台订单号,交易号
- * @return 支付平台订单号,交易号
+ *
+ * @return 支付平台订单号, 交易号
*/
public String getTradeNo() {
return tradeNo;
}
+
/**
* 支付平台订单号,交易号
+ *
* @param tradeNo 支付平台订单号,交易号
*/
public void setTradeNo(String tradeNo) {
@@ -141,7 +159,8 @@ public class PayOrder {
}
/**
- * 获取商户订单号
+ * 获取商户订单号
+ *
* @return 商户订单号
*/
public String getOutTradeNo() {
@@ -150,7 +169,8 @@ public class PayOrder {
/**
* 设置商户订单号
- * @param outTradeNo 商户订单号
+ *
+ * @param outTradeNo 商户订单号
*/
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
@@ -196,24 +216,6 @@ public class PayOrder {
this.deviceInfo = deviceInfo;
}
- public PayOrder() {
- }
-
-
- public PayOrder(String subject, String body, BigDecimal price, String outTradeNo, TransactionType transactionType) {
- this.subject = subject;
- this.body = body;
- this.price = price;
- this.outTradeNo = outTradeNo;
- this.transactionType = transactionType;
- }
- public PayOrder(String subject, String body, BigDecimal price, String outTradeNo) {
- this.subject = subject;
- this.body = body;
- this.price = price;
- this.outTradeNo = outTradeNo;
- }
-
public String getWapUrl() {
return wapUrl;
}
@@ -246,6 +248,16 @@ public class PayOrder {
this.expirationTime = expirationTime;
}
+ /**
+ * 对 subject body 进行 trim 运算,
+ * 以防止在签名是可能造成的签名错误问题
+ * @param str
+ * @return
+ */
+ private static String tryTrim(String str) {
+ return str == null ? null : str.trim();
+ }
+
@Override
public String toString() {
return "PayOrder{" +
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpRequestTemplate.java b/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpRequestTemplate.java
index 025b03f..ceaf45b 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpRequestTemplate.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/http/HttpRequestTemplate.java
@@ -127,27 +127,27 @@ public class HttpRequestTemplate {
}
}
- //读取本机存放的PKCS12证书文件
+ //读取本机存放的PKCS12证书文件
try(InputStream instream = configStorage.getKeystoreInputStream()){
- //指定读取证书格式为PKCS12
- KeyStore keyStore = KeyStore.getInstance("PKCS12");
+ //指定读取证书格式为PKCS12
+ KeyStore keyStore = KeyStore.getInstance("PKCS12");
- char[] password = configStorage.getStorePassword().toCharArray();
- //指定PKCS12的密码
- keyStore.load(instream, password);
- // 实例化密钥库 & 初始化密钥工厂
- KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
- kmf.init(keyStore, password);
- // 创建 SSLContext
- SSLContext sslcontext = SSLContexts.custom()
- .loadKeyMaterial(keyStore, password).build();
+ char[] password = configStorage.getStorePassword().toCharArray();
+ //指定PKCS12的密码
+ keyStore.load(instream, password);
+ // 实例化密钥库 & 初始化密钥工厂
+ KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+ kmf.init(keyStore, password);
+ // 创建 SSLContext
+ SSLContext sslcontext = SSLContexts.custom()
+ .loadKeyMaterial(keyStore, password).build();
- //指定TLS版本
- sslsf = new SSLConnectionSocketFactory(
- sslcontext, new String[]{"TLSv1"}, null,
- new DefaultHostnameVerifier());
+ //指定TLS版本
+ sslsf = new SSLConnectionSocketFactory(
+ sslcontext, new String[]{"TLSv1"}, null,
+ new DefaultHostnameVerifier());
- return sslsf;
+ return sslsf;
} catch (IOException e) {
LOG.error(e);
} catch (GeneralSecurityException e) {
@@ -172,7 +172,7 @@ public class HttpRequestTemplate {
// 需要用户认证的代理服务器
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
- AuthScope.ANY,
+ AuthScope.ANY,
new UsernamePasswordCredentials(configStorage.getAuthUsername(), configStorage.getAuthPassword()));
@@ -352,9 +352,9 @@ public class HttpRequestTemplate {
}
httpRequest.setResponseType(responseType);
try (CloseableHttpResponse response = getHttpClient().execute(httpRequest)) {
- return httpRequest.handleResponse(response);
+ return httpRequest.handleResponse(response);
}catch (IOException e){
- throw new PayErrorException(new PayException("IOException", e.getLocalizedMessage()));
+ throw new PayErrorException(new PayException("IOException", e.getLocalizedMessage()));
}finally {
httpRequest.releaseConnection();
}
@@ -372,6 +372,6 @@ public class HttpRequestTemplate {
* @return 类型对象
*/
public T doExecute(String uri, Object request, Class responseType, MethodType method){
- return doExecute(URI.create(uri), request, responseType, method);
+ return doExecute(URI.create(uri), request, responseType, method);
}
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java
index 2410653..b61898b 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java
@@ -27,6 +27,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.nio.charset.Charset;
+import java.util.List;
import java.util.Map;
@@ -232,10 +233,11 @@ public class XML {
for (int idx = 0; idx < children.getLength(); ++idx) {
Node node = children.item(idx);
NodeList nodeList = node.getChildNodes();
- if (node.getNodeType() == Node.ELEMENT_NODE && nodeList.getLength() <= 1) {
- m.put(node.getNodeName(), node.getTextContent());
- } else if (node.getNodeType() == Node.ELEMENT_NODE && nodeList.getLength() > 1) {
+ int length = nodeList.getLength();
+ if (node.getNodeType() == Node.ELEMENT_NODE && length >= 1 && nodeList.item(0).hasChildNodes()) {
m.put(node.getNodeName(), getChildren(nodeList));
+ } else if (node.getNodeType() == Node.ELEMENT_NODE ) {
+ m.put(node.getNodeName(), node.getTextContent());
}
}
} catch (Exception e) {
@@ -323,13 +325,47 @@ public class XML {
value = "";
}
org.w3c.dom.Element filed = document.createElement(entry.getKey());
- if (value instanceof Map){
+ /* if (value instanceof Map){
+ map2Xml((Map)value, document, filed);
+ }else if (value instanceof List){
+ List vs = (List)value;
+ for (Object v : vs ){
+ if (value instanceof Map){
+ map2Xml((Map)value, document, filed);
+ }
+ }
map2Xml((Map)value, document, filed);
}else {
value = value.toString().trim();
filed.appendChild(document.createTextNode(value.toString()));
- }
+ }*/
+ object2Xml(value, document, filed);
element.appendChild(filed);
}
}
+
+ private static void object2Xml(Object value, Document document, org.w3c.dom.Element element){
+
+ if (value instanceof Map){
+ map2Xml((Map)value, document, element);
+ }else if (value instanceof List){
+ List vs = (List)value;
+ for (Object v : vs ){
+ object2Xml(v, document, element);
+ }
+// map2Xml((Map)value, document, element);
+ }else {
+ value = value.toString().trim();
+ element.appendChild(document.createTextNode(value.toString()));
+ }
+
+
+ }
+
+
+ public static void main(String[] args) {
+ String text = "01张三2张4";
+ System.out.println( getMap2Xml(toJSONObject(text), "data", "utf-8"));
+
+ }
}
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java
index 3d13bf5..ae31172 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/sign/SignUtils.java
@@ -1,6 +1,7 @@
package com.egzosn.pay.common.util.sign;
+import com.egzosn.pay.common.bean.SignType;
import com.egzosn.pay.common.bean.result.PayException;
import com.egzosn.pay.common.exception.PayErrorException;
import com.egzosn.pay.common.util.str.StringUtils;
@@ -22,7 +23,7 @@ import java.util.*;
* date 2016/11/9 17:45
*
*/
-public enum SignUtils {
+public enum SignUtils implements SignType {
MD5 {
/**
@@ -51,6 +52,11 @@ public enum SignUtils {
return com.egzosn.pay.common.util.sign.encrypt.MD5.verify(text, sign, key, characterEncoding);
}
},HMACSHA256{
+ @Override
+ public String getName() {
+ return "HMAC-SHA256";
+ }
+
/**
* 签名
*
@@ -279,6 +285,11 @@ public enum SignUtils {
return UUID.randomUUID().toString().replace("-", "");
}
+ @Override
+ public String getName() {
+ return this.name();
+ }
+
/**
* 签名
*
@@ -305,15 +316,6 @@ public enum SignUtils {
}
- /**
- * 签名
- *
- * @param content 需要签名的内容
- * @param key 密钥
- * @param characterEncoding 字符编码
- * @return 签名值
- */
- public abstract String createSign(String content, String key, String characterEncoding);
/**
* 签名字符串
@@ -330,16 +332,5 @@ public enum SignUtils {
}
- /**
- * 签名字符串
- *
- * @param text 需要签名的字符串
- * @param sign 签名结果
- * @param key 密钥
- * @param characterEncoding 编码格式
- * @return 签名结果
- */
- public abstract boolean verify(String text, String sign, String key, String characterEncoding);
-
}
diff --git a/pay-java-demo/pom.xml b/pay-java-demo/pom.xml
index 144cc7f..b196ab5 100644
--- a/pay-java-demo/pom.xml
+++ b/pay-java-demo/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.0.0
war
diff --git a/pay-java-fuiou/pom.xml b/pay-java-fuiou/pom.xml
index 15c9e85..a77d590 100644
--- a/pay-java-fuiou/pom.xml
+++ b/pay-java-fuiou/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.0.0
pay-java-fuiou
diff --git a/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java b/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java
index 2c67b2c..3b06ce2 100644
--- a/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java
+++ b/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java
@@ -9,6 +9,8 @@ import com.egzosn.pay.common.util.DateUtils;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.str.StringUtils;
+import com.egzosn.pay.fuiou.bean.FuiouTransactionType;
+
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.math.BigDecimal;
@@ -21,7 +23,7 @@ import java.util.*;
* create 2017 2017/1/16 0016
*
*/
-public class FuiouPayService extends BasePayService {
+public class FuiouPayService extends BasePayService {
/**
* 正式域名
@@ -134,7 +136,7 @@ public class FuiouPayService extends BasePayService params = new LinkedHashMap<>();
+ LinkedHashMap params = new LinkedHashMap(3);
params.put("mchnt_cd", payConfigStorage.getPid());
params.put("order_id", orderId);
params.put("md5", createSign(SignUtils.parameters2MD5Str(params, "|"), payConfigStorage.getInputCharset()));
@@ -153,6 +155,10 @@ public class FuiouPayService extends BasePayService orderInfo(PayOrder order) {
+ if (null == order.getTransactionType()){
+ order.setTransactionType(FuiouTransactionType.B2C);
+ }
+
Map parameters = getOrderInfo(order);
String sign = createSign(SignUtils.parameters2MD5Str(parameters, "|"), payConfigStorage.getInputCharset());
parameters.put("md5", sign);
@@ -165,6 +171,7 @@ public class FuiouPayService extends BasePayService getOrderInfo(PayOrder order) {
+
LinkedHashMap parameters = new LinkedHashMap();
//商户代码
parameters.put("mchnt_cd", payConfigStorage.getPid());
diff --git a/pay-java-payoneer/README.md b/pay-java-payoneer/README.md
index 40143db..06e14f3 100644
--- a/pay-java-payoneer/README.md
+++ b/pay-java-payoneer/README.md
@@ -102,7 +102,7 @@
```java
- Map result = service..query(null, "我方系统单号");
+ Map result = service.query(null, "我方系统单号");
```
diff --git a/pay-java-payoneer/pom.xml b/pay-java-payoneer/pom.xml
index e8a7e2e..6020570 100644
--- a/pay-java-payoneer/pom.xml
+++ b/pay-java-payoneer/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.0.0
pay-java-payoneer
diff --git a/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/AdvancedPayService.java b/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/AdvancedPayService.java
index 76c3a0e..bd04eff 100644
--- a/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/AdvancedPayService.java
+++ b/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/AdvancedPayService.java
@@ -16,7 +16,7 @@ import java.util.Map;
*
*/
-public interface AdvancedPayService extends PayService {
+public interface AdvancedPayService extends PayService {
/**
* 获取授权页面
* @param payeeId 用户id
diff --git a/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/PayoneerPayService.java b/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/PayoneerPayService.java
index f0f2de8..76afaba 100644
--- a/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/PayoneerPayService.java
+++ b/pay-java-payoneer/src/main/java/com/egzosn/pay/payoneer/api/PayoneerPayService.java
@@ -33,7 +33,7 @@ import java.util.*;
* create 2018-01-19
*
*/
-public class PayoneerPayService extends BasePayService implements AdvancedPayService {
+public class PayoneerPayService extends BasePayService implements AdvancedPayService {
/**
* 测试地址
*/
@@ -263,6 +263,8 @@ public class PayoneerPayService extends BasePayService microPay(PayOrder order) {
+ order.setTransactionType(PayoneerTransactionType.CHARGE);
+
HttpStringEntity entity = new HttpStringEntity(JSON.toJSONString(orderInfo(order)), ContentType.APPLICATION_JSON);
//设置 base atuh
entity.setHeaders(authHeader());
diff --git a/pay-java-paypal/pom.xml b/pay-java-paypal/pom.xml
index 3cdb33f..969573e 100644
--- a/pay-java-paypal/pom.xml
+++ b/pay-java-paypal/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.0.0
diff --git a/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalPayService.java b/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalPayService.java
index 6519c9d..e522814 100644
--- a/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalPayService.java
+++ b/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalPayService.java
@@ -29,7 +29,7 @@ import java.util.concurrent.locks.Lock;
* email egzosn@gmail.com
* date 2018-4-8 22:15:09
*/
-public class PayPalPayService extends BasePayService{
+public class PayPalPayService extends BasePayService{
/**
* 沙箱环境
@@ -146,6 +146,10 @@ public class PayPalPayService extends BasePayService orderInfo(PayOrder order) {
+ if (null == order.getTransactionType()){
+ order.setTransactionType(PayPalTransactionType.sale);
+ }
+
Amount amount = new Amount();
if (null == order.getCurType()){
order.setCurType(DefaultCurType.USD);
diff --git a/pay-java-union/README.md b/pay-java-union/README.md
index dad8d53..40951df 100644
--- a/pay-java-union/README.md
+++ b/pay-java-union/README.md
@@ -180,7 +180,7 @@
```java
- Map result = service..query(null, "我方系统单号");
+ Map result = service.query(null, "我方系统单号");
```
diff --git a/pay-java-union/pom.xml b/pay-java-union/pom.xml
index 6310983..b9ebdc1 100644
--- a/pay-java-union/pom.xml
+++ b/pay-java-union/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.0.0
diff --git a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java
index 0637aa1..93792d3 100644
--- a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java
+++ b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java
@@ -38,7 +38,7 @@ import java.util.*;
* create 2017 2017/11/5
*
*/
-public class UnionPayService extends BasePayService {
+public class UnionPayService extends BasePayService {
/**
* 测试域名
*/
@@ -379,6 +379,18 @@ public class UnionPayService extends BasePayService params = orderInfo(order);
String responseStr = getHttpRequestTemplate().postForObject(this.getBackTransUrl(), params, String.class);
Map response = UriVariables.getParametersToMap(responseStr);
@@ -411,6 +424,7 @@ public class UnionPayService extends BasePayService microPay(PayOrder order) {
+ order.setTransactionType(UnionTransactionType.CONSUME);
Map params = orderInfo(order);
String responseStr = getHttpRequestTemplate().postForObject(this.getBackTransUrl(), params, String.class);
return UriVariables.getParametersToMap(responseStr);
diff --git a/pay-java-wx-youdian/pom.xml b/pay-java-wx-youdian/pom.xml
index 610977d..c424d22 100644
--- a/pay-java-wx-youdian/pom.xml
+++ b/pay-java-wx-youdian/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.0.0
pay-java-wx-youdian
diff --git a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java
index 7134cfb..b108c5b 100644
--- a/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java
+++ b/pay-java-wx-youdian/src/main/java/com/egzosn/pay/wx/youdian/api/WxYouDianPayService.java
@@ -27,7 +27,7 @@ import java.util.concurrent.locks.Lock;
* email egzosn@gmail.com
* date 2017/01/12 22:58
*/
-public class WxYouDianPayService extends BasePayService {
+public class WxYouDianPayService extends BasePayService {
private final static String URL = "http://life.51youdian.com/Api/CheckoutCounter/";
@@ -336,6 +336,7 @@ public class WxYouDianPayService extends BasePayService microPay(PayOrder order) {
+ order.setTransactionType(YoudianTransactionType.MICROPAY);
JSONObject orderInfo = orderInfo(order);
return orderInfo;
}
diff --git a/pay-java-wx/README.md b/pay-java-wx/README.md
index d98f264..fa69395 100644
--- a/pay-java-wx/README.md
+++ b/pay-java-wx/README.md
@@ -194,7 +194,7 @@
```java
- Map result = service..query("微信单号", "我方系统单号");
+ Map result = service.query("微信单号", "我方系统单号");
```
diff --git a/pay-java-wx/pom.xml b/pay-java-wx/pom.xml
index bee89ca..484a61e 100644
--- a/pay-java-wx/pom.xml
+++ b/pay-java-wx/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.0.0
pay-java-wx
diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java
index 9368a2f..0940488 100644
--- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java
+++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java
@@ -31,12 +31,12 @@ import static com.egzosn.pay.wx.bean.WxTransferType.*;
* 微信支付服务
*
* @author egan
- *
+ *
* email egzosn@gmail.com
* date 2016-5-18 14:09:01
*
*/
-public class WxPayService extends BasePayService {
+public class WxPayService extends BasePayService {
/**
@@ -95,6 +95,7 @@ public class WxPayService extends BasePayService {
this.payConfigStorage = payConfigStorage;
return this;
}
+
/**
* 根据交易类型获取url
*
@@ -222,7 +223,7 @@ public class WxPayService extends BasePayService {
parameters.put("time_expire", DateUtils.formatDate(order.getExpirationTime(), DateUtils.YYYYMMDDHHMMSS));
}
((WxTransactionType) order.getTransactionType()).setAttribute(parameters, order);
- parameters = preOrderHandler(parameters, order);
+ parameters = preOrderHandler(parameters, order);
setSign(parameters);
String requestXML = XML.getMap2Xml(parameters);
@@ -275,7 +276,7 @@ public class WxPayService extends BasePayService {
params.put("noncestr", result.get(NONCE_STR));
params.put("package", "Sign=WXPay");
}
- params = preOrderHandler(params, order);
+ params = preOrderHandler(params, order);
String paySign = createSign(SignUtils.parameterText(params), payConfigStorage.getInputCharset());
params.put(SIGN, paySign);
return params;
@@ -291,11 +292,12 @@ public class WxPayService extends BasePayService {
* @return 请求参数
*/
private Map setSign(Map parameters) {
- String signType = payConfigStorage.getSignType();
- if (HMACSHA256.equals(signType)) {
- signType = HMAC_SHA256;
+
+ String signTypeStr = payConfigStorage.getSignType();
+ if (HMACSHA256.equals(signTypeStr)) {
+ signTypeStr = SignUtils.HMACSHA256.getName();
}
- parameters.put("sign_type", signType);
+ parameters.put("sign_type", signTypeStr);
String sign = createSign(SignUtils.parameterText(parameters, "&", SIGN, "appId"), payConfigStorage.getInputCharset());
parameters.put(SIGN, sign);
return parameters;
@@ -338,21 +340,22 @@ public class WxPayService extends BasePayService {
return createSign(content, characterEncoding, payConfigStorage.isTest());
}
+
/**
* 签名
*
* @param content 需要签名的内容 不包含key
* @param characterEncoding 字符编码
- * @param test 是否为沙箱环境
+ * @param test 是否为沙箱环境
* @return 签名结果
*/
public String createSign(String content, String characterEncoding, boolean test) {
- SignUtils signUtils = SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase());
+ SignType signType = SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase());
String keyPrivate = payConfigStorage.getKeyPrivate();
- if (test){
+ if (test) {
keyPrivate = getKeyPrivate();
}
- return signUtils.createSign(content + "&key=" + (signUtils == SignUtils.MD5 ? "" : keyPrivate), keyPrivate, characterEncoding).toUpperCase();
+ return signType.createSign(content + "&key=" + (signType == SignUtils.MD5 ? "" : keyPrivate), keyPrivate, characterEncoding).toUpperCase();
}
/**
@@ -426,14 +429,16 @@ public class WxPayService extends BasePayService {
* @return 返回二维码信息,,支付时需要的
*/
@Override
- public String getQrPay(PayOrder order){
+ public String getQrPay(PayOrder order) {
+ order.setTransactionType(WxTransactionType.NATIVE);
Map orderInfo = orderInfo(order);
//获取对应的支付账户操作工具(可根据账户id)
if (!SUCCESS.equals(orderInfo.get(RESULT_CODE))) {
- throw new PayErrorException(new WxPayError((String)orderInfo.get("err_code"), orderInfo.toString()));
+ throw new PayErrorException(new WxPayError((String) orderInfo.get("err_code"), orderInfo.toString()));
}
return (String) orderInfo.get("code_url");
}
+
/**
* 刷卡付,pos主动扫码付款
*
@@ -442,7 +447,12 @@ public class WxPayService extends BasePayService {
*/
@Override
public Map microPay(PayOrder order) {
+ if (null == order.getTransactionType()) {
+ order.setTransactionType(WxTransactionType.MICROPAY);
+ } else if (WxTransactionType.MICROPAY != order.getTransactionType() && WxTransactionType.FACEPAY != order.getTransactionType()) {
+ throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType()));
+ }
return orderInfo(order);
}
@@ -527,7 +537,7 @@ public class WxPayService extends BasePayService {
parameters.put("total_fee", Util.conversionCentAmount(refundOrder.getTotalAmount()));
parameters.put("refund_fee", Util.conversionCentAmount(refundOrder.getRefundAmount()));
parameters.put("op_user_id", payConfigStorage.getPid());
- setParameters(parameters, "notify_url", payConfigStorage.getNotifyUrl());
+ setParameters(parameters, "notify_url", payConfigStorage.getNotifyUrl());
//设置签名
setSign(parameters);
@@ -563,7 +573,7 @@ public class WxPayService extends BasePayService {
setParameters(parameters, "out_refund_no", refundOrder.getRefundNo());
//设置签名
setSign(parameters);
- return requestTemplate.postForObject(getReqUrl( WxTransactionType.REFUNDQUERY), XML.getMap2Xml(parameters) , JSONObject.class);
+ return requestTemplate.postForObject(getReqUrl(WxTransactionType.REFUNDQUERY), XML.getMap2Xml(parameters), JSONObject.class);
}
@@ -633,7 +643,7 @@ public class WxPayService extends BasePayService {
}
//设置签名
setSign(parameters);
- return requestTemplate.postForObject(getReqUrl(transactionType), XML.getMap2Xml(parameters) , JSONObject.class);
+ return requestTemplate.postForObject(getReqUrl(transactionType), XML.getMap2Xml(parameters), JSONObject.class);
}
/**
@@ -642,13 +652,13 @@ public class WxPayService extends BasePayService {
* @param order 转账订单
*
*
- * 注意事项:
- * ◆ 当返回错误码为“SYSTEMERROR”时,请不要更换商户订单号,一定要使用原商户订单号重试,否则可能造成重复支付等资金风险。
- * ◆ XML具有可扩展性,因此返回参数可能会有新增,而且顺序可能不完全遵循此文档规范,如果在解析回包的时候发生错误,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新回包字段,会更新到此API文档中。
- * ◆ 因为错误代码字段err_code的值后续可能会增加,所以商户如果遇到回包返回新的错误码,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新的错误码,会更新到此API文档中。
- * ◆ 错误代码描述字段err_code_des只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。
+ * 注意事项:
+ * ◆ 当返回错误码为“SYSTEMERROR”时,请不要更换商户订单号,一定要使用原商户订单号重试,否则可能造成重复支付等资金风险。
+ * ◆ XML具有可扩展性,因此返回参数可能会有新增,而且顺序可能不完全遵循此文档规范,如果在解析回包的时候发生错误,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新回包字段,会更新到此API文档中。
+ * ◆ 因为错误代码字段err_code的值后续可能会增加,所以商户如果遇到回包返回新的错误码,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新的错误码,会更新到此API文档中。
+ * ◆ 错误代码描述字段err_code_des只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。
*
- *
+ *
* @return 对应的转账结果
*/
@Override
@@ -672,7 +682,7 @@ public class WxPayService extends BasePayService {
}
parameters.put(SIGN, createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
- return getHttpRequestTemplate().postForObject(getReqUrl(order.getTransferType()), XML.getMap2Xml(parameters), JSONObject.class);
+ return getHttpRequestTemplate().postForObject(getReqUrl(order.getTransferType()), XML.getMap2Xml(parameters), JSONObject.class);
}
/**
@@ -740,11 +750,11 @@ public class WxPayService extends BasePayService {
throw new PayErrorException(new WxPayError(FAILURE, "微信转账类型 #transferQuery(String outNo, String wxTransferType) 必填,详情com.egzosn.pay.wx.bean.WxTransferType"));
}
//如果类型为余额方式
- if (TRANSFERS.getType().equals(wxTransferType) || GETTRANSFERINFO.getType().equals(wxTransferType)){
- return getHttpRequestTemplate().postForObject(getReqUrl(GETTRANSFERINFO), XML.getMap2Xml(parameters), JSONObject.class);
+ if (TRANSFERS.getType().equals(wxTransferType) || GETTRANSFERINFO.getType().equals(wxTransferType)) {
+ return getHttpRequestTemplate().postForObject(getReqUrl(GETTRANSFERINFO), XML.getMap2Xml(parameters), JSONObject.class);
}
//默认查询银行卡的记录
- return getHttpRequestTemplate().postForObject(getReqUrl(QUERY_BANK), XML.getMap2Xml(parameters), JSONObject.class);
+ return getHttpRequestTemplate().postForObject(getReqUrl(QUERY_BANK), XML.getMap2Xml(parameters), JSONObject.class);
}
diff --git a/pay-java-yiji/pom.xml b/pay-java-yiji/pom.xml
index 7ecd98b..63fb58e 100644
--- a/pay-java-yiji/pom.xml
+++ b/pay-java-yiji/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.0.0
diff --git a/pay-java-yiji/src/main/java/com/egzosn/pay/yiji/api/YiJiPayService.java b/pay-java-yiji/src/main/java/com/egzosn/pay/yiji/api/YiJiPayService.java
index 911c9a2..cece47f 100644
--- a/pay-java-yiji/src/main/java/com/egzosn/pay/yiji/api/YiJiPayService.java
+++ b/pay-java-yiji/src/main/java/com/egzosn/pay/yiji/api/YiJiPayService.java
@@ -27,7 +27,7 @@ import java.util.TreeMap;
* email egzosn@gmail.com
* * date 2019/04/15 22:51
*/
-public class YiJiPayService extends BasePayService {
+public class YiJiPayService extends BasePayService {
/**
* 正式测试环境
diff --git a/pom.xml b/pom.xml
index 775e767..979bbd9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.egzosn
pay-java-parent
pom
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
Pay Java - Parent
Pay Java Parent
@@ -58,7 +58,7 @@
- 2.12.9-SNAPSHOT
+ 2.13.1-SNAPSHOT
4.5.4
1.2.17
1.2.58
@@ -184,9 +184,9 @@
sign-artifacts
none
-
+