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 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; } }