service/library/payclients/wxpaycli/client.go

80 lines
1.9 KiB
Go
Raw Normal View History

2023-12-21 22:17:40 +08:00
package wxpaycli
import (
2024-02-03 16:04:56 +08:00
"context"
"time"
"github.com/go-pay/gopay"
2023-12-21 22:17:40 +08:00
wxpay "github.com/go-pay/gopay/wechat/v3"
2024-02-03 16:04:56 +08:00
2023-12-21 22:17:40 +08:00
"service/bizcommon/util"
"service/library/configcenter"
"service/library/logger"
)
2024-02-03 16:04:56 +08:00
const (
DefaultOrderTimeoutSeconds = 900 // 默认订单超时时间,单位: s
)
var defaultWxpayClient *WxpayClient
2023-12-21 22:17:40 +08:00
type WxpayClient struct {
*wxpay.ClientV3
2024-02-03 16:04:56 +08:00
AppId string `json:"app_id"`
NotifyUrl string `json:"notify_url"`
2023-12-21 22:17:40 +08:00
}
2024-02-03 16:04:56 +08:00
func GetDefaultWxpayClient() *WxpayClient {
return defaultWxpayClient
}
func Init(cfg *configcenter.WxpayClientConfig) (err error) {
wxpayCli, err := wxpay.NewClientV3(cfg.MchId, cfg.SerialNo, cfg.ApiV3Key, cfg.PrivateKey)
2023-12-21 22:17:40 +08:00
if err != nil {
logger.Error("NewClientV3 fail, cfg: %v, err: %v", util.ToJson(cfg), err)
return
}
2024-02-03 16:04:56 +08:00
defaultWxpayClient = &WxpayClient{
ClientV3: wxpayCli,
}
return
}
// 验签
// 微信支付 native支付
type NativePayParam struct {
Description string
OutTradeNo string // 商家订单id我们自己的订单id
TotalAmount int64 // 金额,单位:分
TimeOutSeconds int // 订单有效时间,单位:秒
}
func (c *WxpayClient) NativePay(ctx context.Context, param *NativePayParam) {
if param.TimeOutSeconds <= 0 {
param.TimeOutSeconds = DefaultOrderTimeoutSeconds
}
bm := gopay.BodyMap{
"appid": c.AppId,
"description": param.Description,
"out_trade_no": param.OutTradeNo,
"time_expire": time.Now().Add(time.Second * time.Duration(param.TimeOutSeconds)).Format(time.RFC3339),
"notify_url": c.NotifyUrl,
"amount": gopay.BodyMap{
"total": param.TotalAmount,
"currency": "CNY",
},
}
wxRsp, err := c.V3TransactionNative(ctx, bm)
if err != nil {
return
}
if wxRsp.Code != wxpay.Success {
logger.Info("wxpay NativePay resp, fail: %v", util.ToJson(wxRsp))
return
2023-12-21 22:17:40 +08:00
}
2024-02-03 16:04:56 +08:00
logger.Info("wxpay NativePay resp, success: %v", util.ToJson(wxRsp))
2023-12-21 22:17:40 +08:00
return
}