支付与回调保存支付记录 修改财务单状态
This commit is contained in:
parent
70872cbb1f
commit
04b8c0637c
|
|
@ -1,18 +1,20 @@
|
||||||
package com.ghy.web.controller.pay;
|
package com.ghy.web.controller.pay;
|
||||||
|
|
||||||
import com.ghy.common.adapay.AdapayService;
|
import com.ghy.common.adapay.AdapayService;
|
||||||
import com.ghy.common.adapay.callback.PayCallback;
|
|
||||||
import com.ghy.common.adapay.model.PayParam;
|
import com.ghy.common.adapay.model.PayParam;
|
||||||
import com.ghy.common.core.controller.BaseController;
|
import com.ghy.common.core.controller.BaseController;
|
||||||
import com.ghy.common.core.domain.AjaxResult;
|
import com.ghy.common.core.domain.AjaxResult;
|
||||||
import com.ghy.order.domain.OrderMaster;
|
import com.ghy.order.domain.OrderMaster;
|
||||||
import com.ghy.order.service.OrderMasterService;
|
import com.ghy.order.service.OrderMasterService;
|
||||||
|
import com.ghy.payment.domain.FinancialMaster;
|
||||||
|
import com.ghy.payment.service.FinancialMasterService;
|
||||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -24,31 +26,32 @@ import java.util.Map;
|
||||||
@RequestMapping("pay/ali")
|
@RequestMapping("pay/ali")
|
||||||
public class AlipayController extends BaseController {
|
public class AlipayController extends BaseController {
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PayCallback payCallback;
|
|
||||||
@Resource
|
@Resource
|
||||||
private AdapayService adapayService;
|
private AdapayService adapayService;
|
||||||
@Resource
|
@Resource
|
||||||
private OrderMasterService orderMasterService;
|
private OrderMasterService orderMasterService;
|
||||||
|
@Resource
|
||||||
|
private FinancialMasterService financialMasterService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付宝正扫支付
|
* 支付宝正扫支付
|
||||||
*/
|
*/
|
||||||
@PostMapping("qr")
|
@PostMapping("qr")
|
||||||
public AjaxResult qrPay(String orderMasterCode) {
|
public AjaxResult qrPay(Long orderMasterId) {
|
||||||
OrderMaster orderMaster = orderMasterService.selectByCode(orderMasterCode);
|
OrderMaster om = orderMasterService.selectById(orderMasterId);
|
||||||
if (orderMaster == null) {
|
FinancialMaster fm = financialMasterService.selectByOrderMasterId(orderMasterId);
|
||||||
|
if (om == null || fm == null) {
|
||||||
return AjaxResult.error("订单不存在");
|
return AjaxResult.error("订单不存在");
|
||||||
}
|
}
|
||||||
Map<String, Object> map;
|
Map<String, Object> map;
|
||||||
|
String payMoney = fm.getPayMoney().setScale(2, BigDecimal.ROUND_UNNECESSARY).toString();
|
||||||
|
// TODO 这里需要补充商品标题和商品描述信息
|
||||||
|
PayParam payParam = PayParam.createDelayPay(om.getCode(), payMoney, "商品标题", "商品描述信息");
|
||||||
try {
|
try {
|
||||||
// TODO 订单里需要补充支付金额、tittle、简要描述、分账信息、description
|
map = adapayService.alipayQrPay(om.getDeptId(), payParam, null, null, null);
|
||||||
PayParam payParam = new PayParam(orderMaster.getCode(),
|
|
||||||
"orderMaster.get支付金额", "orderMaster.getTittle()", "orderMaster.get商品描述信息");
|
|
||||||
map = adapayService.alipayQrPay(orderMaster.getDeptId(), payParam, payCallback, null, null, null);
|
|
||||||
} catch (BaseAdaPayException e) {
|
} catch (BaseAdaPayException e) {
|
||||||
logger.error("获取微信用户信息失败", e);
|
logger.error("创建支付失败", e);
|
||||||
return AjaxResult.error();
|
return AjaxResult.error("网络不佳 请稍后再试");
|
||||||
}
|
}
|
||||||
return AjaxResult.success(map);
|
return AjaxResult.success(map);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,12 @@
|
||||||
package com.ghy.web.controller.pay;
|
package com.ghy.web.controller.pay;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.ghy.common.adapay.AdapayService;
|
import com.ghy.common.adapay.AdapayService;
|
||||||
import com.ghy.common.adapay.callback.PayCallback;
|
|
||||||
import com.ghy.common.adapay.model.PayParam;
|
import com.ghy.common.adapay.model.PayParam;
|
||||||
import com.ghy.common.adapay.model.WxpayExpend;
|
import com.ghy.common.adapay.model.WxpayExpend;
|
||||||
import com.ghy.common.config.WxConfig;
|
import com.ghy.common.config.WxConfig;
|
||||||
import com.ghy.common.core.controller.BaseController;
|
import com.ghy.common.core.controller.BaseController;
|
||||||
import com.ghy.common.core.domain.AjaxResult;
|
import com.ghy.common.core.domain.AjaxResult;
|
||||||
import com.ghy.common.utils.ExceptionUtil;
|
import com.ghy.common.utils.ExceptionUtil;
|
||||||
import com.ghy.common.utils.WxUtils;
|
|
||||||
import com.ghy.order.domain.OrderMaster;
|
import com.ghy.order.domain.OrderMaster;
|
||||||
import com.ghy.order.service.OrderMasterService;
|
import com.ghy.order.service.OrderMasterService;
|
||||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
|
|
@ -33,8 +30,6 @@ public class WxPayController extends BaseController {
|
||||||
private AdapayService adapayService;
|
private AdapayService adapayService;
|
||||||
@Resource
|
@Resource
|
||||||
private OrderMasterService orderMasterService;
|
private OrderMasterService orderMasterService;
|
||||||
@Resource
|
|
||||||
private PayCallback payCallback;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信小程序支付
|
* 微信小程序支付
|
||||||
|
|
@ -56,7 +51,7 @@ public class WxPayController extends BaseController {
|
||||||
// TODO 订单里需要补充支付金额、tittle、简要描述、分账信息、description
|
// TODO 订单里需要补充支付金额、tittle、简要描述、分账信息、description
|
||||||
PayParam payParam = new PayParam(orderMaster.getCode(),
|
PayParam payParam = new PayParam(orderMaster.getCode(),
|
||||||
"0.01", "工圈子测试", "工圈子测试描述");
|
"0.01", "工圈子测试", "工圈子测试描述");
|
||||||
map = adapayService.wxLitePay(orderMaster.getDeptId(), payParam, payCallback, expend, null, null);
|
map = adapayService.wxLitePay(orderMaster.getDeptId(), payParam, expend, null, null);
|
||||||
} catch (BaseAdaPayException e) {
|
} catch (BaseAdaPayException e) {
|
||||||
logger.error("获取微信用户信息失败", e);
|
logger.error("获取微信用户信息失败", e);
|
||||||
return AjaxResult.error();
|
return AjaxResult.error();
|
||||||
|
|
@ -88,7 +83,7 @@ public class WxPayController extends BaseController {
|
||||||
expend.setOpenId(openId);
|
expend.setOpenId(openId);
|
||||||
Map<String, Object> map;
|
Map<String, Object> map;
|
||||||
PayParam payParam = new PayParam(orderMaster.getCode(), "0.01", "工圈子测试", "工圈子测试描述");
|
PayParam payParam = new PayParam(orderMaster.getCode(), "0.01", "工圈子测试", "工圈子测试描述");
|
||||||
map = adapayService.wxPubPay(orderMaster.getDeptId(), payParam, payCallback, expend, null, null);
|
map = adapayService.wxPubPay(orderMaster.getDeptId(), payParam, expend, null, null);
|
||||||
return AjaxResult.success(map);
|
return AjaxResult.success(map);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
||||||
package com.ghy.web.core;
|
|
||||||
|
|
||||||
import com.ghy.common.adapay.callback.PayCallback;
|
|
||||||
import com.ghy.common.adapay.model.AdapayStatusEnum;
|
|
||||||
import com.ghy.common.adapay.model.PayReply;
|
|
||||||
import com.ghy.order.service.OrderMasterService;
|
|
||||||
import com.ghy.payment.service.FinancialMasterService;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户支付后
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class AfterPay {
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(AfterPay.class);
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
FinancialMasterService financialMasterService;
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public PayCallback payCallback() {
|
|
||||||
return new PayCallback() {
|
|
||||||
@Override
|
|
||||||
public void onReply(PayReply reply) {
|
|
||||||
if (AdapayStatusEnum.succeeded.code.equals(reply.getStatus())) {
|
|
||||||
// TODO 保存支付结果到 adapay_callback_log 表
|
|
||||||
|
|
||||||
// 修改财务单状态为支付成功
|
|
||||||
financialMasterService.paySucceeded(reply.getOrderNo(), reply.getPayChannel());
|
|
||||||
} else {
|
|
||||||
logger.warn("支付失败:{}", reply);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.ghy.web.core.adapay;
|
||||||
|
|
||||||
|
import com.ghy.common.adapay.callback.IDrawCashCallback;
|
||||||
|
import com.ghy.common.adapay.model.DrawCashReply;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理提现结果
|
||||||
|
*
|
||||||
|
* @author HH 2022/5/27
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class DrawCashCallback implements IDrawCashCallback {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(DrawCashCallback.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCallback(DrawCashReply reply) {
|
||||||
|
logger.info("提现结果:{}", reply);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package com.ghy.web.core;
|
package com.ghy.web.core.adapay;
|
||||||
|
|
||||||
import com.ghy.common.adapay.AdapayConfig;
|
import com.ghy.common.adapay.AdapayConfig;
|
||||||
import com.ghy.common.adapay.AdapayProperties;
|
import com.ghy.common.adapay.AdapayProperties;
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
package com.ghy.web.core.adapay;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.ghy.common.adapay.callback.IPayCallback;
|
||||||
|
import com.ghy.common.adapay.model.AdapayStatusEnum;
|
||||||
|
import com.ghy.common.adapay.model.PayReply;
|
||||||
|
import com.ghy.common.adapay.model.PaymentDTO;
|
||||||
|
import com.ghy.payment.domain.FinancialMaster;
|
||||||
|
import com.ghy.payment.service.FinancialMasterService;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理支付结果
|
||||||
|
*
|
||||||
|
* @author HH 2022/5/27
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class PayCallback implements IPayCallback {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(PayCallback.class);
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
FinancialMasterService financialMasterService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCallback(PayReply reply) {
|
||||||
|
// 更新交易记录
|
||||||
|
PaymentDTO payment = new PaymentDTO();
|
||||||
|
payment.setId(reply.getId());
|
||||||
|
payment.setStatus(reply.getStatus());
|
||||||
|
payment.setPayTime(reply.getPayTime());
|
||||||
|
financialMasterService.updatePayment(payment);
|
||||||
|
|
||||||
|
if (AdapayStatusEnum.succeeded.code.equals(reply.getStatus())) {
|
||||||
|
// 修改主财务单状态
|
||||||
|
financialMasterService.paySucceeded(reply.getOrderNo(), reply.getPayChannel());
|
||||||
|
} else {
|
||||||
|
logger.warn("支付失败 : {}", reply);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(JSONObject response) {
|
||||||
|
// 保存一条支付记录
|
||||||
|
PaymentDTO payment = response.toJavaObject(PaymentDTO.class);
|
||||||
|
payment.setStatus("pending");
|
||||||
|
financialMasterService.insertPayment(payment);
|
||||||
|
|
||||||
|
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) {
|
||||||
|
FinancialMaster update = new FinancialMaster();
|
||||||
|
update.setId(response.getLong("order_no"));
|
||||||
|
update.setPaymentId(response.getString("id"));
|
||||||
|
financialMasterService.updateFinancialMaster(update);
|
||||||
|
} else {
|
||||||
|
logger.warn("请求支付失败 : {}", response.toJSONString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.ghy.web.core.adapay;
|
||||||
|
|
||||||
|
import com.ghy.common.adapay.callback.IRefundCallback;
|
||||||
|
import com.ghy.common.adapay.model.RefundReply;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理退款结果
|
||||||
|
*
|
||||||
|
* @author HH 2022/5/27
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class RefundCallback implements IRefundCallback {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(RefundCallback.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCallback(RefundReply reply) {
|
||||||
|
logger.info("退款结果:{}", reply);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package com.ghy.common.adapay;
|
package com.ghy.common.adapay;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.ghy.common.adapay.callback.DrawCashCallback;
|
import com.ghy.common.adapay.callback.IDrawCashCallback;
|
||||||
import com.ghy.common.adapay.callback.PayCallback;
|
import com.ghy.common.adapay.callback.IPayCallback;
|
||||||
import com.ghy.common.adapay.callback.RefundCallback;
|
import com.ghy.common.adapay.callback.IRefundCallback;
|
||||||
import com.ghy.common.adapay.callback.mapping.DrawCashReplyMapping;
|
import com.ghy.common.adapay.callback.mapping.DrawCashReplyMapping;
|
||||||
import com.ghy.common.adapay.callback.mapping.PayReplyMapping;
|
import com.ghy.common.adapay.callback.mapping.PayReplyMapping;
|
||||||
import com.ghy.common.adapay.callback.mapping.RefundReplyMapping;
|
import com.ghy.common.adapay.callback.mapping.RefundReplyMapping;
|
||||||
|
|
@ -20,9 +20,7 @@ import org.springframework.util.CollectionUtils;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author HH 2022/3/25
|
* @author HH 2022/3/25
|
||||||
|
|
@ -32,6 +30,12 @@ public class AdapayService {
|
||||||
|
|
||||||
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
|
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IPayCallback payCallback;
|
||||||
|
@Resource
|
||||||
|
private IDrawCashCallback drawCashCallback;
|
||||||
|
@Resource
|
||||||
|
private IRefundCallback refundCallback;
|
||||||
@Resource
|
@Resource
|
||||||
private AdapayProperties adapayProperties;
|
private AdapayProperties adapayProperties;
|
||||||
|
|
||||||
|
|
@ -46,7 +50,7 @@ public class AdapayService {
|
||||||
* @param confirmAmt [必填] String(14) 确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额
|
* @param confirmAmt [必填] String(14) 确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额
|
||||||
* @return 成功时同步返回一个包含 支付确认对象的JSON https://docs.adapay.tech/api/trade.html#id54
|
* @return 成功时同步返回一个包含 支付确认对象的JSON https://docs.adapay.tech/api/trade.html#id54
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> paymentConfirm(@NotNull Long deptId, @NotNull String paymentId, @NotNull String orderNo, @NotNull String confirmAmt) throws BaseAdaPayException {
|
public JSONObject paymentConfirm(@NotNull Long deptId, @NotNull String paymentId, @NotNull String orderNo, @NotNull String confirmAmt) throws BaseAdaPayException {
|
||||||
return paymentConfirm(deptId, paymentId, orderNo, confirmAmt, null, null, null);
|
return paymentConfirm(deptId, paymentId, orderNo, confirmAmt, null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -64,17 +68,17 @@ public class AdapayService {
|
||||||
* @param description String(128) 附加说明
|
* @param description String(128) 附加说明
|
||||||
* @return 成功时同步返回一个包含 支付确认对象的JSON https://docs.adapay.tech/api/trade.html#id54
|
* @return 成功时同步返回一个包含 支付确认对象的JSON https://docs.adapay.tech/api/trade.html#id54
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> paymentConfirm(@NotNull Long deptId, @NotNull String paymentId, @NotNull String orderNo,
|
public JSONObject paymentConfirm(@NotNull Long deptId, @NotNull String paymentId, @NotNull String orderNo,
|
||||||
@NotNull String confirmAmt, List<DivMember> divMembers,
|
@NotNull String confirmAmt, List<DivMember> divMembers,
|
||||||
String feeMode, String description) throws BaseAdaPayException {
|
String feeMode, String description) throws BaseAdaPayException {
|
||||||
Map<String, Object> confirmParams = new HashMap<>();
|
JSONObject confirmParams = new JSONObject();
|
||||||
confirmParams.put("payment_id", paymentId);
|
confirmParams.put("payment_id", paymentId);
|
||||||
confirmParams.put("order_no", orderNo);
|
confirmParams.put("order_no", orderNo);
|
||||||
confirmParams.put("confirm_amt", confirmAmt);
|
confirmParams.put("confirm_amt", confirmAmt);
|
||||||
confirmParams.put("div_members", divMembers);
|
confirmParams.put("div_members", divMembers);
|
||||||
confirmParams.put("fee_mode", feeMode);
|
confirmParams.put("fee_mode", feeMode);
|
||||||
confirmParams.put("description", description);
|
confirmParams.put("description", description);
|
||||||
return PaymentConfirm.create(confirmParams, deptId.toString());
|
return (JSONObject) PaymentConfirm.create(confirmParams, deptId.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -94,12 +98,12 @@ public class AdapayService {
|
||||||
* @param divMembers 分账对象信息列表,最多仅支持7个分账方
|
* @param divMembers 分账对象信息列表,最多仅支持7个分账方
|
||||||
* @return 成功时同步返回交易结果的 JSON
|
* @return 成功时同步返回交易结果的 JSON
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> balancePay(@NotNull Long deptId, @NotNull String orderNo, @NotNull String outMemberId,
|
public JSONObject balancePay(@NotNull Long deptId, @NotNull String orderNo, @NotNull String outMemberId,
|
||||||
@NotNull String inMemberId, @NotNull String transAmt, @NotNull String goodsTitle,
|
@NotNull String inMemberId, @NotNull String transAmt, @NotNull String goodsTitle,
|
||||||
@NotNull String goodsDesc, String payMode, Collection<DivMember> divMembers) throws BaseAdaPayException {
|
@NotNull String goodsDesc, String payMode, Collection<DivMember> divMembers) throws BaseAdaPayException {
|
||||||
// 获取商户的appId
|
// 获取商户的appId
|
||||||
String appId = AdapayConfig.getAppId(deptId);
|
String appId = AdapayConfig.getAppId(deptId);
|
||||||
Map<String, Object> balanceParam = new HashMap<>(10);
|
JSONObject balanceParam = new JSONObject();
|
||||||
balanceParam.put("app_id", appId);
|
balanceParam.put("app_id", appId);
|
||||||
balanceParam.put("adapay_func_code", "settle_accounts.balancePay");
|
balanceParam.put("adapay_func_code", "settle_accounts.balancePay");
|
||||||
balanceParam.put("order_no", orderNo);
|
balanceParam.put("order_no", orderNo);
|
||||||
|
|
@ -112,7 +116,7 @@ public class AdapayService {
|
||||||
if (!CollectionUtils.isEmpty(divMembers)) {
|
if (!CollectionUtils.isEmpty(divMembers)) {
|
||||||
balanceParam.put("div_members", divMembers);
|
balanceParam.put("div_members", divMembers);
|
||||||
}
|
}
|
||||||
return AdapayCommon.requestAdapay(balanceParam, deptId.toString());
|
return (JSONObject) AdapayCommon.requestAdapay(balanceParam, deptId.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -133,14 +137,14 @@ public class AdapayService {
|
||||||
* @param areaCode 银行账户开户银行所在地区编码(省市编码),银行账户类型为对公时必填,省市编码详见area.json
|
* @param areaCode 银行账户开户银行所在地区编码(省市编码),银行账户类型为对公时必填,省市编码详见area.json
|
||||||
* @return 成功时同步返回一个包含 SettleAccount对象 的 JSON。
|
* @return 成功时同步返回一个包含 SettleAccount对象 的 JSON。
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> createSettleAccount(@NotNull Long deptId, @NotNull String memberId, @NotNull String cardId,
|
public JSONObject createSettleAccount(@NotNull Long deptId, @NotNull String memberId, @NotNull String cardId,
|
||||||
@NotNull String cardName, @NotNull String bankAcctType, String certId, String telNo,
|
@NotNull String cardName, @NotNull String bankAcctType, String certId, String telNo,
|
||||||
String bankCode, String provCode, String areaCode) throws BaseAdaPayException {
|
String bankCode, String provCode, String areaCode) throws BaseAdaPayException {
|
||||||
|
|
||||||
// 获取商户的appId
|
// 获取商户的appId
|
||||||
String appId = AdapayConfig.getAppId(deptId);
|
String appId = AdapayConfig.getAppId(deptId);
|
||||||
// 结算账户信息 参见结算账户信息(AccountInfo)对象 https://docs.adapay.tech/api/appendix.html#accountinfo
|
// 结算账户信息 参见结算账户信息(AccountInfo)对象 https://docs.adapay.tech/api/appendix.html#accountinfo
|
||||||
Map<String, Object> accountInfo = new HashMap<>(9);
|
JSONObject accountInfo = new JSONObject();
|
||||||
|
|
||||||
switch (bankAcctType) {
|
switch (bankAcctType) {
|
||||||
case "1":
|
case "1":
|
||||||
|
|
@ -164,13 +168,13 @@ public class AdapayService {
|
||||||
accountInfo.put("prov_code", provCode);
|
accountInfo.put("prov_code", provCode);
|
||||||
accountInfo.put("area_code", areaCode);
|
accountInfo.put("area_code", areaCode);
|
||||||
|
|
||||||
Map<String, Object> settleCountParams = new HashMap<>(4);
|
JSONObject settleCountParams = new JSONObject();
|
||||||
settleCountParams.put("member_id", memberId);
|
settleCountParams.put("member_id", memberId);
|
||||||
settleCountParams.put("app_id", appId);
|
settleCountParams.put("app_id", appId);
|
||||||
// 目前仅支持:bank_account(银行卡)
|
// 目前仅支持:bank_account(银行卡)
|
||||||
settleCountParams.put("channel", "bank_account");
|
settleCountParams.put("channel", "bank_account");
|
||||||
settleCountParams.put("account_info", accountInfo);
|
settleCountParams.put("account_info", accountInfo);
|
||||||
return SettleAccount.create(settleCountParams, deptId.toString());
|
return (JSONObject) SettleAccount.create(settleCountParams, deptId.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -183,11 +187,11 @@ public class AdapayService {
|
||||||
* @param certId [必填]证件号
|
* @param certId [必填]证件号
|
||||||
* @return 成功时同步返回一个包含Member对象的JSON
|
* @return 成功时同步返回一个包含Member对象的JSON
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> createMember(@NotNull Long deptId, @NotNull String memberId, @NotNull String telNo,
|
public JSONObject createMember(@NotNull Long deptId, @NotNull String memberId, @NotNull String telNo,
|
||||||
@NotNull String username, @NotNull String certId) throws BaseAdaPayException {
|
@NotNull String username, @NotNull String certId) throws BaseAdaPayException {
|
||||||
// 获取商户的appId
|
// 获取商户的appId
|
||||||
String appId = AdapayConfig.getAppId(deptId);
|
String appId = AdapayConfig.getAppId(deptId);
|
||||||
Map<String, Object> memberParams = new HashMap<>();
|
JSONObject memberParams = new JSONObject();
|
||||||
memberParams.put("member_id", memberId);
|
memberParams.put("member_id", memberId);
|
||||||
memberParams.put("app_id", appId);
|
memberParams.put("app_id", appId);
|
||||||
memberParams.put("tel_no", telNo);
|
memberParams.put("tel_no", telNo);
|
||||||
|
|
@ -197,14 +201,13 @@ public class AdapayService {
|
||||||
// 接口功能号
|
// 接口功能号
|
||||||
memberParams.put("adapay_func_code", "members.realname");
|
memberParams.put("adapay_func_code", "members.realname");
|
||||||
memberParams.put("cert_id", certId);
|
memberParams.put("cert_id", certId);
|
||||||
return AdapayCommon.requestAdapay(memberParams, deptId.toString());
|
return (JSONObject) AdapayCommon.requestAdapay(memberParams, deptId.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对指定商户或者商户下用户的结算账户可用余额发起主动取现操作,金额从账户中提到绑定的结算银行卡中
|
* 对指定商户或者商户下用户的结算账户可用余额发起主动取现操作,金额从账户中提到绑定的结算银行卡中
|
||||||
*
|
*
|
||||||
* @param deptId [必填]商户ID
|
* @param deptId [必填]商户ID
|
||||||
* @param callback [必填项]处理提现结果的接口
|
|
||||||
* @param orderNo [必填项]请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
|
* @param orderNo [必填项]请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
|
||||||
* @param cashType [必填项]取现类型:T1-T+1取现;D1-D+1取现;D0-即时取现。
|
* @param cashType [必填项]取现类型:T1-T+1取现;D1-D+1取现;D0-即时取现。
|
||||||
* @param cashAmt [必填项]取现金额,必须大于0,人民币为元,保留两位小数点,如"0.10"、"100.05"等
|
* @param cashAmt [必填项]取现金额,必须大于0,人民币为元,保留两位小数点,如"0.10"、"100.05"等
|
||||||
|
|
@ -213,16 +216,15 @@ public class AdapayService {
|
||||||
* @param feeMode 手续费收取模式:O-商户手续费账户扣取手续费,I-交易金额中扣取手续费;值为空时,默认值为I;
|
* @param feeMode 手续费收取模式:O-商户手续费账户扣取手续费,I-交易金额中扣取手续费;值为空时,默认值为I;
|
||||||
* @return https://docs.adapay.tech/api/wallet.html#cash-response
|
* @return https://docs.adapay.tech/api/wallet.html#cash-response
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> drawCash(@NotNull Long deptId, DrawCashCallback callback, String orderNo, String cashType, String cashAmt,
|
public JSONObject drawCash(@NotNull Long deptId, String orderNo, String cashType, String cashAmt,
|
||||||
String memberId, String remark, String feeMode) throws BaseAdaPayException {
|
String memberId, String remark, String feeMode) throws BaseAdaPayException {
|
||||||
// 获取商户的appId
|
// 获取商户的appId
|
||||||
String appId = AdapayConfig.getAppId(deptId);
|
String appId = AdapayConfig.getAppId(deptId);
|
||||||
Assert.notNull(callback, "callback is null!");
|
|
||||||
Assert.hasText(orderNo, "orderNo is blank!");
|
Assert.hasText(orderNo, "orderNo is blank!");
|
||||||
Assert.hasText(cashType, "cashType is blank!");
|
Assert.hasText(cashType, "cashType is blank!");
|
||||||
Assert.hasText(cashAmt, "cashAmt is blank!");
|
Assert.hasText(cashAmt, "cashAmt is blank!");
|
||||||
Assert.hasText(memberId, "memberId is blank!");
|
Assert.hasText(memberId, "memberId is blank!");
|
||||||
Map<String, Object> cashParam = new HashMap<>(5);
|
JSONObject cashParam = new JSONObject();
|
||||||
cashParam.put("order_no", orderNo);
|
cashParam.put("order_no", orderNo);
|
||||||
cashParam.put("app_id", appId);
|
cashParam.put("app_id", appId);
|
||||||
cashParam.put("cash_type", cashType);
|
cashParam.put("cash_type", cashType);
|
||||||
|
|
@ -231,35 +233,35 @@ public class AdapayService {
|
||||||
cashParam.put("notify_url", adapayProperties.getNotifyUrl());
|
cashParam.put("notify_url", adapayProperties.getNotifyUrl());
|
||||||
cashParam.put("remark", remark);
|
cashParam.put("remark", remark);
|
||||||
cashParam.put("fee_mode", feeMode);
|
cashParam.put("fee_mode", feeMode);
|
||||||
DrawCashReplyMapping.putCallback(orderNo, callback);
|
DrawCashReplyMapping.putCallback(orderNo, drawCashCallback);
|
||||||
return Drawcash.create(cashParam, deptId.toString());
|
return (JSONObject) Drawcash.create(cashParam, deptId.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付宝正扫支付
|
* 支付宝正扫支付
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> alipayQrPay(@NotNull Long deptId, PayParam payParam, PayCallback callback,
|
public JSONObject alipayQrPay(@NotNull Long deptId, PayParam payParam,
|
||||||
AlipayExpend expend, DeviceInfo deviceInfo,
|
AlipayExpend expend, DeviceInfo deviceInfo,
|
||||||
Collection<DivMember> divMembers) throws BaseAdaPayException {
|
Collection<DivMember> divMembers) throws BaseAdaPayException {
|
||||||
return pay(deptId, "alipay_qr", payParam, callback, expend, deviceInfo, divMembers);
|
return pay(deptId, "alipay_qr", payParam, expend, deviceInfo, divMembers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信公众号支付
|
* 微信公众号支付
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> wxPubPay(@NotNull Long deptId, PayParam payParam, PayCallback callback,
|
public JSONObject wxPubPay(@NotNull Long deptId, PayParam payParam,
|
||||||
WxpayExpend expend, DeviceInfo deviceInfo,
|
WxpayExpend expend, DeviceInfo deviceInfo,
|
||||||
Collection<DivMember> divMembers) throws BaseAdaPayException {
|
Collection<DivMember> divMembers) throws BaseAdaPayException {
|
||||||
return pay(deptId, "wx_pub", payParam, callback, expend, deviceInfo, divMembers);
|
return pay(deptId, "wx_pub", payParam, expend, deviceInfo, divMembers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信小程序支付
|
* 微信小程序支付
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> wxLitePay(@NotNull Long deptId, PayParam payParam, PayCallback callback,
|
public JSONObject wxLitePay(@NotNull Long deptId, PayParam payParam,
|
||||||
WxpayExpend expend, DeviceInfo deviceInfo,
|
WxpayExpend expend, DeviceInfo deviceInfo,
|
||||||
Collection<DivMember> divMembers) throws BaseAdaPayException {
|
Collection<DivMember> divMembers) throws BaseAdaPayException {
|
||||||
return pay(deptId, "wx_lite", payParam, callback, expend, deviceInfo, divMembers);
|
return pay(deptId, "wx_lite", payParam, expend, deviceInfo, divMembers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -268,15 +270,14 @@ public class AdapayService {
|
||||||
* @param deptId [必填]商户ID
|
* @param deptId [必填]商户ID
|
||||||
* @param payChannel [必填项]支付渠道,详见 https://docs.adapay.tech/api/appendix.html#id2
|
* @param payChannel [必填项]支付渠道,详见 https://docs.adapay.tech/api/appendix.html#id2
|
||||||
* @param payParam [必填项]支付参数
|
* @param payParam [必填项]支付参数
|
||||||
* @param callback [必填项]处理支付结果的回调接口
|
|
||||||
* @param expend 支付渠道额外参数 https://docs.adapay.tech/api/appendix.html#expend
|
* @param expend 支付渠道额外参数 https://docs.adapay.tech/api/appendix.html#expend
|
||||||
* @param deviceInfo 前端设备信息 https://docs.adapay.tech/api/appendix.html#deviceinfo
|
* @param deviceInfo 前端设备信息 https://docs.adapay.tech/api/appendix.html#deviceinfo
|
||||||
* @param divMembers 分账对象信息列表 https://docs.adapay.tech/api/appendix.html#divmembers
|
* @param divMembers 分账对象信息列表 https://docs.adapay.tech/api/appendix.html#divmembers
|
||||||
* @return 同步返回一个 支付对象,详见 https://docs.adapay.tech/api/trade.html#id2
|
* @return 同步返回一个 支付对象,详见 https://docs.adapay.tech/api/trade.html#id2
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> pay(@NotNull Long deptId, @NotNull String payChannel, @NotNull PayParam payParam,
|
public JSONObject pay(@NotNull Long deptId, @NotNull String payChannel, @NotNull PayParam payParam,
|
||||||
@NotNull PayCallback callback, Expend expend, DeviceInfo deviceInfo,
|
Expend expend, DeviceInfo deviceInfo,
|
||||||
Collection<DivMember> divMembers) throws BaseAdaPayException {
|
Collection<DivMember> divMembers) throws BaseAdaPayException {
|
||||||
// 获取商户的appId
|
// 获取商户的appId
|
||||||
String appId = AdapayConfig.getAppId(deptId);
|
String appId = AdapayConfig.getAppId(deptId);
|
||||||
JSONObject paymentParams = payParam.toJSONObject();
|
JSONObject paymentParams = payParam.toJSONObject();
|
||||||
|
|
@ -286,9 +287,11 @@ public class AdapayService {
|
||||||
paymentParams.put("div_members", divMembers);
|
paymentParams.put("div_members", divMembers);
|
||||||
paymentParams.put("device_info", deviceInfo);
|
paymentParams.put("device_info", deviceInfo);
|
||||||
paymentParams.put("expend", expend);
|
paymentParams.put("expend", expend);
|
||||||
PayReplyMapping.putCallback(payParam.getOrderNo(), callback);
|
|
||||||
logger.debug("paymentParams: {}", paymentParams.toJSONString());
|
logger.debug("paymentParams: {}", paymentParams.toJSONString());
|
||||||
return Payment.create(paymentParams, deptId.toString());
|
JSONObject response = (JSONObject) Payment.create(paymentParams, deptId.toString());
|
||||||
|
payCallback.onResponse(response);
|
||||||
|
PayReplyMapping.putCallback(payParam.getOrderNo(), payCallback);
|
||||||
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -300,23 +303,21 @@ public class AdapayService {
|
||||||
* 若返回码是“order_id_not_exists 订单记录不存在”,既超过退款期限,无法退款成功。
|
* 若返回码是“order_id_not_exists 订单记录不存在”,既超过退款期限,无法退款成功。
|
||||||
*
|
*
|
||||||
* @param deptId [必填]商户ID
|
* @param deptId [必填]商户ID
|
||||||
* @param callback [必填项]处理退款结果的回调接口
|
|
||||||
* @param paymentId [必填项]支付确认对象的id
|
* @param paymentId [必填项]支付确认对象的id
|
||||||
* @param refundOrderNo [必填项]订单号
|
* @param refundOrderNo [必填项]订单号
|
||||||
* @param refundAmt [必填项]退款金额,若退款金额小于原交易金额,则认为是部分退款,必须大于0,保留两位小数点,如0.10、100.05等
|
* @param refundAmt [必填项]退款金额,若退款金额小于原交易金额,则认为是部分退款,必须大于0,保留两位小数点,如0.10、100.05等
|
||||||
* @return 同步返回一个 退款对象 https://docs.adapay.tech/api/trade.html#create-refund-params
|
* @return 同步返回一个 退款对象 https://docs.adapay.tech/api/trade.html#create-refund-params
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> refund(@NotNull Long deptId, @NotNull RefundCallback callback, @NotNull String paymentId,
|
public JSONObject refund(@NotNull Long deptId, @NotNull String paymentId,
|
||||||
@NotNull String refundOrderNo, @NotNull String refundAmt) throws BaseAdaPayException {
|
@NotNull String refundOrderNo, @NotNull String refundAmt) throws BaseAdaPayException {
|
||||||
Assert.notNull(callback, "callback is null!");
|
|
||||||
Assert.hasText(paymentId, "paymentId is blank!");
|
Assert.hasText(paymentId, "paymentId is blank!");
|
||||||
Assert.hasText(refundOrderNo, "refundOrderNo is blank!");
|
Assert.hasText(refundOrderNo, "refundOrderNo is blank!");
|
||||||
Assert.hasText(refundAmt, "refundAmt is blank!");
|
Assert.hasText(refundAmt, "refundAmt is blank!");
|
||||||
Map<String, Object> refundParams = new HashMap<>(4);
|
JSONObject refundParams = new JSONObject();
|
||||||
refundParams.put("refund_amt", refundAmt);
|
refundParams.put("refund_amt", refundAmt);
|
||||||
refundParams.put("refund_order_no", refundOrderNo);
|
refundParams.put("refund_order_no", refundOrderNo);
|
||||||
RefundReplyMapping.putCallback(paymentId, callback);
|
RefundReplyMapping.putCallback(paymentId, refundCallback);
|
||||||
return Refund.create(paymentId, refundParams, deptId.toString());
|
return (JSONObject) Refund.create(paymentId, refundParams, deptId.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -334,13 +335,13 @@ public class AdapayService {
|
||||||
* @param expend 扩展域
|
* @param expend 扩展域
|
||||||
* @return 关单的结果将通过一个 JSON 同步返回 https://docs.adapay.tech/api/trade.html#close-payment-response
|
* @return 关单的结果将通过一个 JSON 同步返回 https://docs.adapay.tech/api/trade.html#close-payment-response
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> close(@NotNull Long deptId, String paymentId, String reason, String expend) throws BaseAdaPayException {
|
public JSONObject close(@NotNull Long deptId, String paymentId, String reason, String expend) throws BaseAdaPayException {
|
||||||
Assert.hasText(paymentId, "paymentId is blank!");
|
Assert.hasText(paymentId, "paymentId is blank!");
|
||||||
Map<String, Object> paymentParams = new HashMap<>(4);
|
JSONObject paymentParams = new JSONObject();
|
||||||
paymentParams.put("payment_id", paymentId);
|
paymentParams.put("payment_id", paymentId);
|
||||||
paymentParams.put("reason", reason);
|
paymentParams.put("reason", reason);
|
||||||
paymentParams.put("expend", expend);
|
paymentParams.put("expend", expend);
|
||||||
return Payment.close(paymentParams, deptId.toString());
|
return (JSONObject) Payment.close(paymentParams, deptId.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -351,11 +352,11 @@ public class AdapayService {
|
||||||
* @param memberId [必填]商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
|
* @param memberId [必填]商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
|
||||||
* @return 成功时同步返回一个包含 Member对象的JSON。
|
* @return 成功时同步返回一个包含 Member对象的JSON。
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> queryMember(@NotNull Long deptId, @NotNull String memberId) throws BaseAdaPayException {
|
public JSONObject queryMember(@NotNull Long deptId, @NotNull String memberId) throws BaseAdaPayException {
|
||||||
Map<String, Object> memberParams = new HashMap<>(2);
|
JSONObject memberParams = new JSONObject();
|
||||||
memberParams.put("member_id", memberId);
|
memberParams.put("member_id", memberId);
|
||||||
memberParams.put("app_id", AdapayConfig.getAppId(deptId));
|
memberParams.put("app_id", AdapayConfig.getAppId(deptId));
|
||||||
return Member.query(memberParams, deptId.toString());
|
return (JSONObject) Member.query(memberParams, deptId.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -7,8 +7,8 @@ import com.ghy.common.adapay.model.DrawCashReply;
|
||||||
*
|
*
|
||||||
* @author HH 2022/4/1
|
* @author HH 2022/4/1
|
||||||
*/
|
*/
|
||||||
public interface DrawCashCallback {
|
public interface IDrawCashCallback {
|
||||||
|
|
||||||
void onReply(DrawCashReply reply);
|
void onCallback(DrawCashReply reply);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.ghy.common.adapay.callback;
|
package com.ghy.common.adapay.callback;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.ghy.common.adapay.model.PayReply;
|
import com.ghy.common.adapay.model.PayReply;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -7,7 +8,9 @@ import com.ghy.common.adapay.model.PayReply;
|
||||||
*
|
*
|
||||||
* @author HH 2022/3/25
|
* @author HH 2022/3/25
|
||||||
*/
|
*/
|
||||||
public interface PayCallback {
|
public interface IPayCallback {
|
||||||
|
|
||||||
void onReply(PayReply reply);
|
void onCallback(PayReply reply);
|
||||||
|
|
||||||
|
void onResponse(JSONObject response);
|
||||||
}
|
}
|
||||||
|
|
@ -7,7 +7,7 @@ import com.ghy.common.adapay.model.RefundReply;
|
||||||
*
|
*
|
||||||
* @author HH 2022/3/29
|
* @author HH 2022/3/29
|
||||||
*/
|
*/
|
||||||
public interface RefundCallback {
|
public interface IRefundCallback {
|
||||||
|
|
||||||
void onReply(RefundReply reply);
|
void onCallback(RefundReply reply);
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.ghy.common.adapay.callback.mapping;
|
package com.ghy.common.adapay.callback.mapping;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.ghy.common.adapay.callback.DrawCashCallback;
|
import com.ghy.common.adapay.callback.IDrawCashCallback;
|
||||||
import com.ghy.common.adapay.callback.Event;
|
import com.ghy.common.adapay.callback.Event;
|
||||||
import com.ghy.common.adapay.model.DrawCashReply;
|
import com.ghy.common.adapay.model.DrawCashReply;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
@ -20,19 +20,19 @@ public class DrawCashReplyMapping {
|
||||||
* key: orderNo
|
* key: orderNo
|
||||||
* value: 处理支付结果的回调接口
|
* value: 处理支付结果的回调接口
|
||||||
*/
|
*/
|
||||||
private final static ConcurrentHashMap<String, DrawCashCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
|
private final static ConcurrentHashMap<String, IDrawCashCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
|
||||||
|
|
||||||
public static void putReply(Event event) {
|
public static void putReply(Event event) {
|
||||||
String data = event.getData();
|
String data = event.getData();
|
||||||
DrawCashReply reply = JSON.parseObject(data, DrawCashReply.class);
|
DrawCashReply reply = JSON.parseObject(data, DrawCashReply.class);
|
||||||
Assert.hasText(reply.getOrderNo(), "orderNo is blank !!!");
|
Assert.hasText(reply.getOrderNo(), "orderNo is blank !!!");
|
||||||
DrawCashCallback callback = PAY_RESULT_CALLBACK_MAP.remove(reply.getOrderNo());
|
IDrawCashCallback callback = PAY_RESULT_CALLBACK_MAP.remove(reply.getOrderNo());
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.onReply(reply);
|
callback.onCallback(reply);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void putCallback(String orderNo, DrawCashCallback callback) {
|
public static void putCallback(String orderNo, IDrawCashCallback callback) {
|
||||||
Assert.hasText(orderNo, "orderNo is blank !!!");
|
Assert.hasText(orderNo, "orderNo is blank !!!");
|
||||||
Assert.notNull(callback, "PayCallback is null !!!");
|
Assert.notNull(callback, "PayCallback is null !!!");
|
||||||
PAY_RESULT_CALLBACK_MAP.put(orderNo, callback);
|
PAY_RESULT_CALLBACK_MAP.put(orderNo, callback);
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,10 @@ package com.ghy.common.adapay.callback.mapping;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.ghy.common.adapay.callback.Event;
|
import com.ghy.common.adapay.callback.Event;
|
||||||
import com.ghy.common.adapay.callback.PayCallback;
|
import com.ghy.common.adapay.callback.IPayCallback;
|
||||||
import com.ghy.common.adapay.model.PayReply;
|
import com.ghy.common.adapay.model.PayReply;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
@ -15,24 +17,29 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||||
*/
|
*/
|
||||||
public class PayReplyMapping {
|
public class PayReplyMapping {
|
||||||
|
|
||||||
|
protected static final Logger logger = LoggerFactory.getLogger(PayReplyMapping.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 临时保存支付结果
|
* 临时保存支付结果
|
||||||
* key: orderNo
|
* key: orderNo
|
||||||
* value: 处理支付结果的回调接口
|
* value: 处理支付结果的回调接口
|
||||||
*/
|
*/
|
||||||
private final static ConcurrentHashMap<String, PayCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
|
private final static ConcurrentHashMap<String, IPayCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
|
||||||
|
|
||||||
public static void putReply(Event event) {
|
public static void putReply(Event event) {
|
||||||
String data = event.getData();
|
String data = event.getData();
|
||||||
PayReply payment = JSON.parseObject(data, PayReply.class);
|
PayReply payment = JSON.parseObject(data, PayReply.class);
|
||||||
Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!");
|
Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!");
|
||||||
PayCallback callback = PAY_RESULT_CALLBACK_MAP.remove(payment.getOrderNo());
|
payment.setPayTime(event.getCreatedTime());
|
||||||
|
IPayCallback callback = PAY_RESULT_CALLBACK_MAP.remove(payment.getOrderNo());
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.onReply(payment);
|
callback.onCallback(payment);
|
||||||
|
} else {
|
||||||
|
logger.warn("PayCallback don't exist! {}", payment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void putCallback(String orderNo, PayCallback callback) {
|
public static void putCallback(String orderNo, IPayCallback callback) {
|
||||||
Assert.hasText(orderNo, "orderNo is blank !!!");
|
Assert.hasText(orderNo, "orderNo is blank !!!");
|
||||||
Assert.notNull(callback, "PayCallback is null !!!");
|
Assert.notNull(callback, "PayCallback is null !!!");
|
||||||
PAY_RESULT_CALLBACK_MAP.put(orderNo, callback);
|
PAY_RESULT_CALLBACK_MAP.put(orderNo, callback);
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package com.ghy.common.adapay.callback.mapping;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.ghy.common.adapay.callback.Event;
|
import com.ghy.common.adapay.callback.Event;
|
||||||
import com.ghy.common.adapay.callback.RefundCallback;
|
import com.ghy.common.adapay.callback.IRefundCallback;
|
||||||
import com.ghy.common.adapay.model.RefundReply;
|
import com.ghy.common.adapay.model.RefundReply;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
|
@ -20,19 +20,19 @@ public class RefundReplyMapping {
|
||||||
* key: orderNo
|
* key: orderNo
|
||||||
* value: 处理支付结果的回调接口
|
* value: 处理支付结果的回调接口
|
||||||
*/
|
*/
|
||||||
private final static ConcurrentHashMap<String, RefundCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
|
private final static ConcurrentHashMap<String, IRefundCallback> PAY_RESULT_CALLBACK_MAP = new ConcurrentHashMap<>(1024);
|
||||||
|
|
||||||
public static void putReply(Event event) {
|
public static void putReply(Event event) {
|
||||||
String data = event.getData();
|
String data = event.getData();
|
||||||
RefundReply payment = JSON.parseObject(data, RefundReply.class);
|
RefundReply payment = JSON.parseObject(data, RefundReply.class);
|
||||||
Assert.hasText(payment.getPaymentId(), "paymentId is blank !!!");
|
Assert.hasText(payment.getPaymentId(), "paymentId is blank !!!");
|
||||||
RefundCallback callback = PAY_RESULT_CALLBACK_MAP.remove(payment.getPaymentId());
|
IRefundCallback callback = PAY_RESULT_CALLBACK_MAP.remove(payment.getPaymentId());
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.onReply(payment);
|
callback.onCallback(payment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void putCallback(String paymentId, RefundCallback callback) {
|
public static void putCallback(String paymentId, IRefundCallback callback) {
|
||||||
Assert.hasText(paymentId, "paymentId is blank !!!");
|
Assert.hasText(paymentId, "paymentId is blank !!!");
|
||||||
Assert.notNull(callback, "RefundCallback is null !!!");
|
Assert.notNull(callback, "RefundCallback is null !!!");
|
||||||
PAY_RESULT_CALLBACK_MAP.put(paymentId, callback);
|
PAY_RESULT_CALLBACK_MAP.put(paymentId, callback);
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,10 @@ public class PayReply {
|
||||||
*/
|
*/
|
||||||
@JSONField(name = "created_time")
|
@JSONField(name = "created_time")
|
||||||
private Long createdTime;
|
private Long createdTime;
|
||||||
|
/**
|
||||||
|
* 支付时间
|
||||||
|
*/
|
||||||
|
private long payTime;
|
||||||
/**
|
/**
|
||||||
* 必填,订单号
|
* 必填,订单号
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.ghy.common.adapay.model;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import com.huifu.adapay.model.Payment;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class PaymentDTO extends Payment {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户账单上的商户订单号
|
||||||
|
*/
|
||||||
|
@JSONField(name = "party_order_id")
|
||||||
|
private String partyOrderId;
|
||||||
|
/**
|
||||||
|
* 当前交易状态
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 支付时间
|
||||||
|
*/
|
||||||
|
private Long payTime;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.ghy.payment.mapper;
|
||||||
|
|
||||||
|
import com.huifu.adapay.model.Payment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 支付记录 Mapper
|
||||||
|
*
|
||||||
|
* @author HH 2022/5/27
|
||||||
|
*/
|
||||||
|
public interface PaymentMapper {
|
||||||
|
|
||||||
|
int insertPayment(Payment payment);
|
||||||
|
|
||||||
|
int updatePayment(Payment payment);
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.ghy.payment.service;
|
package com.ghy.payment.service;
|
||||||
|
|
||||||
|
import com.ghy.common.adapay.model.PaymentDTO;
|
||||||
import com.ghy.payment.domain.FinancialMaster;
|
import com.ghy.payment.domain.FinancialMaster;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -61,4 +62,18 @@ public interface FinancialMasterService {
|
||||||
* @param orderMasterId 主订单ID
|
* @param orderMasterId 主订单ID
|
||||||
*/
|
*/
|
||||||
FinancialMaster selectByOrderMasterId(Long orderMasterId);
|
FinancialMaster selectByOrderMasterId(Long orderMasterId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存一条支付记录
|
||||||
|
*
|
||||||
|
* @param payment 支付对象
|
||||||
|
*/
|
||||||
|
int insertPayment(PaymentDTO payment);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新一条支付记录
|
||||||
|
*
|
||||||
|
* @param payment 支付对象
|
||||||
|
*/
|
||||||
|
int updatePayment(PaymentDTO payment);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
package com.ghy.payment.service.impl;
|
package com.ghy.payment.service.impl;
|
||||||
|
|
||||||
|
import com.ghy.common.adapay.model.PaymentDTO;
|
||||||
import com.ghy.common.core.text.Convert;
|
import com.ghy.common.core.text.Convert;
|
||||||
import com.ghy.payment.domain.FinancialMaster;
|
import com.ghy.payment.domain.FinancialMaster;
|
||||||
import com.ghy.payment.mapper.FinancialMasterMapper;
|
import com.ghy.payment.mapper.FinancialMasterMapper;
|
||||||
|
import com.ghy.payment.mapper.PaymentMapper;
|
||||||
import com.ghy.payment.service.FinancialMasterService;
|
import com.ghy.payment.service.FinancialMasterService;
|
||||||
|
import com.huifu.adapay.model.Payment;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
@ -37,6 +40,8 @@ public class FinancialMasterServiceImpl implements FinancialMasterService {
|
||||||
.appendValue(DAY_OF_MONTH, 2).appendValue(HOUR_OF_DAY, 2)
|
.appendValue(DAY_OF_MONTH, 2).appendValue(HOUR_OF_DAY, 2)
|
||||||
.appendValue(MINUTE_OF_HOUR, 2).appendValue(SECOND_OF_MINUTE, 2).toFormatter();
|
.appendValue(MINUTE_OF_HOUR, 2).appendValue(SECOND_OF_MINUTE, 2).toFormatter();
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PaymentMapper paymentMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private FinancialMasterMapper financialMasterMapper;
|
private FinancialMasterMapper financialMasterMapper;
|
||||||
|
|
||||||
|
|
@ -95,4 +100,14 @@ public class FinancialMasterServiceImpl implements FinancialMasterService {
|
||||||
return financialMasterMapper.selectByOrderMasterId(orderMasterId);
|
return financialMasterMapper.selectByOrderMasterId(orderMasterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int insertPayment(PaymentDTO payment) {
|
||||||
|
return paymentMapper.insertPayment(payment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int updatePayment(PaymentDTO payment) {
|
||||||
|
return paymentMapper.updatePayment(payment);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.ghy.payment.mapper.PaymentMapper">
|
||||||
|
|
||||||
|
<resultMap id="FinancialMasterResult" type="com.ghy.common.adapay.model.PaymentDTO">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="orderNo" column="order_no"/>
|
||||||
|
<result property="prodMode" column="prod_mode"/>
|
||||||
|
<result property="appId" column="app_id"/>
|
||||||
|
<result property="payChannel" column="pay_channel"/>
|
||||||
|
<result property="payAmt" column="pay_amt"/>
|
||||||
|
<result property="partyOrderId" column="party_order_id"/>
|
||||||
|
<result property="queryUrl" column="query_url"/>
|
||||||
|
<result property="status" column="status"/>
|
||||||
|
<result property="createdTime" column="created_time"/>
|
||||||
|
<result property="payTime" column="pay_time"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="selectFinancialMaster">
|
||||||
|
SELECT id, order_no, prod_mode, app_id, pay_channel, pay_amt, party_order_id, query_url,
|
||||||
|
currency, status, pay_time, created_time, update_time
|
||||||
|
FROM adapay_pay_log
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<insert id="insertPayment" parameterType="com.ghy.common.adapay.model.PaymentDTO">
|
||||||
|
INSERT INTO adapay_pay_log(
|
||||||
|
<if test="id != null and id != ''">`id`,</if>
|
||||||
|
<if test="orderNo != null and orderNo != ''">`order_no`,</if>
|
||||||
|
<if test="prodMode != null and prodMode != ''">`prod_mode`,</if>
|
||||||
|
<if test="appId != null and appId != ''">`app_id`,</if>
|
||||||
|
<if test="payChannel != null and payChannel != ''">`pay_channel`,</if>
|
||||||
|
<if test="payAmt != null and payAmt != ''">`pay_amt`,</if>
|
||||||
|
<if test="partyOrderId != null and partyOrderId != ''">`party_order_id`,</if>
|
||||||
|
<if test="queryUrl != null and queryUrl != ''">`query_url`,</if>
|
||||||
|
<if test="status != null and status != ''">`status`,</if>
|
||||||
|
created_time
|
||||||
|
)VALUES(
|
||||||
|
<if test="id != null and id != ''">#{id},</if>
|
||||||
|
<if test="orderNo != null and orderNo != ''">#{orderNo},</if>
|
||||||
|
<if test="prodMode != null and prodMode != ''">#{prodMode},</if>
|
||||||
|
<if test="appId != null and appId != ''">#{appId},</if>
|
||||||
|
<if test="payChannel != null and payChannel != ''">#{payChannel},</if>
|
||||||
|
<if test="payAmt != null and payAmt != ''">#{payAmt},</if>
|
||||||
|
<if test="partyOrderId != null and partyOrderId != ''">#{partyOrderId},</if>
|
||||||
|
<if test="queryUrl != null and queryUrl != ''">#{queryUrl},</if>
|
||||||
|
<if test="status != null and status != ''">#{status},</if>
|
||||||
|
SYSDATE()
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<update id="updatePayment" parameterType="com.ghy.common.adapay.model.PaymentDTO">
|
||||||
|
UPDATE adapay_pay_log
|
||||||
|
<set>
|
||||||
|
<if test="status != null and status != ''">status = #{status},</if>
|
||||||
|
<if test="payTime != null and payTime != ''">pay_time = #{payTime},</if>
|
||||||
|
update_time = SYSDATE()
|
||||||
|
</set>
|
||||||
|
WHERE id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
Loading…
Reference in New Issue