package ali

import (
	"fmt"
	"github.com/smartwalle/alipay/v3"
	"io/ioutil"
	"sync"
	"xiaoniaokuaiyan.com/xiaoniao/config"
)

/**
* @Author: qz
* @Date: 2021/8/6 10:41
* @Description:
 */

var aliClient *alipay.Client
var once sync.Once

type Config map[string]string

var DefaultConfig Config

func createClient() {
	sec := config.IniConf.Section("ali")
	DefaultConfig = Config{
		"appid":        sec.Key("ali.appid").Value(),
		"private_key":  sec.Key("ali.private_key").Value(),
		"app_crt":      sec.Key("ali.app_crt").Value(),
		"ali_crt":      sec.Key("ali.ali_crt").Value(),
		"ali_root_crt": sec.Key("ali.ali_root_crt").Value(),
	}
	privateKey, err := ioutil.ReadFile(DefaultConfig["private_key"])
	if err != nil {
		fmt.Println(err)
		return
	}
	aliClient, _ = alipay.New(DefaultConfig["appid"], string(privateKey), true)
	aliClient.LoadAliPayPublicCertFromFile(DefaultConfig["ali_crt"])
	aliClient.LoadAliPayRootCertFromFile(DefaultConfig["ali_root_crt"])
	aliClient.LoadAppPublicCertFromFile(DefaultConfig["app_crt"])
}

func GetAliClient() *alipay.Client {
	once.Do(func() {
		createClient()
		config.RegistChangeCallback(createClient)
	})
	return aliClient
}