KKSU
2025-02-07 05762546ed54a38ab4559b9c32374f16c5d61dd0
fix(pay): 修复 fiuu 支付回调和退款查询相关问题

- 添加支付回调日志,便于调试和排查问题
- 修复退款查询接口返回数据解析错误
- 优化 RefundStatus 模型,增加 ReasonMsg 字段
3 files modified
12 ■■■■ changed files
src/main/java/cc/mrbird/febs/pay/controller/FIUUController.java 5 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/model/RefundStatus.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/util/FiuuRefundUtil.java 6 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/controller/FIUUController.java
@@ -173,11 +173,14 @@
        String preSkey = DigestUtils.md5Hex(tranID + orderId + status + domain + amount + currency);
        String calculatedSkey = DigestUtils.md5Hex(paydate + domain + preSkey + secretKey);
        MallOrderInfo mallOrderInfo = ValidateEntityUtils.ensureColumnReturnEntity(orderId, MallOrderInfo::getId, mallOrderInfoMapper::selectOne, "订单不存在");
        log.info("callback payResult: {}", mallOrderInfo.getPayResult());
        if("1".equals(mallOrderInfo.getPayResult())){
            return new FebsResponse().success().data("/pages/order/pay/paySuccess?amount="+ amount +"&type=3");
        }
        log.info("callback skey: {}", preSkey);
        log.info("callback calculatedSkey: {}", calculatedSkey);
        if (!calculatedSkey.equals(skey)) {
            throw new FebsException("订单回调失败,---"+orderId);
        }
src/main/java/cc/mrbird/febs/pay/model/RefundStatus.java
@@ -9,5 +9,6 @@
    private String RefundID;
    private String Status;
    private String LastUpdate;
    private String ReasonMsg;
    private String FPXTxnID;
}
src/main/java/cc/mrbird/febs/pay/util/FiuuRefundUtil.java
@@ -8,6 +8,7 @@
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.*;
@Service(value="FiuuRefundUtil")
@@ -46,7 +47,10 @@
        HttpGet request = new HttpGet(url);
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            String response = EntityUtils.toString(client.execute(request).getEntity());
            return objectMapper.readValue(response, RefundStatus.class);
            List<RefundStatus> refundStatusList = objectMapper.readValue(
                    response,
                    objectMapper.getTypeFactory().constructCollectionType(List.class, RefundStatus.class));
            return refundStatusList.get(0);
        }
    }