package alipay import ( "applet/app/db" "applet/app/utils/cache" "code.fnuoos.com/EggPlanet/egg_models.git/src/implement" "code.fnuoos.com/EggPlanet/egg_system_rules.git/enum" "github.com/go-pay/gopay/alipay" "github.com/iGoogle-ink/gopay" "github.com/iGoogle-ink/gopay/pkg/xlog" ) type InitStruct struct { IsProd bool `json:"is_prod" label:"是否生产环境"` AlipayAppId string `json:"alipay_app_id" label:"支付宝商家应用appid"` AlipayPrivateKey string `json:"alipay_private_key" label:"支付宝商家应用私钥"` AlipayPublicKey string `json:"alipay_public_key" label:"支付宝商家应用公钥"` AlipayPublicContentRSA2 []byte `json:"alipay_public_content_rsa_2" label:"支付宝公钥证书"` AlipayRootContent []byte `json:"alipay_root_content" label:"支付宝根证书"` AppPublicContent []byte `json:"app_public_content" label:"应用公钥证书"` } // Init 初始化支付宝客户端 // appid:应用ID // privateKey:应用私钥,支持PKCS1和PKCS8 // isProd:是否是正式环境,沙箱环境请选择新版沙箱应用。 func Init(initData *InitStruct) (client *alipay.Client, err error) { if initData == nil { sysCfgDb := implement.NewSysCfgDb(db.Db, cache.GetPool().Get()) sysCfgMap := sysCfgDb.SysCfgFindWithDb(enum.AlipayAppId, enum.AlipayPrivateKey, enum.AlipayPublicKey, enum.AlipayPublicContentRSA2, enum.AlipayRootContent, enum.AppPublicContent) initData = &InitStruct{ IsProd: true, AlipayAppId: sysCfgMap[enum.AlipayAppId], AlipayPrivateKey: sysCfgMap[enum.AlipayPrivateKey], AlipayPublicKey: sysCfgMap[enum.AlipayPublicKey], AlipayPublicContentRSA2: []byte(sysCfgMap[enum.AlipayPublicContentRSA2]), AlipayRootContent: []byte(sysCfgMap[enum.AlipayRootContent]), AppPublicContent: []byte(sysCfgMap[enum.AppPublicContent]), } } client, err = alipay.NewClient(initData.AlipayAppId, initData.AlipayPrivateKey, initData.IsProd) if err != nil { xlog.Error(err) return } // 自定义配置http请求接收返回结果body大小,默认 10MB client.SetBodySize(10) // 没有特殊需求,可忽略此配置 // 打开Debug开关,输出日志,默认关闭 client.DebugSwitch = gopay.DebugOn client.SetLocation(alipay.LocationShanghai). // 设置时区,不设置或出错均为默认服务器时间 SetCharset(alipay.UTF8). // 设置字符编码,不设置默认 utf-8 SetSignType(alipay.RSA2) // 设置签名类型,不设置默认 RSA2 // SetAppAuthToken("") //授权token //SetReturnUrl("https://www.fmm.ink"). // 设置返回URL // SetNotifyUrl("https://www.fmm.ink"). // 设置异步通知URL // 传入 支付宝公钥证书 alipayPublicCert.crt 内容 client.AutoVerifySign(initData.AlipayPublicContentRSA2) // 传入证书内容 err = client.SetCertSnByContent(initData.AppPublicContent, initData.AlipayRootContent, initData.AlipayPublicContentRSA2) if err != nil { xlog.Debug("SetCertSn:", err) return } return }