diff --git a/.gitignore b/.gitignore
index b40fb55..4ed83a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
# Compiled class file
*.class
@@ -22,3 +23,7 @@
.idea
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
+target/
+.idea/
+*.iml
+
diff --git a/pay-java-baidu/pom.xml b/pay-java-baidu/pom.xml
new file mode 100644
index 0000000..9713046
--- /dev/null
+++ b/pay-java-baidu/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ pay-java-parent
+ com.egzosn
+ 2.13.2-SNAPSHOT
+
+ 4.0.0
+ pay-java-baidu
+
+
+
+
+ com.egzosn
+ pay-java-common
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+
+
+
\ No newline at end of file
diff --git a/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/api/BaiduPayConfigStorage.java b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/api/BaiduPayConfigStorage.java
new file mode 100644
index 0000000..f1496e7
--- /dev/null
+++ b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/api/BaiduPayConfigStorage.java
@@ -0,0 +1,53 @@
+package com.egzosn.pay.baidu.api;
+
+import com.egzosn.pay.common.api.BasePayConfigStorage;
+
+public class BaiduPayConfigStorage extends BasePayConfigStorage {
+ private String appid;
+ private String dealId;
+
+ @Override
+ public String getAppid() {
+ return this.appid;
+ }
+
+ @Override
+ public String getPid() {
+ return getDealId();
+ }
+
+ @Override
+ public String getSeller() {
+ throw new UnsupportedOperationException("不支持");
+ }
+
+ public String getDealId() {
+ return dealId;
+ }
+
+ public void setDealId(String dealId) {
+ this.dealId = dealId;
+ }
+
+ public String getAppKey() {
+ return this.getKeyPrivate();
+ }
+
+ public void setAppKey(String appKey) {
+ setKeyPrivate(appKey);
+ }
+
+ @Override
+ public String getKeyPublic() {
+ return super.getKeyPrivate();
+ }
+
+ @Override
+ public void setKeyPublic(String keyPublic) {
+ super.setKeyPublic(keyPublic);
+ }
+
+ public void setAppid(String appid) {
+ this.appid = appid;
+ }
+}
diff --git a/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/api/BaiduPayService.java b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/api/BaiduPayService.java
new file mode 100644
index 0000000..2d66ff7
--- /dev/null
+++ b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/api/BaiduPayService.java
@@ -0,0 +1,491 @@
+package com.egzosn.pay.baidu.api;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.egzosn.pay.baidu.bean.BaiduPayOrder;
+import com.egzosn.pay.baidu.bean.BaiduRefundOrder;
+import com.egzosn.pay.baidu.bean.BaiduTransactionType;
+import com.egzosn.pay.baidu.bean.type.AuditStatus;
+import com.egzosn.pay.baidu.util.Asserts;
+import com.egzosn.pay.common.api.BasePayService;
+import com.egzosn.pay.common.bean.*;
+import com.egzosn.pay.common.http.HttpConfigStorage;
+import com.egzosn.pay.common.http.UriVariables;
+import com.egzosn.pay.common.util.DateUtils;
+import com.egzosn.pay.common.util.sign.SignUtils;
+import com.egzosn.pay.common.util.str.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class BaiduPayService extends BasePayService {
+ public static final String APP_KEY = "appKey";
+ public static final String APP_ID = "appId";
+ public static final String DEAL_ID = "dealId";
+ public static final String TP_ORDER_ID = "tpOrderId";
+ public static final String DEAL_TITLE = "dealTitle";
+ public static final String TOTAL_AMOUNT = "totalAmount";
+ public static final String SIGN_FIELDS_RANGE = "signFieldsRange";
+ public static final String BIZ_INFO = "bizInfo";
+ public static final String RSA_SIGN = "rsaSign";
+ public static final String ORDER_ID = "orderId";
+ public static final String USER_ID = "userId";
+ public static final String SITE_ID = "siteId";
+ public static final String SIGN = "sign";
+ public static final String METHOD = "method";
+ public static final String TYPE = "type";
+
+ public static final Integer RESPONSE_SUCCESS = 2;
+ public static final String RESPONSE_STATUS = "status";
+
+
+ public BaiduPayService(BaiduPayConfigStorage payConfigStorage) {
+ super(payConfigStorage);
+ }
+
+ public BaiduPayService(BaiduPayConfigStorage payConfigStorage,
+ HttpConfigStorage configStorage) {
+ super(payConfigStorage, configStorage);
+ }
+
+ /**
+ * 验证响应
+ *
+ * @param params 回调回来的参数集
+ * @return
+ */
+ @Override
+ public boolean verify(Map params) {
+ if (!RESPONSE_SUCCESS.equals(params.get(RESPONSE_STATUS))) {
+ return false;
+ }
+ return signVerify(params, String.valueOf(params.get(RSA_SIGN))) && verifySource(String.valueOf(params.get(TP_ORDER_ID)));
+ }
+
+ /**
+ * 验证签名
+ *
+ * @param params 参数集
+ * @param sign 签名原文
+ * @return
+ */
+ @Override
+ public boolean signVerify(Map params, String sign) {
+ String rsaSign = String.valueOf(params.get(RSA_SIGN));
+ String targetRsaSign = getRsaSign(params, RSA_SIGN);
+ LOG.debug("百度返回的签名: " + rsaSign + " 本地产生的签名: " + targetRsaSign);
+ return StringUtils.equals(rsaSign, targetRsaSign);
+ }
+
+ @Override
+ public boolean verifySource(String id) {
+ return true;
+ }
+
+ /**
+ * 返回创建的订单信息
+ *
+ * @param order 支付订单
+ * @return
+ */
+ @Override
+ public Map orderInfo(BaiduPayOrder order) {
+ Map params = getUseOrderInfoParams(order);
+ String rsaSign = getRsaSign(params, RSA_SIGN);
+ params.put(RSA_SIGN, rsaSign);
+ return params;
+ }
+
+ /**
+ * 获取"查询支付状态"所需参数
+ *
+ * @return
+ */
+ public Map getUseQueryPay() {
+ String appKey = payConfigStorage.getAppKey();
+ Map result = new HashMap<>();
+ result.put(APP_KEY, appKey);
+ result.put(APP_ID, payConfigStorage.getAppid());
+ return result;
+ }
+
+ /**
+ * 获取"创建订单"所需参数
+ *
+ * @param order
+ * @return
+ */
+ private Map getUseOrderInfoParams(PayOrder order) {
+ BaiduPayOrder payOrder = (BaiduPayOrder) order;
+ Map result = new HashMap<>();
+ String appKey = payConfigStorage.getAppKey();
+ String dealId = payConfigStorage.getDealId();
+ result.put(APP_KEY, appKey);
+ result.put(TP_ORDER_ID, payOrder.getTradeNo());
+ result.put(DEAL_ID, dealId);
+ result.put(DEAL_TITLE, payOrder.getSubject());
+ result.put(SIGN_FIELDS_RANGE, payOrder.getSignFieldsRange());
+ result.put(BIZ_INFO, JSON.toJSONString(payOrder.getBizInfo()));
+ result.put(TOTAL_AMOUNT, String.valueOf(order.getPrice()));
+
+ return result;
+ }
+
+ /**
+ * 获取输出消息,用户返回给支付端
+ *
+ * @param code 状态
+ * @param message 消息
+ * @return
+ */
+ @Override
+ @Deprecated
+ public PayOutMessage getPayOutMessage(String code, String message) {
+ throw new UnsupportedOperationException("请使用 " + getClass().getName() + "#getPayOutMessageUseBaidu");
+ }
+
+ /**
+ * 请求业务方退款审核/响应处理
+ * http://smartprogram.baidu.com/docs/develop/function/tune_up_examine/
+ *
+ * @param errno
+ * @param message
+ * @param auditStatus
+ * @param refundPayMoney
+ * @return
+ */
+ public PayOutMessage getApplyRefundOutMessageUseBaidu(Integer errno,
+ String message,
+ AuditStatus auditStatus,
+ BigDecimal refundPayMoney) {
+ JSONObject data = new JSONObject();
+ data.put("auditStatus", auditStatus.getCode());
+ JSONObject calculateRes = new JSONObject();
+ calculateRes.put("refundPayMoney", refundPayMoney);
+ data.put("calculateRes", calculateRes);
+ return PayOutMessage.JSON()
+ .content("errno", errno)
+ .content("message", message)
+ .content("data", data)
+ .build();
+
+ }
+
+ /**
+ * 通知退款状态/响应处理
+ * http://smartprogram.baidu.com/docs/develop/function/tune_up_drawback/
+ *
+ * @param errno
+ * @param message
+ * @return
+ */
+ public PayOutMessage getRefundOutMessageUseBaidu(Integer errno,
+ String message) {
+ return PayOutMessage.JSON()
+ .content("errno", errno)
+ .content("message", message)
+ .content("data", "{}")
+ .build();
+
+ }
+
+ /**
+ * 支付通知/响应处理
+ *
+ * @param errno
+ * @param message
+ * @param isConsumed
+ * @param isErrorOrder
+ * @return
+ */
+ public PayOutMessage getPayOutMessageUseBaidu(Integer errno,
+ String message,
+ Integer isConsumed,
+ Integer isErrorOrder) {
+ Asserts.isNoNull(errno, "errno 是必填的");
+ Asserts.isNoNull(message, "message 是必填的");
+ Asserts.isNoNull(isConsumed, "isConsumed 是必填的");
+ JSONObject data = new JSONObject();
+ data.put("isConsumed", isConsumed);
+ if (isErrorOrder != null) {
+ data.put("isErrorOrder", isErrorOrder);
+ }
+ return PayOutMessage.JSON()
+ .content("errno", errno)
+ .content("message", message)
+ .content("data", data)
+ .build();
+ }
+
+ /**
+ * 支付通知/响应处理
+ * http://smartprogram.baidu.com/docs/develop/function/tune_up_notice/
+ *
+ * @param code
+ * @param message
+ * @param isConsumed
+ * @return
+ */
+ public PayOutMessage getPayOutMessageUseBaidu(Integer code,
+ String message,
+ Integer isConsumed) {
+ return getPayOutMessageUseBaidu(code, message, isConsumed, null);
+ }
+
+ /**
+ * 支付通知/响应处理
+ * http://smartprogram.baidu.com/docs/develop/function/tune_up_notice/
+ *
+ * @param payMessage 支付回调消息
+ * @return
+ */
+ @Override
+ public PayOutMessage successPayOutMessage(PayMessage payMessage) {
+ return getPayOutMessageUseBaidu(0, "success", 2);
+ }
+
+ /**
+ * 获取输出消息,用户返回给支付端, 针对于web端
+ *
+ * @param orderInfo 发起支付的订单信息
+ * @param method 请求方式 "post" "get",
+ * @return
+ */
+ @Override
+ @Deprecated
+ public String buildRequest(Map orderInfo,
+ MethodType method) {
+ throw new UnsupportedOperationException("百度不支持PC支付");
+ }
+
+ /**
+ * 百度不支持扫码付
+ *
+ * @param order 发起支付的订单信息
+ * @return
+ */
+ @Override
+ @Deprecated
+ public String getQrPay(BaiduPayOrder order) {
+ throw new UnsupportedOperationException("百度不支持扫码付");
+ }
+
+ /**
+ * 百度不支持刷卡付
+ *
+ * @param order 发起支付的订单信息
+ * @return
+ */
+ @Override
+ @Deprecated
+ public Map microPay(BaiduPayOrder order) {
+ throw new UnsupportedOperationException("百度不支持刷卡付");
+ }
+
+ /**
+ * 查询订单
+ *
+ * @param tradeNo 支付平台订单号
+ * @param outTradeNo 商户单号
+ * @return
+ */
+ @Override
+ public Map query(String tradeNo, String outTradeNo) {
+ return secondaryInterface(tradeNo, outTradeNo, BaiduTransactionType.PAY_QUERY);
+ }
+
+ /**
+ * 百度不支持该操作
+ *
+ * @param tradeNo 支付平台订单号
+ * @param outTradeNo 商户单号
+ * @return
+ */
+ @Override
+ @Deprecated
+ public Map close(String tradeNo, String outTradeNo) {
+ throw new UnsupportedOperationException("不支持该操作");
+ }
+
+ /**
+ * 退款, 请使用 {@link com.egzosn.pay.baidu.api.BaiduPayService#refundUseBaidu}
+ *
+ * @param orderId
+ * @param userId
+ * @param refundAmount 退款金额
+ * @param totalAmount 总金额
+ * @return
+ */
+ @Override
+ @Deprecated
+ public Map refund(String orderId,
+ String userId,
+ BigDecimal refundAmount,
+ BigDecimal totalAmount) {
+ throw new UnsupportedOperationException("请使用 " + getClass().getName() + "#refundUseBaidu");
+ }
+
+ /**
+ * 退款
+ *
+ * @param orderId
+ * @param userId
+ * @param refundType
+ * @param tpOrderId
+ * @param refundReason
+ * @return
+ */
+ public Map refundUseBaidu(Long orderId,
+ Long userId,
+ Integer refundType,
+ String tpOrderId,
+ String refundReason) {
+ return refundUseBaidu(new BaiduRefundOrder(orderId, userId, refundType, refundReason, tpOrderId));
+ }
+
+ /**
+ * 退款, 请使用 {@link com.egzosn.pay.baidu.api.BaiduPayService#refundUseBaidu}
+ *
+ * @param refundOrder 退款订单信息
+ * @return
+ */
+ @Override
+ @Deprecated
+ public Map refund(RefundOrder refundOrder) {
+ throw new UnsupportedOperationException("请使用 " + getClass().getName() + "#refundUseBaidu");
+ }
+
+ /**
+ * 退款, 请使用 {@link com.egzosn.pay.baidu.api.BaiduPayService#refundUseBaidu}
+ *
+ * @param refundOrder
+ * @return
+ */
+ public Map refundUseBaidu(BaiduRefundOrder refundOrder) {
+ Map parameters = getUseQueryPay();
+ BaiduTransactionType transactionType = BaiduTransactionType.APPLY_REFUND;
+ parameters.put(METHOD, transactionType.getMethod());
+ parameters.put(ORDER_ID, refundOrder.getTradeNo());
+ parameters.put(USER_ID, refundOrder.getUserId());
+ parameters.put("refundType", refundOrder.getRefundType());
+ parameters.put("refundReason", String.valueOf(refundOrder.getRefundReason()));
+ parameters.put(TP_ORDER_ID, refundOrder.getTpOrderId());
+ parameters.put("applyRefundMoney", refundOrder.getApplyRefundMoney());
+ parameters.put("bizRefundBatchId", refundOrder.getBizRefundBatchId());
+ parameters.put(APP_KEY, payConfigStorage.getAppKey());
+ parameters.put(RSA_SIGN, getRsaSign(parameters, RSA_SIGN));
+ return requestTemplate.getForObject(String.format("%s?%s", getReqUrl(transactionType), UriVariables.getMapToParameters(parameters)), JSONObject.class);
+ }
+
+ /**
+ * 退费查询
+ *
+ * @param orderId 百度平台订单ID
+ * @param userId 百度用户ID
+ * @return
+ */
+ @Override
+ public Map refundquery(String orderId,
+ String userId) {
+ Map parameters = getUseQueryPay();
+ BaiduTransactionType transactionType = BaiduTransactionType.REFUND_QUERY;
+ parameters.put(METHOD, transactionType.getMethod());
+ parameters.put(TYPE, 3);
+ parameters.put(ORDER_ID, orderId);
+ parameters.put(USER_ID, userId);
+ parameters.put(APP_KEY, payConfigStorage.getAppKey());
+ parameters.put(RSA_SIGN, getRsaSign(parameters, RSA_SIGN));
+ return requestTemplate.getForObject(String.format("%s?%s", getReqUrl(transactionType), UriVariables.getMapToParameters(parameters)), JSONObject.class);
+ }
+
+ /**
+ * 退费查询
+ *
+ * @param refundOrder 退款订单单号信息
+ * @return
+ */
+ @Override
+ public Map refundquery(RefundOrder refundOrder) {
+ return refundquery(refundOrder.getTradeNo(), refundOrder.getOutTradeNo());
+ }
+
+ /**
+ * 下载资金账单
+ *
+ * @param billDate 账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM。
+ * @param access_token
+ * @return
+ */
+ @Override
+ public Map downloadbill(Date billDate, String access_token) {
+ Map parameters = new HashMap<>();
+ parameters.put("access_token", access_token);
+ parameters.put("billTime", DateUtils.formatDay(billDate));
+ return requestTemplate.getForObject(String.format("%s?%s", getReqUrl(BaiduTransactionType.DOWNLOAD_BILL),
+ UriVariables.getMapToParameters(parameters)), JSONObject.class);
+ }
+
+ /**
+ * 下载订单对账单
+ *
+ * @param billDate
+ * @param access_token
+ * @return
+ */
+ public Map downloadOrderBill(Date billDate, String access_token) {
+ Map parameters = new HashMap<>();
+ parameters.put("access_token", access_token);
+ parameters.put("billTime", DateUtils.formatDay(billDate));
+ return requestTemplate.getForObject(String.format("%s?%s", getReqUrl(BaiduTransactionType.DOWNLOAD_ORDER_BILL),
+ UriVariables.getMapToParameters(parameters)), JSONObject.class);
+ }
+
+ /**
+ * 通用查询接口
+ *
+ * @param orderId
+ * @param siteId
+ * @param transactionType 交易类型
+ * @return
+ */
+ @Override
+ public Map secondaryInterface(Object orderId,
+ String siteId,
+ TransactionType transactionType) {
+ if (!BaiduTransactionType.PAY_QUERY.equals(transactionType)) {
+ throw new UnsupportedOperationException("不支持该操作");
+ }
+
+ Map parameters = getUseQueryPay();
+ parameters.put(ORDER_ID, orderId);
+ parameters.put(SITE_ID, siteId);
+ parameters.put(SIGN, getRsaSign(parameters, SIGN));
+ return requestTemplate.getForObject(String.format("%s?%s", getReqUrl(transactionType), UriVariables.getMapToParameters(parameters)), JSONObject.class);
+ }
+
+ /**
+ * 获取支付请求地址
+ *
+ * @param transactionType 交易类型
+ * @return
+ */
+ @Override
+ public String getReqUrl(TransactionType transactionType) {
+ return ((BaiduTransactionType) transactionType).getUrl();
+ }
+
+ /**
+ * 签名
+ *
+ * @param params
+ * @param ignoreKeys
+ * @return
+ */
+ private String getRsaSign(Map params, String... ignoreKeys) {
+ String waitSignVal = SignUtils.parameterText(params, "&", false, ignoreKeys);
+ return SignUtils.RSA.createSign(waitSignVal, payConfigStorage.getKeyPrivate(), "UTF-8");
+ }
+}
diff --git a/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduPayOrder.java b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduPayOrder.java
new file mode 100644
index 0000000..58e5417
--- /dev/null
+++ b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduPayOrder.java
@@ -0,0 +1,71 @@
+package com.egzosn.pay.baidu.bean;
+
+import com.alibaba.fastjson.JSONObject;
+import com.egzosn.pay.common.bean.PayOrder;
+import com.egzosn.pay.common.bean.TransactionType;
+
+import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.List;
+
+public class BaiduPayOrder extends PayOrder {
+
+ /**
+ * 需要隐藏的支付方式
+ */
+ private List bannedChannels = Collections.emptyList();
+
+ /**
+ * 固定值
+ */
+ private String signFieldsRange;
+
+ /**
+ * 附加信息
+ */
+ private JSONObject bizInfo = new JSONObject();
+
+ public BaiduPayOrder(String dealTitle,
+ BigDecimal totalAmount,
+ String tpOrderId,
+ String signFieldsRange) {
+ this(dealTitle, totalAmount, tpOrderId, signFieldsRange, Collections.emptyList());
+ }
+
+ public BaiduPayOrder(String dealTitle,
+ BigDecimal totalAmount,
+ String tpOrderId,
+ String signFieldsRange,
+ List bannedChannels) {
+ setPrice(totalAmount);
+ setOutTradeNo(tpOrderId);
+ setSubject(dealTitle);
+ setSignFieldsRange(signFieldsRange);
+ setBannedChannels(bannedChannels);
+ }
+
+ public JSONObject getBizInfo() {
+ return bizInfo;
+ }
+
+ public void setBizInfo(JSONObject bizInfo) {
+ this.bizInfo = bizInfo;
+ }
+
+ public List getBannedChannels() {
+ return bannedChannels;
+ }
+
+ public void setBannedChannels(List bannedChannels) {
+ this.bannedChannels = bannedChannels;
+ }
+
+ public String getSignFieldsRange() {
+ return signFieldsRange;
+ }
+
+ public void setSignFieldsRange(String signFieldsRange) {
+ this.signFieldsRange = signFieldsRange;
+ }
+
+}
diff --git a/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduRefundOrder.java b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduRefundOrder.java
new file mode 100644
index 0000000..6386be8
--- /dev/null
+++ b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduRefundOrder.java
@@ -0,0 +1,77 @@
+package com.egzosn.pay.baidu.bean;
+
+import com.egzosn.pay.common.bean.RefundOrder;
+
+import java.math.BigDecimal;
+
+public class BaiduRefundOrder extends RefundOrder {
+ /**
+ * 平台用户ID
+ */
+ private Long userId;
+ /**
+ * 退款类型
+ */
+ private Integer refundType;
+ /**
+ * 退款原因
+ */
+ private String refundReason;
+ /**
+ * 平台订单ID
+ */
+ private String tpOrderId;
+ /**
+ * 退款金额,单位:分,发起部分退款时必传
+ */
+ private BigDecimal applyRefundMoney;
+ /**
+ * 业务方退款批次id,退款业务流水唯一编号,发起部分退款时必传
+ */
+ private String bizRefundBatchId;
+
+ public BaiduRefundOrder(Long orderId,
+ Long userId,
+ Integer refundType,
+ String refundReason,
+ String tpOrderId) {
+ super();
+ setTradeNo(String.valueOf(orderId));
+ this.userId = userId;
+ this.refundType = refundType;
+ this.refundReason = refundReason;
+ this.tpOrderId = tpOrderId;
+ }
+
+ public BigDecimal getApplyRefundMoney() {
+ return applyRefundMoney;
+ }
+
+ public void setApplyRefundMoney(BigDecimal applyRefundMoney) {
+ setRefundAmount(applyRefundMoney);
+ }
+
+ public String getBizRefundBatchId() {
+ return bizRefundBatchId;
+ }
+
+ public void setBizRefundBatchId(String bizRefundBatchId) {
+ this.bizRefundBatchId = bizRefundBatchId;
+ }
+
+ public Long getUserId() {
+ return userId;
+ }
+
+ public Integer getRefundType() {
+ return refundType;
+ }
+
+ public String getRefundReason() {
+ return refundReason;
+ }
+
+ public String getTpOrderId() {
+ return tpOrderId;
+ }
+}
diff --git a/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduTransactionType.java b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduTransactionType.java
new file mode 100644
index 0000000..7a0cefe
--- /dev/null
+++ b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/BaiduTransactionType.java
@@ -0,0 +1,47 @@
+package com.egzosn.pay.baidu.bean;
+
+import com.egzosn.pay.common.bean.TransactionType;
+
+public enum BaiduTransactionType implements TransactionType {
+ /**
+ * 查询支付状态
+ */
+ PAY_QUERY("https://dianshang.baidu.com/platform/entity/openapi/queryorderdetail", null),
+ /**
+ * 取消核销
+ */
+ REFUND_QUERY("https://nop.nuomi.com/nop/server/rest", "nuomi.cashier.syncorderstatus"),
+ /**
+ * 下载资金账单
+ */
+ DOWNLOAD_BILL("https://openapi.baidu.com/rest/2.0/smartapp/pay/paymentservice/capitaBill", null),
+ /**
+ * 下载订单对账单
+ */
+ DOWNLOAD_ORDER_BILL("https://openapi.baidu.com/rest/2.0/smartapp/pay/paymentservice/orderBill", null),
+ /**
+ * 申请退款
+ */
+ APPLY_REFUND("https://nop.nuomi.com/nop/server/rest", "nuomi.cashier.applyorderrefund");
+ private final String method;
+ private final String url;
+
+ BaiduTransactionType( String url, String method) {
+ this.url = url;
+ this.method = method;
+ }
+
+ @Override
+ public String getType() {
+ return this.name();
+ }
+
+ @Override
+ public String getMethod() {
+ return this.method;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+}
diff --git a/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/type/AuditStatus.java b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/type/AuditStatus.java
new file mode 100644
index 0000000..22960bf
--- /dev/null
+++ b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/bean/type/AuditStatus.java
@@ -0,0 +1,22 @@
+package com.egzosn.pay.baidu.bean.type;
+
+public enum AuditStatus {
+ SUCCESS(1, "审核通过可退款"),
+ FAIL(2, "审核不通过,不能退款"),
+ UNKNOWN(3, "审核结果不确定,待重试");
+ private final int code;
+ private final String desc;
+
+ AuditStatus(int code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+}
diff --git a/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/package-info.java b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/package-info.java
new file mode 100644
index 0000000..e9370e2
--- /dev/null
+++ b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/package-info.java
@@ -0,0 +1 @@
+package com.egzosn.pay.baidu;
\ No newline at end of file
diff --git a/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/util/Asserts.java b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/util/Asserts.java
new file mode 100644
index 0000000..7c94996
--- /dev/null
+++ b/pay-java-baidu/src/main/java/com/egzosn/pay/baidu/util/Asserts.java
@@ -0,0 +1,16 @@
+package com.egzosn.pay.baidu.util;
+
+public class Asserts {
+
+ public static void isNoNull(Object object, String message) {
+ if (object == null) {
+ throw new IllegalArgumentException(message);
+ }
+ }
+
+ public static void isTrue(boolean bool, String message) {
+ if (!bool) {
+ throw new IllegalArgumentException(message);
+ }
+ }
+}
diff --git a/pay-java-baidu/src/test/java/com/egzosn/pay/baidu/api/BaiduPayServiceTest.java b/pay-java-baidu/src/test/java/com/egzosn/pay/baidu/api/BaiduPayServiceTest.java
new file mode 100644
index 0000000..6f9b5c2
--- /dev/null
+++ b/pay-java-baidu/src/test/java/com/egzosn/pay/baidu/api/BaiduPayServiceTest.java
@@ -0,0 +1,24 @@
+package com.egzosn.pay.baidu.api;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Created by hocgin on 2019/11/24.
+ * email: hocgin@gmail.com
+ *
+ * @author hocgin
+ */
+public class BaiduPayServiceTest {
+
+ @Test
+ public void orderInfo() {
+ BaiduPayConfigStorage configStorage = new BaiduPayConfigStorage();
+ configStorage.setAppid("APP ID");
+ configStorage.setAppKey("APP KEY");
+ configStorage.setDealId("DEAL ID");
+ configStorage.setKeyPublic("KEY PUBLIC");
+
+ BaiduPayService payService = new BaiduPayService(configStorage);
+ // payService.refund()
+ }
+}
diff --git a/pay-java-common/pom.xml b/pay-java-common/pom.xml
index 0c6cdfc..9a0d533 100644
--- a/pay-java-common/pom.xml
+++ b/pay-java-common/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.13.1
+ 2.13.2-SNAPSHOT
4.0.0
jar
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 ae31172..74ade5f 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
@@ -193,7 +193,20 @@ public enum SignUtils implements SignType {
* @param ignoreKey 需要忽略添加的key
* @return 去掉空值与签名参数后的新签名,拼接后字符串
*/
- public static String parameterText(Map parameters, String separator, String... ignoreKey ) {
+ public static String parameterText(Map parameters, String separator, String... ignoreKey) {
+ return parameterText(parameters, separator, true, ignoreKey);
+ }
+
+ /**
+ *
+ * 把数组所有元素排序,并按照“参数=参数值”的模式用“@param separator”字符拼接成字符串
+ * @param parameters 参数
+ * @param separator 分隔符
+ * @param ignoreNullValue 需要忽略NULL值
+ * @param ignoreKey 需要忽略添加的key
+ * @return 去掉空值与签名参数后的新签名,拼接后字符串
+ */
+ public static String parameterText(Map parameters, String separator, boolean ignoreNullValue, String... ignoreKey ) {
if(parameters == null){
return "";
}
@@ -225,7 +238,7 @@ public enum SignUtils implements SignType {
for (String k : keys) {
String valueStr = "";
Object o = parameters.get(k);
- if (null == o) {
+ if (ignoreNullValue && null == o) {
continue;
}
if (o instanceof String[]) {
diff --git a/pom.xml b/pom.xml
index cb8f1ba..b426986 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,7 @@
pay-java-payoneer
pay-java-paypal
pay-java-yiji
+ pay-java-baidu
pay-java-demo
@@ -63,6 +64,7 @@
1.2.17
1.2.58
3.3.1
+ 5.5.1
@@ -104,6 +106,12 @@
${zxing.version}
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.version}
+
+