package com.czg.third.alipay;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.v3.ApiClient;
import com.alipay.v3.Configuration;
import com.czg.third.alipay.dto.config.AlipayConfigDto;
import lombok.extern.slf4j.Slf4j;

/**
 * @author yjjie
 * @date 2026/1/4 13:48
 */
@Slf4j
public class AlipayClient {

    public static DefaultAlipayClient getDefaultClient(AlipayConfigDto configDto) {
        try {
            return new DefaultAlipayClient(getAlipayConfig(configDto));
        } catch (AlipayApiException e) {
            log.error("创建支付宝客户端失败", e);
            return null;
        }
    }

    public static void setApiClient(AlipayConfigDto configDto) {
        if (configDto == null) {
            configDto = AlipayConfigDto.getDefaultConfig();
        }
        try {
            ApiClient defaultClient = Configuration.getDefaultApiClient();
            // 初始化alipay参数（全局设置一次）
            com.alipay.v3.util.model.AlipayConfig alipayConfig = new com.alipay.v3.util.model.AlipayConfig();
            alipayConfig.setServerUrl(configDto.getDomain());
            alipayConfig.setAppId(configDto.getAppId());
            alipayConfig.setAlipayPublicKey(configDto.getAlipayPublicKey());
            alipayConfig.setPrivateKey(configDto.getPrivateKey());
            defaultClient.setAlipayConfig(alipayConfig);
        } catch (Exception e) {
            log.error("创建支付宝客户端失败", e);
        }
    }

    public static AlipayConfig getAlipayConfig(AlipayConfigDto configDto) {
        if (configDto == null) {
            configDto = AlipayConfigDto.getDefaultConfig();
        }

        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setServerUrl(configDto.getDomain());
        alipayConfig.setAppId(configDto.getAppId());
        alipayConfig.setPrivateKey(configDto.getPrivateKey());
        alipayConfig.setFormat("json");
        alipayConfig.setAlipayPublicKey(configDto.getAlipayPublicKey());
        alipayConfig.setCharset("UTF-8");
        alipayConfig.setSignType("RSA2");

        return alipayConfig;
    }
}
