mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-20 23:29:48 +08:00
汇付支付 执行退款
This commit is contained in:
@@ -23,6 +23,7 @@ import com.jsowell.common.util.AdapayUtil;
|
|||||||
import com.jsowell.common.util.JWTUtils;
|
import com.jsowell.common.util.JWTUtils;
|
||||||
import com.jsowell.common.util.StringUtils;
|
import com.jsowell.common.util.StringUtils;
|
||||||
import com.jsowell.common.util.id.IdUtils;
|
import com.jsowell.common.util.id.IdUtils;
|
||||||
|
import com.jsowell.common.util.id.SnowflakeIdWorker;
|
||||||
import com.jsowell.pile.domain.MemberBasicInfo;
|
import com.jsowell.pile.domain.MemberBasicInfo;
|
||||||
import com.jsowell.pile.domain.MemberInvoiceTitle;
|
import com.jsowell.pile.domain.MemberInvoiceTitle;
|
||||||
import com.jsowell.pile.domain.MemberPlateNumberRelation;
|
import com.jsowell.pile.domain.MemberPlateNumberRelation;
|
||||||
@@ -455,7 +456,7 @@ public class MemberService {
|
|||||||
public Map<String, Object> rechargeBalanceWithAdapay(WeixinPayDTO dto) throws Exception {
|
public Map<String, Object> rechargeBalanceWithAdapay(WeixinPayDTO dto) throws Exception {
|
||||||
// 封装对象
|
// 封装对象
|
||||||
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
|
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
|
||||||
createAdaPaymentParam.setOrder_no(IdUtils.fastSimpleUUID());
|
createAdaPaymentParam.setOrder_no(SnowflakeIdWorker.getSnowflakeId());
|
||||||
createAdaPaymentParam.setPay_amt(AdapayUtil.formatAmount(dto.getAmount()));
|
createAdaPaymentParam.setPay_amt(AdapayUtil.formatAmount(dto.getAmount()));
|
||||||
createAdaPaymentParam.setApp_id(ADAPAY_APP_ID); // 移动到配置文件中
|
createAdaPaymentParam.setApp_id(ADAPAY_APP_ID); // 移动到配置文件中
|
||||||
createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求
|
createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求
|
||||||
|
|||||||
@@ -758,7 +758,7 @@ public class OrderService {
|
|||||||
orderBasicInfoService.weChatRefund(dto);
|
orderBasicInfoService.weChatRefund(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void adapayRefund(WeChatRefundDTO dto) {
|
public void adapayRefund(WeChatRefundDTO dto) throws BaseAdaPayException {
|
||||||
log.info("汇付退款 param:{}", JSON.toJSONString(dto));
|
log.info("汇付退款 param:{}", JSON.toJSONString(dto));
|
||||||
// 退款有两种情况 1-订单结算退款 2-用户余额退款
|
// 退款有两种情况 1-订单结算退款 2-用户余额退款
|
||||||
String refundType = dto.getRefundType();
|
String refundType = dto.getRefundType();
|
||||||
@@ -1213,7 +1213,6 @@ public class OrderService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 入库
|
// 入库
|
||||||
OrderInvoiceRecord orderInvoiceRecord = new OrderInvoiceRecord();
|
OrderInvoiceRecord orderInvoiceRecord = new OrderInvoiceRecord();
|
||||||
orderInvoiceRecord.setStatus("0");
|
orderInvoiceRecord.setStatus("0");
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.huifu.adapay.model.Refund;
|
||||||
import com.jsowell.JsowellApplication;
|
import com.jsowell.JsowellApplication;
|
||||||
import com.jsowell.common.constant.CacheConstants;
|
import com.jsowell.common.constant.CacheConstants;
|
||||||
import com.jsowell.common.constant.Constants;
|
import com.jsowell.common.constant.Constants;
|
||||||
@@ -143,6 +145,27 @@ public class SpringBootTestController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private AdapayCallbackRecordService adapayCallbackRecordService;
|
private AdapayCallbackRecordService adapayCallbackRecordService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAdapayRefund() {
|
||||||
|
// 创建汇付退款对象 在完成初始化设置情况下,调用方法,获取 Refund对象
|
||||||
|
try {
|
||||||
|
String id = "002212023052711245310508373206577954816";
|
||||||
|
String refundAmount = "0.01";
|
||||||
|
Map<String, Object> refundParams = Maps.newHashMap();
|
||||||
|
refundParams.put("refund_amt", AdapayUtil.formatAmount(refundAmount));
|
||||||
|
refundParams.put("refund_order_no", SnowflakeIdWorker.getSnowflakeId());
|
||||||
|
Map<String, Object> response = Refund.create(id, refundParams);
|
||||||
|
System.out.println(JSON.toJSONString(response));
|
||||||
|
// if (response != null && !response.isEmpty()) {
|
||||||
|
// JSONObject jsonObject = JSONObject.parseObject(response.get("expend").toString());
|
||||||
|
// JSONObject pay_info = jsonObject.getJSONObject("pay_info");
|
||||||
|
// Map<String, Object> resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {});
|
||||||
|
// }
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSaveCallback() throws JsonProcessingException {
|
public void testSaveCallback() throws JsonProcessingException {
|
||||||
String data = "{\"app_id\":\"app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa\",\"created_time\":\"20230527100758\",\"description\":\"{\\\"type\\\":\\\"balance\\\",\\\"memberId\\\":\\\"29336349\\\"}\",\"end_time\":\"20230527100810\",\"expend\":{\"bank_type\":\"OTHERS\",\"open_id\":\"o8jhot6PJF93EPhNISsXi28dKdS8\",\"sub_open_id\":\"o4REX5MprZfTaLnVNxfdOY-wnwGI\"},\"fee_amt\":\"0.00\",\"id\":\"002212023052710075810508353847861903360\",\"order_no\":\"4c457bd474334d5eaf82f4795265b6ad\",\"out_trans_id\":\"4200001864202305270647556621\",\"party_order_id\":\"02212305273647819807712\",\"pay_amt\":\"0.01\",\"pay_channel\":\"wx_lite\",\"real_amt\":\"0.01\",\"share_eq\":\"Y\",\"status\":\"succeeded\",\"wx_user_id\":\"\"}";
|
String data = "{\"app_id\":\"app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa\",\"created_time\":\"20230527100758\",\"description\":\"{\\\"type\\\":\\\"balance\\\",\\\"memberId\\\":\\\"29336349\\\"}\",\"end_time\":\"20230527100810\",\"expend\":{\"bank_type\":\"OTHERS\",\"open_id\":\"o8jhot6PJF93EPhNISsXi28dKdS8\",\"sub_open_id\":\"o4REX5MprZfTaLnVNxfdOY-wnwGI\"},\"fee_amt\":\"0.00\",\"id\":\"002212023052710075810508353847861903360\",\"order_no\":\"4c457bd474334d5eaf82f4795265b6ad\",\"out_trans_id\":\"4200001864202305270647556621\",\"party_order_id\":\"02212305273647819807712\",\"pay_amt\":\"0.01\",\"pay_channel\":\"wx_lite\",\"real_amt\":\"0.01\",\"share_eq\":\"Y\",\"status\":\"succeeded\",\"wx_user_id\":\"\"}";
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ public interface AdapayCallbackRecordMapper {
|
|||||||
|
|
||||||
AdapayCallbackRecord selectByPrimaryKey(Integer id);
|
AdapayCallbackRecord selectByPrimaryKey(Integer id);
|
||||||
|
|
||||||
|
AdapayCallbackRecord selectByOrderCode(String orderCode);
|
||||||
|
|
||||||
int updateByPrimaryKeySelective(AdapayCallbackRecord record);
|
int updateByPrimaryKeySelective(AdapayCallbackRecord record);
|
||||||
|
|
||||||
int updateByPrimaryKey(AdapayCallbackRecord record);
|
int updateByPrimaryKey(AdapayCallbackRecord record);
|
||||||
|
|||||||
@@ -4,4 +4,6 @@ import com.jsowell.pile.domain.AdapayCallbackRecord;
|
|||||||
|
|
||||||
public interface AdapayCallbackRecordService {
|
public interface AdapayCallbackRecordService {
|
||||||
void saveAdapayCallbackRecord(AdapayCallbackRecord callbackRecord);
|
void saveAdapayCallbackRecord(AdapayCallbackRecord callbackRecord);
|
||||||
|
|
||||||
|
AdapayCallbackRecord selectByOrderCode(String orderCode);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.jsowell.pile.service;
|
package com.jsowell.pile.service;
|
||||||
|
|
||||||
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
|
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
|
||||||
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
|
||||||
import com.jsowell.pile.domain.OrderBasicInfo;
|
import com.jsowell.pile.domain.OrderBasicInfo;
|
||||||
@@ -261,7 +262,7 @@ public interface IOrderBasicInfoService {
|
|||||||
* 汇付支付 订单退款
|
* 汇付支付 订单退款
|
||||||
* @param dto
|
* @param dto
|
||||||
*/
|
*/
|
||||||
void refundForOrderWithAdapay(WeChatRefundDTO dto);
|
void refundForOrderWithAdapay(WeChatRefundDTO dto) throws BaseAdaPayException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 汇付支付 余额退款
|
* 汇付支付 余额退款
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ package com.jsowell.pile.service.impl;
|
|||||||
import com.jsowell.pile.domain.AdapayCallbackRecord;
|
import com.jsowell.pile.domain.AdapayCallbackRecord;
|
||||||
import com.jsowell.pile.mapper.AdapayCallbackRecordMapper;
|
import com.jsowell.pile.mapper.AdapayCallbackRecordMapper;
|
||||||
import com.jsowell.pile.service.AdapayCallbackRecordService;
|
import com.jsowell.pile.service.AdapayCallbackRecordService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class AdapayCallbackRecordServiceImpl implements AdapayCallbackRecordService {
|
public class AdapayCallbackRecordServiceImpl implements AdapayCallbackRecordService {
|
||||||
|
|
||||||
@@ -16,4 +18,15 @@ public class AdapayCallbackRecordServiceImpl implements AdapayCallbackRecordServ
|
|||||||
public void saveAdapayCallbackRecord(AdapayCallbackRecord callbackRecord) {
|
public void saveAdapayCallbackRecord(AdapayCallbackRecord callbackRecord) {
|
||||||
adapayCallbackRecordMapper.insert(callbackRecord);
|
adapayCallbackRecordMapper.insert(callbackRecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AdapayCallbackRecord selectByOrderCode(String orderCode) {
|
||||||
|
AdapayCallbackRecord record = null;
|
||||||
|
try {
|
||||||
|
record = adapayCallbackRecordMapper.selectByOrderCode(orderCode);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("查询汇付支付回调记录失败", e);
|
||||||
|
}
|
||||||
|
return record;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,14 @@ package com.jsowell.pile.service.impl;
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import com.alibaba.fastjson2.TypeReference;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||||
|
import com.huifu.adapay.model.Refund;
|
||||||
import com.jsowell.common.constant.CacheConstants;
|
import com.jsowell.common.constant.CacheConstants;
|
||||||
import com.jsowell.common.constant.Constants;
|
import com.jsowell.common.constant.Constants;
|
||||||
import com.jsowell.common.core.domain.vo.AuthorizedDeptVO;
|
import com.jsowell.common.core.domain.vo.AuthorizedDeptVO;
|
||||||
@@ -16,6 +19,7 @@ import com.jsowell.common.core.redis.RedisCache;
|
|||||||
import com.jsowell.common.enums.MemberWalletEnum;
|
import com.jsowell.common.enums.MemberWalletEnum;
|
||||||
import com.jsowell.common.enums.ykc.*;
|
import com.jsowell.common.enums.ykc.*;
|
||||||
import com.jsowell.common.exception.BusinessException;
|
import com.jsowell.common.exception.BusinessException;
|
||||||
|
import com.jsowell.common.util.AdapayUtil;
|
||||||
import com.jsowell.common.util.DateUtils;
|
import com.jsowell.common.util.DateUtils;
|
||||||
import com.jsowell.common.util.SecurityUtils;
|
import com.jsowell.common.util.SecurityUtils;
|
||||||
import com.jsowell.common.util.StringUtils;
|
import com.jsowell.common.util.StringUtils;
|
||||||
@@ -87,6 +91,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private WxpayCallbackRecordService wxpayCallbackRecordService;
|
private WxpayCallbackRecordService wxpayCallbackRecordService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AdapayCallbackRecordService adapayCallbackRecordService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private WechatPayService wechatPayService;
|
private WechatPayService wechatPayService;
|
||||||
|
|
||||||
@@ -1729,13 +1736,34 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refundForOrderWithAdapay(WeChatRefundDTO dto) {
|
public void refundForOrderWithAdapay(WeChatRefundDTO dto) throws BaseAdaPayException {
|
||||||
// 查出来原来的支付信息
|
// 查出来原来的支付信息
|
||||||
|
AdapayCallbackRecord record = adapayCallbackRecordService.selectByOrderCode(dto.getOrderCode());
|
||||||
|
if (Objects.isNull(record)) {
|
||||||
|
logger.error("orderCode:{}, 订单退款处理逻辑, 查询订单微信支付记录为空!", dto.getOrderCode());
|
||||||
|
throw new BusinessException(ReturnCodeEnum.CODE_REFUND_ORDER_CALLBACK_RECORD_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
// 判断支付金额和退款金额
|
// 判断支付金额和退款金额
|
||||||
|
BigDecimal refundAmount = dto.getRefundAmount();
|
||||||
|
BigDecimal payAmt = record.getPayAmt();
|
||||||
|
if (refundAmount.compareTo(payAmt) > 0) {
|
||||||
|
logger.error("订单号:{}, 退款金额:{}(元),大于可退金额{}(元), 抛出异常", dto.getOrderCode(), refundAmount, payAmt);
|
||||||
|
throw new BusinessException(ReturnCodeEnum.CODE_REFUND_ORDER_AMOUNT_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
// 创建汇付退款对象
|
// 创建汇付退款对象 在完成初始化设置情况下,调用方法,获取 Refund对象
|
||||||
|
String id = record.getPaymentId();
|
||||||
|
Map<String, Object> refundParams = Maps.newHashMap();
|
||||||
|
refundParams.put("refund_amt", AdapayUtil.formatAmount(dto.getRefundAmount()));
|
||||||
|
refundParams.put("refund_order_no", SnowflakeIdWorker.getSnowflakeId());
|
||||||
|
Map<String, Object> response = Refund.create(id, refundParams);
|
||||||
|
logger.info("创建退款对象:{}", JSON.toJSONString(response));
|
||||||
|
if (response != null && !response.isEmpty()) {
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(response.get("expend").toString());
|
||||||
|
JSONObject pay_info = jsonObject.getJSONObject("pay_info");
|
||||||
|
Map<String, Object> resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -36,6 +36,13 @@
|
|||||||
from adapay_callback_record
|
from adapay_callback_record
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectByOrderCode" resultType="com.jsowell.pile.domain.AdapayCallbackRecord">
|
||||||
|
select
|
||||||
|
<include refid="Base_Column_List" />
|
||||||
|
from adapay_callback_record
|
||||||
|
where del_flag = '0'
|
||||||
|
and order_code = #{orderCode,jdbcType=VARCHAR}
|
||||||
|
</select>
|
||||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
|
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
|
||||||
delete from adapay_callback_record
|
delete from adapay_callback_record
|
||||||
where id = #{id,jdbcType=VARCHAR}
|
where id = #{id,jdbcType=VARCHAR}
|
||||||
|
|||||||
Reference in New Issue
Block a user