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