package com.ruoyi.common.auth.ali;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * @author wjh
 * 2024/11/25
 */
@Component
@Data
public class AliConfig {

    // 应用ID
    @Value("${ali.appId}")
    private String appId;

    // 应用私钥
    @Value("${ali.privateKey}")
    private String privateKey;

//    // 应用公钥
//    @Value("${ali.publicKey}")
//    private String publicKey;
//
//    // 支付宝公钥
//    @Value("${ali.alipayPublicKey}")
//    private String alipayPublicKey;

    @Value("${ali.aesPrivateKey}")
    private String aesPrivateKey;

    @Value("${ali.notifyUrl}")
    private String notifyUrl;

    @Value("${ali.transferNotifyUrl}")
    private String transferNotifyUrl;

    @Value("${ali.appCertPath}")
    private String appCertPath;

    @Value("${ali.alipayCertPath}")
    private String alipayCertPath;

    @Value("${ali.alipayRootCertPath}")
    private String alipayRootCertPath;

//    private AlipayConfig getAlipayConfig() {
//        AlipayConfig alipayConfig = new AlipayConfig();
//        alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
//        alipayConfig.setAppId(appId);
//        alipayConfig.setPrivateKey(privateKey);
//        alipayConfig.setAlipayPublicKey(alipayPublicKey);
//        alipayConfig.setFormat("json");
//        alipayConfig.setCharset("UTF-8");
//        alipayConfig.setSignType("RSA2");
//        return alipayConfig;
//    }

    // 证书模式
    @Bean
    public AlipayClient alipayClient() throws AlipayApiException {
        AlipayConfig alipayConfig = new AlipayConfig();
        //设置网关地址
        alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
        //设置应用APPID
        alipayConfig.setAppId(this.getAppId());
        //设置应用私钥
        alipayConfig.setPrivateKey(this.getPrivateKey());
        //设置应用公钥证书路径
        alipayConfig.setAppCertPath(this.getAppCertPath());
        //设置支付宝公钥证书路径
        alipayConfig.setAlipayPublicCertPath(this.getAlipayCertPath());
        //设置支付宝根证书路径
        alipayConfig.setRootCertPath(this.alipayRootCertPath);
        //设置请求格式，固定值json
        alipayConfig.setFormat("json");
        //设置字符集
        alipayConfig.setCharset("UTF-8");
        //设置签名类型
        alipayConfig.setSignType("RSA2");

        return new DefaultAlipayClient(alipayConfig);
    }
}
