no message
This commit is contained in:
@ -4,10 +4,9 @@ import com.sczx.pay.config.DynamicWXPayConfig;
|
||||
import com.sczx.pay.dto.PaymentRequest;
|
||||
import com.sczx.pay.dto.PaymentResponse;
|
||||
import com.sczx.pay.dto.RefundRequest;
|
||||
import com.sczx.pay.entity.CompanyWechatConfig;
|
||||
import com.sczx.pay.entity.PaymentRecord;
|
||||
import com.sczx.pay.entity.RefundRecord;
|
||||
import com.sczx.pay.entity.*;
|
||||
import com.sczx.pay.mapper.CompanyWechatConfigMapper;
|
||||
import com.sczx.pay.mapper.OrderPayMapper;
|
||||
import com.sczx.pay.mapper.PaymentRecordMapper;
|
||||
import com.sczx.pay.mapper.RefundRecordMapper;
|
||||
import com.sczx.pay.sdk.WXPay;
|
||||
@ -20,6 +19,7 @@ import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
@ -33,6 +33,9 @@ public class WechatPayService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(WechatPayService.class);
|
||||
|
||||
// 全局公网IP变量
|
||||
private static String SERVER_PUBLIC_IP = "127.0.0.1";
|
||||
|
||||
@Autowired
|
||||
private CompanyWechatConfigMapper companyWechatConfigMapper;
|
||||
|
||||
@ -42,12 +45,39 @@ public class WechatPayService {
|
||||
@Autowired
|
||||
private RefundRecordMapper refundRecordMapper;
|
||||
|
||||
@Autowired
|
||||
private OrderPayMapper orderPayMapper;
|
||||
|
||||
@Value("${wechat.pay.app-id}")
|
||||
private String appId;
|
||||
|
||||
@Value("${wechat.pay.notify-url}")
|
||||
private String notifyUrl;
|
||||
|
||||
@Value("${wechat.pay.refund-notify-url}")
|
||||
private String refundNotifyUrl;
|
||||
|
||||
|
||||
/**
|
||||
* 项目初始化时获取服务器公网IP
|
||||
*/
|
||||
@PostConstruct
|
||||
public void initServerPublicIP() {
|
||||
try {
|
||||
SERVER_PUBLIC_IP = IPUtils.getServerPublicIP();
|
||||
logger.info("服务器公网IP初始化完成: {}", SERVER_PUBLIC_IP);
|
||||
} catch (Exception e) {
|
||||
logger.error("初始化服务器公网IP失败,使用默认IP: {}", SERVER_PUBLIC_IP, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取服务器公网IP(静态方法)
|
||||
*/
|
||||
public static String getServerPublicIP() {
|
||||
return SERVER_PUBLIC_IP;
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序统一下单
|
||||
*/
|
||||
@ -80,13 +110,12 @@ public class WechatPayService {
|
||||
reqData.put("out_trade_no", request.getOutTradeNo());
|
||||
reqData.put("total_fee", String.valueOf(request.getTotalFee()));
|
||||
// 自动获取服务器公网IP
|
||||
reqData.put("spbill_create_ip", IPUtils.getServerPublicIP());
|
||||
reqData.put("spbill_create_ip", getServerPublicIP());
|
||||
reqData.put("notify_url", notifyUrl);
|
||||
reqData.put("trade_type", "JSAPI");
|
||||
reqData.put("openid", request.getOpenId());
|
||||
reqData.put("attach", request.getCompanyId().toString());
|
||||
|
||||
|
||||
// 调用微信统一下单接口
|
||||
Map<String, String> result = wxPay.unifiedOrder(reqData);
|
||||
|
||||
@ -233,6 +262,8 @@ public class WechatPayService {
|
||||
reqData.put("out_refund_no", request.getOutRefundNo());
|
||||
reqData.put("total_fee", String.valueOf(request.getTotalFee()));
|
||||
reqData.put("refund_fee", String.valueOf(request.getRefundFee()));
|
||||
reqData.put("notify_url", refundNotifyUrl);
|
||||
|
||||
|
||||
if (request.getRefundDesc() != null) {
|
||||
reqData.put("refund_desc", request.getRefundDesc());
|
||||
@ -365,7 +396,16 @@ public class WechatPayService {
|
||||
|
||||
if (updated > 0) {
|
||||
logger.info("微信支付记录状态已更新,订单号: {}, 微信交易号: {}", outTradeNo, transactionId);
|
||||
// TODO: 在这里调用其他业务服务更新实际订单状态
|
||||
//更新主订单状态
|
||||
OrderMain orderMain = orderPayMapper.getOrderStatusByOrderNo(outTradeNo);
|
||||
String OrderStatus = orderMain.getOrderStatus();
|
||||
|
||||
if(OrderStatus.equals("WAIT_PAY")){
|
||||
orderPayMapper.updateOrderStatus(outTradeNo,"WAIT_PICK");
|
||||
}else if (OrderStatus.equals("RERENT_WAIT_PAY")){
|
||||
orderPayMapper.updateOrderStatus(outTradeNo,"RENT_ING");
|
||||
}
|
||||
orderPayMapper.updateSubOrderPaymentStatus(outTradeNo,"WX_PAY",PayStatus.SUCCESS.getCode(),transactionId);
|
||||
return true;
|
||||
} else {
|
||||
logger.warn("未找到对应的微信支付记录,订单号: {}", outTradeNo);
|
||||
@ -428,4 +468,58 @@ public class WechatPayService {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理退款通知并更新退款状态
|
||||
*/
|
||||
@Transactional
|
||||
public boolean processRefundNotify(Long companyId, Map<String, String> notifyData) {
|
||||
try {
|
||||
String outRefundNo = notifyData.get("out_refund_no");
|
||||
String refundId = notifyData.get("refund_id");
|
||||
String refundStatus = notifyData.get("refund_status");
|
||||
String outTradeNo = notifyData.get("out_trade_no");
|
||||
|
||||
// 根据退款状态更新退款记录
|
||||
String statusDesc = "";
|
||||
switch (refundStatus) {
|
||||
case "SUCCESS":
|
||||
statusDesc = "退款成功";
|
||||
break;
|
||||
case "REFUNDCLOSE":
|
||||
statusDesc = "退款关闭";
|
||||
break;
|
||||
case "PROCESSING":
|
||||
statusDesc = "退款处理中";
|
||||
break;
|
||||
case "CHANGE":
|
||||
statusDesc = "退款异常";
|
||||
break;
|
||||
default:
|
||||
statusDesc = "未知状态";
|
||||
}
|
||||
|
||||
int updated = refundRecordMapper.updateRefundStatus(
|
||||
outRefundNo,
|
||||
refundStatus,
|
||||
statusDesc,
|
||||
refundId,
|
||||
"SUCCESS".equals(refundStatus) ? new Date() : null, // 退款成功时间
|
||||
new Date() // 更新时间
|
||||
);
|
||||
|
||||
if (updated > 0) {
|
||||
logger.info("微信退款记录状态已更新,退款单号: {}, 微信退款单号: {}, 状态: {}", outRefundNo, refundId, refundStatus);
|
||||
orderPayMapper.updateRefundOrderStatus(outTradeNo,"REFUND_SUCCESS",outRefundNo);
|
||||
return true;
|
||||
} else {
|
||||
logger.warn("未找到对应的微信退款记录,退款单号: {}", outRefundNo);
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("处理微信退款通知异常,退款单号: {}", notifyData.get("out_refund_no"), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user