package alipaycli import ( "context" "fmt" "github.com/go-pay/gopay" "github.com/go-pay/gopay/alipay" "service/bizcommon/util" "service/library/configcenter" "service/library/logger" "time" ) const ( DefaultOrderTimeoutSeconds = 900 // 默认订单超时时间,单位: s ) var defaultAlipayClient *AlipayClient func GetDefaultAlipayClient() *AlipayClient { return defaultAlipayClient } type AlipayClient struct { *alipay.Client } func Init(cfg *configcenter.AlipayClientConfig) (err error) { alipayCli, err := alipay.NewClient(cfg.Appid, cfg.PrivateKey, true) if err != nil { logger.Error("NewClient fail, cfg: %v, err: %v", util.ToJson(cfg), err) return } alipayCli.SetNotifyUrl(cfg.NotifyUrl) defaultAlipayClient = &AlipayClient{ alipayCli, } return } // 支付宝 app支付 type AppPayParam struct { OutTradeNo string // 商家订单id,我们自己的订单id Subject string // 主题 TotalAmount int64 // 金额,单位:分 TimeOutSeconds int // 订单有效时间,单位:秒 } func (c *AlipayClient) AppPay(ctx context.Context, param *AppPayParam) (alipayAppParamStr string, err error) { if param.TimeOutSeconds <= 0 { param.TimeOutSeconds = DefaultOrderTimeoutSeconds } bm := gopay.BodyMap{ "out_trade_no": param.OutTradeNo, "subject": param.Subject, "total_amount": fmt.Sprintf("%.2f", float64(param.TotalAmount)/100.0), "time_expire": time.Now().Add(time.Second * time.Duration(param.TimeOutSeconds)).Format("2006-01-02 15:04:05"), } alipayAppParamStr, err = c.TradeAppPay(ctx, bm) if err != nil { return } logger.Info("alipay TradeAppPay param: %v", alipayAppParamStr) return } // 支付宝 手机web支付 type WapPayParam struct { OutTradeNo string // 商家订单id,我们自己的订单id Subject string // 主题 TotalAmount int64 // 金额,单位:分 TimeOutSeconds int // 订单有效时间,单位:秒 } func (c *AlipayClient) WapPay(ctx context.Context, param *WapPayParam) (alipayWapParamStr string, err error) { if param.TimeOutSeconds <= 0 { param.TimeOutSeconds = DefaultOrderTimeoutSeconds } bm := gopay.BodyMap{ "out_trade_no": param.OutTradeNo, "subject": param.Subject, "total_amount": fmt.Sprintf("%.2f", float64(param.TotalAmount)/100.0), "time_expire": time.Now().Add(time.Second * time.Duration(param.TimeOutSeconds)).Format("2006-01-02 15:04:05"), } alipayWapParamStr, err = c.TradeWapPay(ctx, bm) if err != nil { return } logger.Info("alipay TradeWapPay param: %v", alipayWapParamStr) return }