KKSU
2025-02-07 62fc17e246f99c73f162f243490a811e540c0043
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package cc.mrbird.febs.pay.util;
 
import cc.mrbird.febs.pay.model.RefundStatus;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service;
 
import java.util.List;
@Slf4j
@Service(value="FiuuRefundUtil")
public class FiuuRefundUtil {
 
    private static final String API_BASE_URL = "https://api.fiuu.com/RMS/API/refundAPI/";
    private static final String MERCHANT_ID = "e2umart01";
    private static final String VERIFY_KEY = "4e3a4ed58e62ddbfacf41f6d5ec56bf2";
 
    private final ObjectMapper objectMapper = new ObjectMapper();
 
    // 退款状态查询(根据TxnID)
    public RefundStatus queryByTxnId(String txnId) throws Exception {
        String signature = HashUtils.md5(txnId + MERCHANT_ID + VERIFY_KEY);
        String url = API_BASE_URL + "q_by_txn.php?TxnID=" + txnId
                + "&MerchantID=" + MERCHANT_ID
                + "&Signature=" + signature;
 
        return executeQuery(url);
    }
 
    // 退款状态查询(根据RefID)
    public RefundStatus queryByRefId(String refId) throws Exception {
        String signature = HashUtils.md5(refId + MERCHANT_ID + VERIFY_KEY);
        String url = API_BASE_URL + "q_by_refID.php?RefID=" + refId
                + "&MerchantID=" + MERCHANT_ID
                + "&Signature=" + signature;
 
        return executeQuery(url);
    }
 
    private RefundStatus executeQuery(String url) throws Exception {
        HttpGet request = new HttpGet(url);
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            String response = EntityUtils.toString(client.execute(request).getEntity());
            log.info("Response: " + response);
 
            List<RefundStatus> refundStatusList = JSONUtil.toList(JSONUtil.parseArray(response), RefundStatus.class);
            return refundStatusList.get(0);
        }
    }
 
    // 异步轮询退款状态
    public RefundStatus pollRefundStatus(String txnId) throws Exception {
        RefundStatus status = queryByTxnId(txnId);
        return status;
    }
}