增加系统自动退款 相关逻辑。
This commit is contained in:
parent
ebde9c0bdd
commit
f3b5f63f59
@ -52,7 +52,7 @@ import java.util.List;
|
|||||||
@Service
|
@Service
|
||||||
public class LakalaPayServiceImpl implements LakalaPayService {
|
public class LakalaPayServiceImpl implements LakalaPayService {
|
||||||
private static final boolean init = false;
|
private static final boolean init = false;
|
||||||
|
|
||||||
@Value("${lakala.server_url}")
|
@Value("${lakala.server_url}")
|
||||||
private String serverUrl; //服务地址
|
private String serverUrl; //服务地址
|
||||||
@Value("${lakala.app_id}")
|
@Value("${lakala.app_id}")
|
||||||
@ -230,6 +230,9 @@ public class LakalaPayServiceImpl implements LakalaPayService {
|
|||||||
log.error("无法获取店铺的拉卡拉商户号或终端号: storeId={}", storeId);
|
log.error("无法获取店铺的拉卡拉商户号或终端号: storeId={}", storeId);
|
||||||
return Pair.of(false, I18nUtil._("缺少商户号参数,退款失败!"));
|
return Pair.of(false, I18nUtil._("缺少商户号参数,退款失败!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO 重要的逻辑,获取是否已经分账?已分账:分账退回;查商家账户余额够不够退回?够就执行退回
|
||||||
|
|
||||||
// 5. 构造退款请求并发送
|
// 5. 构造退款请求并发送
|
||||||
V3LabsRelationRefundRequest refundRequest = new V3LabsRelationRefundRequest();
|
V3LabsRelationRefundRequest refundRequest = new V3LabsRelationRefundRequest();
|
||||||
refundRequest.setOutTradeNo(outTradeNo);
|
refundRequest.setOutTradeNo(outTradeNo);
|
||||||
@ -261,8 +264,11 @@ public class LakalaPayServiceImpl implements LakalaPayService {
|
|||||||
log.error("拉卡拉退款失败, 错误信息: {}", errorMessage);
|
log.error("拉卡拉退款失败, 错误信息: {}", errorMessage);
|
||||||
return Pair.of(false, I18nUtil._(errorMessage));
|
return Pair.of(false, I18nUtil._(errorMessage));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSONObject responseData = lakalaResponseJson.getJSONObject("resp_data");
|
||||||
log.info("拉卡拉退款成功: outTradeNo={}", outTradeNo);
|
log.info("拉卡拉退款成功: outTradeNo={}", outTradeNo);
|
||||||
return Pair.of(true, I18nUtil._("退款成功!"));
|
return Pair.of(true, responseData == null ? "" : responseData.toString());
|
||||||
|
|
||||||
} catch (SDKException e) {
|
} catch (SDKException e) {
|
||||||
log.error("拉卡拉退款SDK异常: ", e);
|
log.error("拉卡拉退款SDK异常: ", e);
|
||||||
return Pair.of(false, I18nUtil._("拉卡拉退款SDK异常,退款失败!") + e.getMessage());
|
return Pair.of(false, I18nUtil._("拉卡拉退款SDK异常,退款失败!") + e.getMessage());
|
||||||
|
|||||||
@ -64,6 +64,7 @@ import io.seata.spring.annotation.GlobalTransactional;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.util.Pair;
|
||||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.TransactionDefinition;
|
import org.springframework.transaction.TransactionDefinition;
|
||||||
@ -1691,41 +1692,46 @@ public class PayUserPayServiceImpl extends BaseServiceImpl<PayUserPayMapper, Pay
|
|||||||
* 拉卡拉退款
|
* 拉卡拉退款
|
||||||
*
|
*
|
||||||
* @param orderReturn
|
* @param orderReturn
|
||||||
* @return
|
* @return ShopOrderReturn 退款结果信息
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ShopOrderReturn lklPayRefund(ShopOrderReturn orderReturn) {
|
public ShopOrderReturn lklPayRefund(ShopOrderReturn orderReturn) {
|
||||||
String deposit_trade_no = orderReturn.getDeposit_trade_no();
|
// 获取并处理交易号
|
||||||
if (CheckUtil.isEmpty(deposit_trade_no)) {
|
String deposit_trade_no = CheckUtil.isEmpty(orderReturn.getDeposit_trade_no()) ? "" : orderReturn.getDeposit_trade_no();
|
||||||
deposit_trade_no = "";
|
|
||||||
}
|
|
||||||
BigDecimal trade_payment_amount = orderReturn.getTrade_payment_amount();
|
|
||||||
String refundAmount = Integer.toString(NumberUtil.mul(trade_payment_amount, 100).intValue());
|
|
||||||
WxPayApiConfig wxPayApiConfig = WxPayApiConfigKit.getWxPayApiConfig();
|
|
||||||
Map<String, String> params = RefundModel.builder().appid(wxPayApiConfig.getAppId()).mch_id(wxPayApiConfig.getMchId()).nonce_str(WxPayKit.generateStr()).transaction_id(deposit_trade_no).out_refund_no(WxPayKit.generateStr()).total_fee(refundAmount).refund_fee(refundAmount).build().createSign(wxPayApiConfig.getPartnerKey(), SignType.MD5);
|
|
||||||
logger.info(String.format(I18nUtil._("微信退款请求参数参数: params【%s】"), params.toString()));
|
|
||||||
InputStream certInStream = PayKit.getFileToStream(wxPayApiConfig.getCertPath());
|
|
||||||
//IJPAY低版本jdk环境使用退款方法jdk1.8.0_111以下
|
|
||||||
//String xmlResult = WxPayApi.orderRefund(false, params, certInStream, wxPayApiConfig.getMchId());
|
|
||||||
//下面的方法解决IJPAY高版本jdk导致退款协议不支持问题jdk1.8.0_111以上
|
|
||||||
String xmlResult = HttpKit.getDelegate().post(WxPayApi.getReqUrl(WxApiType.REFUND, null, false), WxPayKit.toXml(params), certInStream, wxPayApiConfig.getMchId(), "");
|
|
||||||
logger.info(String.format(I18nUtil._("微信退款返回参数: xmlResult【%s】"), xmlResult));
|
|
||||||
Map<String, String> resultMap = WxPayKit.xmlToMap(xmlResult);
|
|
||||||
String returnCode = resultMap.get("return_code");
|
|
||||||
String resultCode = resultMap.get("result_code");
|
|
||||||
|
|
||||||
if (!WxPayKit.codeIsOk(returnCode) || !WxPayKit.codeIsOk(resultCode)) {
|
// 调用拉卡拉退款接口
|
||||||
LogUtil.error("微信退款异常!" + resultMap);
|
Pair<Boolean, String> resp = lakalaPayService.innerLklRefund(
|
||||||
|
orderReturn.getStore_id(),
|
||||||
|
orderReturn.getReturn_id(),
|
||||||
|
deposit_trade_no,
|
||||||
|
Integer.toString(NumberUtil.mul(orderReturn.getTrade_payment_amount(), 100).intValue()),
|
||||||
|
orderReturn.getReturn_buyer_message()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!resp.getFirst()) {
|
||||||
|
LogUtil.error("拉卡拉退款异常: " + resp.getSecond());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
ShopOrderReturn shopOrderReturn = new ShopOrderReturn();
|
// 解析响应并获取退单号
|
||||||
shopOrderReturn.setReturn_channel_flag(1);
|
String lklTradeNo = "";
|
||||||
shopOrderReturn.setDeposit_trade_no(deposit_trade_no);
|
try {
|
||||||
shopOrderReturn.setOrder_id(orderReturn.getOrder_id());
|
JSONObject respData = StrUtil.isNotBlank(resp.getSecond()) ? JSONObject.parseObject(resp.getSecond()) : null;
|
||||||
shopOrderReturn.setReturn_channel_trans_id(resultMap.get("refund_id"));
|
lklTradeNo = respData != null ? respData.getString("trade_no") : "";
|
||||||
shopOrderReturn.setReturn_channel_time(new Date());
|
} catch (Exception e) {
|
||||||
return shopOrderReturn;
|
LogUtil.error("解析拉卡拉退款响应数据失败: " + e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构造并返回结果
|
||||||
|
String finalLklTradeNo = lklTradeNo;
|
||||||
|
return new ShopOrderReturn() {{
|
||||||
|
setReturn_channel_flag(1);
|
||||||
|
setDeposit_trade_no(deposit_trade_no);
|
||||||
|
setOrder_id(orderReturn.getOrder_id());
|
||||||
|
setReturn_channel_trans_id(finalLklTradeNo);
|
||||||
|
setReturn_channel_time(new Date());
|
||||||
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -942,6 +942,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl<ShopOrderReturnM
|
|||||||
}
|
}
|
||||||
|
|
||||||
shopOrderReturn.setReturn_state_id(StateCode.RETURN_PROCESS_RECEIVED);
|
shopOrderReturn.setReturn_state_id(StateCode.RETURN_PROCESS_RECEIVED);
|
||||||
|
shopOrderReturn.setReturn_store_message("系统自动退款");
|
||||||
shopOrderReturn.setReturn_flag(returnFlag);
|
shopOrderReturn.setReturn_flag(returnFlag);
|
||||||
// end 待审核状态
|
// end 待审核状态
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user