package com.fzm.mall.pay.config;

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

/**
 * 类名：AlipayConfig
 * 功能：基础配置类
 * 详细：设置帐户有关信息及返回路径
 * 修改日期：2017-04-05
 * 说明：
 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
 *
 * @author wangp
 * @date 2021/3/18 13:35
 * @description 阿里pay配置
 * @since JDK 1.8
 */
@Configuration
public class AlipayConfig {

    // 应用ID,您的APPID，收款账号既是您的APPID对应支付宝账号
    @Value("${alipay.app-id}")
    public String appId;

    // 商户私钥，您的PKCS8格式RSA2私钥
    @Value("${alipay.merchant-private-key}")
    public String merchantPrivateKey;

    // 应用公钥证书文件路径
    @Value("${alipay.merchant-cert-path}")
    public String merchantCertPath;

    // 支付宝公钥证书文件路径
    @Value("${alipay.alipay-cert-path}")
    public String alipayCertPath;

    // 支付宝根证书文件路径
    @Value("${alipay.alipay-root-cert-path}")
    public String alipayRootCertPath;

    // 服务器异步通知页面路径  需http://格式的完整路径，不能加?id=123这类自定义参数，必须外网可以正常访问
    @Value("${alipay.notify-url}")
    public String notifyUrl;

    // 签名方式
    @Value("${alipay.sign-type}")
    public String signType;

    // 支付宝网关
    @Value("${alipay.gateway-url}")
    public String gatewayUrl;

    // 协议类型
    @Value("${alipay.protocol}")
    private String protocol;

    @Bean
    public Config getOptions() {
        Config config = new Config();
        config.protocol = protocol;
        config.gatewayHost = gatewayUrl;
        config.signType = signType;
        config.appId = appId;
        config.merchantPrivateKey = merchantPrivateKey;
        config.merchantCertPath = merchantCertPath;
        config.alipayCertPath = alipayCertPath;
        config.alipayRootCertPath = alipayRootCertPath;
        config.notifyUrl = notifyUrl;
        return config;
    }

    @PostConstruct
    private void initOptions() {
        //设置参数（全局只需设置一次）
        Factory.setOptions(getOptions());
    }
}
