| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package server
- import (
- "context"
- "github.com/go-pay/gopay"
- "github.com/go-pay/gopay/alipay"
- "github.com/shopspring/decimal"
- "github.com/spf13/viper"
- "go.uber.org/zap"
- "go_zh/pkg/utils"
- "sync"
- )
- type AliPayServer struct {
- CertFile string //公钥证书地址
- PrivateKeyFile string //私钥证书地址
- AppId string //appid
- PrivateKey string //密钥
- privateKeyInfo string
- PublicKeyInfo string
- }
- var (
- aliPayServerInstance *AliPayServer
- aliPayServerOnce sync.Once
- )
- // GetAliPayServerInstance 获取单例实例
- func GetAliPayServerInstance() *AliPayServer {
- aliPayServerOnce.Do(func() {
- aliPayServerInstance = &AliPayServer{
- CertFile: viper.GetString("aliPay.certFile"),
- PrivateKeyFile: viper.GetString("aliPay.privateKeyFile"),
- AppId: viper.GetString("aliPay.appId"),
- PrivateKey: viper.GetString("aliPay.privateKey"),
- }
- privateKeyStr := utils.LoadPrivateKeyWithPath(aliPayServerInstance.PrivateKeyFile)
- aliPayServerInstance.privateKeyInfo = privateKeyStr
- aliPayPublicKeyStr := utils.LoadPublicKeyWithPath(aliPayServerInstance.CertFile)
- aliPayServerInstance.PublicKeyInfo = aliPayPublicKeyStr
- })
- return aliPayServerInstance
- }
- // GetAliWapPay 获取支付宝手机网站支付
- func (ali *AliPayServer) GetAliWapPay(orderSn string, payMoney decimal.Decimal, boby string, notifyUrl string, returnUrl string) string {
- // 初始化支付宝客户端
- // appId:应用ID
- // privateKey:应用私钥,支持PKCS1和PKCS8
- // isProd:是否是正式环境
- client, err := alipay.NewClient(ali.AppId, ali.privateKeyInfo, true)
- if err != nil {
- zap.L().Error("支付宝支付NewClient failed", zap.Error(err))
- }
- // 注意:具体设置哪些参数,根据不同的方法而不同,此处列举出所有设置参数
- client.SetLocation(alipay.LocationShanghai). // 设置时区,不设置或出错均为默认服务器时间
- SetCharset(alipay.UTF8). // 设置字符编码,不设置默认 utf-8
- SetSignType(alipay.RSA2). // 设置签名类型,不设置默认 RSA2
- SetReturnUrl(returnUrl). // 设置返回URL
- SetNotifyUrl(notifyUrl)
- // 初始化 BodyMap
- bm := make(gopay.BodyMap)
- bm.Set("subject", boby).
- Set("out_trade_no", orderSn).
- Set("total_amount", payMoney)
- aliRsp, err := client.TradeWapPay(context.Background(), bm)
- if err != nil {
- zap.L().Error("支付宝手机网站支付请求失败:", zap.Error(err))
- }
- return aliRsp
- }
|