package alipay import ( "fmt" "github.com/smartwalle/alipay" "git.qianqiusoft.com/qianqiusoft/light-apiengine/config" "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys" "io/ioutil" "strings" ) var alipayClient *alipay.Client = nil var AliPayConfig struct { AppId string // app id SignMode string // 签名模式,common:普通公钥;cert:公钥证书 AppPrivateKeyFile string // 保存支付宝开发平台助手生成应用密钥(第一个页面)内容的文件 AppPrivateKey string // 应用密钥 // 签名模式为普通公钥所需的文件 AliPayPublicKeyFile string // 支付宝支付公钥文件 AliPayPublicKey string // 支付宝支付公钥 // 签名模式为共钥证书所需的文件 AppPublicCertFile string // 应用公钥证书,获取csr并上传csr后获得的 AliPayRootCertFile string // 支付宝根证书,获取csr并上传csr后获得的 AliPayPublicCertFile string // 支付宝公钥证书,获取csr并上传csr后获得的 AliPayCallback string // 支付宝完整回调信息接口url,既notifyurl } func init(){ AliPayConfig.AppId = config.AppConfig.GetKey("alipay_appid") AliPayConfig.SignMode = config.AppConfig.GetKey("alipay_sign_mode") // 签名模式,common:普通公钥;cert:公钥证书 if AliPayConfig.SignMode == ""{ // 默认为普通公钥 AliPayConfig.SignMode = "common" } AliPayConfig.AppPrivateKeyFile = config.AppConfig.GetKey("alipay_app_private_key_file") // 保存支付宝开发平台助手生成应用密钥(第一个页面)内容的文件 // 签名模式为普通公钥所需的文件 AliPayConfig.AliPayPublicKeyFile = config.AppConfig.GetKey("alipay_public_key_file") // 签名模式为共钥证书所需的文件 AliPayConfig.AppPublicCertFile = config.AppConfig.GetKey("alipay_app_public_cert_file") // 应用公钥证书,获取csr并上传csr后获得的 AliPayConfig.AliPayRootCertFile = config.AppConfig.GetKey("alipay_root_cert_file") // 支付宝根证书,获取csr并上传csr后获得的 AliPayConfig.AliPayPublicCertFile = config.AppConfig.GetKey("alipay_public_cert_file")// 支付宝公钥证书,获取csr并上传csr后获得的 // 回调 AliPayConfig.AliPayCallback = config.AppConfig.GetKey("alipay_callback") // 支付宝完整回调信息接口url,既notifyurl bytess , err := ioutil.ReadFile(AliPayConfig.AppPrivateKeyFile) if err != nil{ fmt.Println("init alipay error, app private key file", AliPayConfig.AppPrivateKeyFile, "does not exist", err.Error()) return } AliPayConfig.AppPrivateKey = strings.TrimSpace(string(bytess)) alipayClient, err = alipay.New(AliPayConfig.AppId, AliPayConfig.AppPrivateKey, true) if err != nil{ fmt.Println("new alipay client error", err.Error()) return } if AliPayConfig.SignMode == "common"{ bytess, err = ioutil.ReadFile(AliPayConfig.AliPayPublicKeyFile) if err != nil{ fmt.Println("read alipay public key error", err.Error(), AliPayConfig.AliPayPublicKeyFile) return } AliPayConfig.AliPayPublicKey = strings.TrimSpace(string(bytess)) err = alipayClient.LoadAliPayPublicKey(AliPayConfig.AliPayPublicKey) if err != nil{ fmt.Println("LoadAliPayPublicKey error", err.Error(), AliPayConfig.AliPayPublicKeyFile) return } }else{ err = alipayClient.LoadAppPublicCertFromFile(AliPayConfig.AppPublicCertFile) if err != nil{ fmt.Println("LoadAppPublicCertFromFile error", err.Error(), AliPayConfig.AppPublicCertFile) return } err = alipayClient.LoadAliPayRootCertFromFile(AliPayConfig.AliPayRootCertFile) if err != nil{ fmt.Println("LoadAliPayRootCertFromFile error", err.Error(), AliPayConfig.AliPayRootCertFile) return } err = alipayClient.LoadAliPayPublicCertFromFile(AliPayConfig.AliPayPublicCertFile) if err != nil{ fmt.Println("LoadAliPayPublicCertFromFile error", err.Error(), AliPayConfig.AliPayPublicCertFile) return } } } /***********************************************************/ // 支付参数 type PayParams struct{ // 请求上下文 Ctx *entitys.CtrlContext // 订单标题 Subject string // 交易单号(最长64位) OutTradeNo string // 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] TotalAmount string // 销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY ProductCode string }