增加系统自动退款 相关逻辑。
This commit is contained in:
parent
ebde9c0bdd
commit
f3b5f63f59
@ -52,7 +52,7 @@ import java.util.List;
|
||||
@Service
|
||||
public class LakalaPayServiceImpl implements LakalaPayService {
|
||||
private static final boolean init = false;
|
||||
|
||||
|
||||
@Value("${lakala.server_url}")
|
||||
private String serverUrl; //服务地址
|
||||
@Value("${lakala.app_id}")
|
||||
@ -230,6 +230,9 @@ public class LakalaPayServiceImpl implements LakalaPayService {
|
||||
log.error("无法获取店铺的拉卡拉商户号或终端号: storeId={}", storeId);
|
||||
return Pair.of(false, I18nUtil._("缺少商户号参数,退款失败!"));
|
||||
}
|
||||
|
||||
// TODO 重要的逻辑,获取是否已经分账?已分账:分账退回;查商家账户余额够不够退回?够就执行退回
|
||||
|
||||
// 5. 构造退款请求并发送
|
||||
V3LabsRelationRefundRequest refundRequest = new V3LabsRelationRefundRequest();
|
||||
refundRequest.setOutTradeNo(outTradeNo);
|
||||
@ -261,8 +264,11 @@ public class LakalaPayServiceImpl implements LakalaPayService {
|
||||
log.error("拉卡拉退款失败, 错误信息: {}", errorMessage);
|
||||
return Pair.of(false, I18nUtil._(errorMessage));
|
||||
}
|
||||
|
||||
JSONObject responseData = lakalaResponseJson.getJSONObject("resp_data");
|
||||
log.info("拉卡拉退款成功: outTradeNo={}", outTradeNo);
|
||||
return Pair.of(true, I18nUtil._("退款成功!"));
|
||||
return Pair.of(true, responseData == null ? "" : responseData.toString());
|
||||
|
||||
} catch (SDKException e) {
|
||||
log.error("拉卡拉退款SDK异常: ", e);
|
||||
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.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.util.Pair;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.TransactionDefinition;
|
||||
@ -1691,41 +1692,46 @@ public class PayUserPayServiceImpl extends BaseServiceImpl<PayUserPayMapper, Pay
|
||||
* 拉卡拉退款
|
||||
*
|
||||
* @param orderReturn
|
||||
* @return
|
||||
* @return ShopOrderReturn 退款结果信息
|
||||
*/
|
||||
@Override
|
||||
public ShopOrderReturn lklPayRefund(ShopOrderReturn orderReturn) {
|
||||
String deposit_trade_no = orderReturn.getDeposit_trade_no();
|
||||
if (CheckUtil.isEmpty(deposit_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");
|
||||
// 获取并处理交易号
|
||||
String deposit_trade_no = CheckUtil.isEmpty(orderReturn.getDeposit_trade_no()) ? "" : orderReturn.getDeposit_trade_no();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
ShopOrderReturn shopOrderReturn = new ShopOrderReturn();
|
||||
shopOrderReturn.setReturn_channel_flag(1);
|
||||
shopOrderReturn.setDeposit_trade_no(deposit_trade_no);
|
||||
shopOrderReturn.setOrder_id(orderReturn.getOrder_id());
|
||||
shopOrderReturn.setReturn_channel_trans_id(resultMap.get("refund_id"));
|
||||
shopOrderReturn.setReturn_channel_time(new Date());
|
||||
return shopOrderReturn;
|
||||
// 解析响应并获取退单号
|
||||
String lklTradeNo = "";
|
||||
try {
|
||||
JSONObject respData = StrUtil.isNotBlank(resp.getSecond()) ? JSONObject.parseObject(resp.getSecond()) : null;
|
||||
lklTradeNo = respData != null ? respData.getString("trade_no") : "";
|
||||
} catch (Exception e) {
|
||||
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_store_message("系统自动退款");
|
||||
shopOrderReturn.setReturn_flag(returnFlag);
|
||||
// end 待审核状态
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user