fix wx payment

This commit is contained in:
liangzai 2025-01-21 20:00:18 +08:00
parent 8d3750618c
commit 6099e5bec7
11 changed files with 115 additions and 65 deletions

View File

@ -13,7 +13,8 @@ type (
PayMethod string `json:"pay_method"` PayMethod string `json:"pay_method"`
} }
PaymentResp { PaymentResp {
prepayID string `json:"prepay_id"` prepayData interface{} `json:"prepay_data"`
prepayId string `json:"prepay_id"`
OrderID int64 `json:"order_id"` OrderID int64 `json:"order_id"`
} }
) )

View File

@ -36,10 +36,12 @@ Alipay:
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/alipay/callback" NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/alipay/callback"
ReturnURL: "http://localhost:5678/inquire" ReturnURL: "http://localhost:5678/inquire"
Wxpay: Wxpay:
AppID: "1682635136" AppID: "wxa581992dc74d860e"
MchID: "1682635136" MchID: "1704330055"
MchCertificateSerialNumber: "5369B8AEEBDCF7AF274510252E6A8C0659C30F61" MchPublicKeyID: "PUB_KEY_ID_0117043300552025010900447500000187"
MchApiv3Key: "e3ea4cf0765f1e71b01bb387dfcdbc9f" MchPublicKeyPath: "etc/merchant/pub_key.pem"
MchCertificateSerialNumber: "434FE8C0FC8CFEF28B76B3EF35DD2297E977A3CB"
MchApiv3Key: "h6Jk9Qm7W1pXyFzA4bL2V8CzH0K3wDqw"
MchPrivateKeyPath: "etc/merchant/apiclient_key.pem" MchPrivateKeyPath: "etc/merchant/apiclient_key.pem"
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/wechat/callback" NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/wechat/callback"
RefundNotifyUrl: "https://6m4685017o.goho.co/api/v1/wechat/refund_callback" RefundNotifyUrl: "https://6m4685017o.goho.co/api/v1/wechat/refund_callback"

View File

@ -38,13 +38,15 @@ Alipay:
NotifyUrl: "https://www.tianyuandb.com/api/v1/pay/alipay/callback" NotifyUrl: "https://www.tianyuandb.com/api/v1/pay/alipay/callback"
ReturnURL: "https://www.tianyuandb.com/report" ReturnURL: "https://www.tianyuandb.com/report"
Wxpay: Wxpay:
AppID: "1682635136" AppID: "wxa581992dc74d860e"
MchID: "1682635136" MchID: "1704330055"
MchCertificateSerialNumber: "5369B8AEEBDCF7AF274510252E6A8C0659C30F61" MchPublicKeyID: "PUB_KEY_ID_0117043300552025010900447500000187"
MchApiv3Key: "e3ea4cf0765f1e71b01bb387dfcdbc9f" MchPublicKeyPath: "etc/merchant/pub_key.pem"
MchCertificateSerialNumber: "434FE8C0FC8CFEF28B76B3EF35DD2297E977A3CB"
MchApiv3Key: "h6Jk9Qm7W1pXyFzA4bL2V8CzH0K3wDqw"
MchPrivateKeyPath: "etc/merchant/apiclient_key.pem" MchPrivateKeyPath: "etc/merchant/apiclient_key.pem"
NotifyUrl: "https://app.tianyuandb.com/api/v1/pay/wechat/callback" NotifyUrl: "https://www.tianyuandb.com/api/v1/pay/wechat/callback"
RefundNotifyUrl: "https://app.tianyuandb.com/api/v1/wechat/refund_callback" RefundNotifyUrl: "https://www.tianyuandb.com/api/v1/wechat/refund_callback"
Applepay: Applepay:
ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt" ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt"
SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt" SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt"

View File

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY----- -----BEGIN PRIVATE KEY-----
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
5DljdOYX9IYIHHn3Ig4GeTGe hZ3T2j+d4u74saGGaxOlqw==
-----END PRIVATE KEY----- -----END PRIVATE KEY-----

View File

@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsNH2kztg9gybkuulreL+
BMyakxmKTFqrujYLm+S40v64KbNH3+sWdf1XR59vWjSvGWo+BAbuSIHNmIIFMFKE
sUxqHAYbta4oD9Ogr0+88drnXv+AA6vxQML0KaaTuHessvUhGC5GEUxa+TFefO9/
EjbwL1E/XQ8oBkxHJO6RjKevuts39RjEyocnNhV7m8RP6WIBQeJDXhbfO1etcwdJ
B2yQ1eoPK9kGAqQ7wL4pDXrLXMfS1DXlNHsLf4if7rwu3fibk/qfkKdtmqvUw39f
tCKZRiexIq6ad9kTTjouXUU5EMRAn3ocRvNzCD4RaW1qVYMxFQ8AraQ8W3MXlPeL
EQIDAQAB
-----END PUBLIC KEY-----

View File

@ -50,6 +50,8 @@ type AlipayConfig struct {
type WxpayConfig struct { type WxpayConfig struct {
AppID string AppID string
MchID string MchID string
MchPublicKeyID string
MchPublicKeyPath string
MchCertificateSerialNumber string MchCertificateSerialNumber string
MchApiv3Key string MchApiv3Key string
MchPrivateKeyPath string MchPrivateKeyPath string

View File

@ -68,7 +68,7 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
if aesEncryptErr != nil { if aesEncryptErr != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 加密参数失败: %+v", aesEncryptErr) return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 加密参数失败: %+v", aesEncryptErr)
} }
var prepayID string var prepayData interface{}
var outTradeNo string var outTradeNo string
var amount float64 var amount float64
user, err := l.svcCtx.UserModel.FindOne(l.ctx, userID) user, err := l.svcCtx.UserModel.FindOne(l.ctx, userID)
@ -84,13 +84,13 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
var createOrderErr error var createOrderErr error
if req.PayMethod == "wechatpay" { if req.PayMethod == "wechatpay" {
outTradeNo = l.svcCtx.WechatPayService.GenerateOutTradeNo() outTradeNo = l.svcCtx.WechatPayService.GenerateOutTradeNo()
prepayID, createOrderErr = l.svcCtx.WechatPayService.CreateWechatOrder(l.ctx, amount, product.ProductName, outTradeNo) prepayData, createOrderErr = l.svcCtx.WechatPayService.CreateWechatOrder(l.ctx, amount, product.ProductName, outTradeNo)
} else if req.PayMethod == "alipay" { } else if req.PayMethod == "alipay" {
outTradeNo = l.svcCtx.AlipayService.GenerateOutTradeNo() outTradeNo = l.svcCtx.AlipayService.GenerateOutTradeNo()
prepayID, createOrderErr = l.svcCtx.AlipayService.CreateAlipayOrder(l.ctx, amount, product.ProductName, outTradeNo, brand) prepayData, createOrderErr = l.svcCtx.AlipayService.CreateAlipayOrder(l.ctx, amount, product.ProductName, outTradeNo, brand)
} else if req.PayMethod == "appleiap" { } else if req.PayMethod == "appleiap" {
outTradeNo = l.svcCtx.ApplePayService.GenerateOutTradeNo() outTradeNo = l.svcCtx.ApplePayService.GenerateOutTradeNo()
prepayID = l.svcCtx.ApplePayService.GetIappayAppID(product.ProductEn) prepayData = l.svcCtx.ApplePayService.GetIappayAppID(product.ProductEn)
} }
if createOrderErr != nil { if createOrderErr != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 创建支付订单失败: %+v", createOrderErr) return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 创建支付订单失败: %+v", createOrderErr)
@ -132,5 +132,11 @@ func (l *PaymentLogic) Payment(req *types.PaymentReq) (resp *types.PaymentResp,
return nil, transErr return nil, transErr
} }
return &types.PaymentResp{PrepayID: prepayID, OrderID: orderID}, nil switch v := prepayData.(type) {
case string:
// 如果 prepayData 是字符串类型,直接返回
return &types.PaymentResp{PrepayId: v, OrderID: orderID}, nil
default:
return &types.PaymentResp{PrepayData: prepayData, OrderID: orderID}, nil
}
} }

View File

@ -114,23 +114,23 @@ func GetAccessToken(code string) (*AccessTokenResp, error) {
resp, err := http.Get(url) resp, err := http.Get(url)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "获取access_token失败") return nil, err
} }
defer resp.Body.Close() defer resp.Body.Close()
body, err := io.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "读取access_token响应失败") return nil, err
} }
var accessTokenResp AccessTokenResp var accessTokenResp AccessTokenResp
if err := json.Unmarshal(body, &accessTokenResp); err != nil { if err = json.Unmarshal(body, &accessTokenResp); err != nil {
return nil, errors.Wrap(err, "解析access_token响应失败") return nil, err
} }
if accessTokenResp.AccessToken == "" { //if accessTokenResp.AccessToken == "" {
return nil, errors.New("获取access_token失败") // return nil, errors.New("accessTokenResp.AccessToken为空")
} //}
return &accessTokenResp, nil return &accessTokenResp, nil
} }

View File

@ -18,6 +18,8 @@ import (
"strconv" "strconv"
"time" "time"
"tydata-server/app/user/cmd/api/internal/config" "tydata-server/app/user/cmd/api/internal/config"
"tydata-server/app/user/model"
"tydata-server/common/ctxdata"
"tydata-server/pkg/lzkit/lzUtils" "tydata-server/pkg/lzkit/lzUtils"
) )
@ -35,25 +37,31 @@ type WechatPayService struct {
config config.WxpayConfig config config.WxpayConfig
wechatClient *core.Client wechatClient *core.Client
notifyHandler *notify.Handler notifyHandler *notify.Handler
userAuthModel model.UserAuthModel
} }
// NewWechatPayService 初始化微信支付服务 // NewWechatPayService 初始化微信支付服务
func NewWechatPayService(c config.Config) *WechatPayService { func NewWechatPayService(c config.Config, userAuthModel model.UserAuthModel) *WechatPayService {
// 从配置中加载商户信息 // 从配置中加载商户信息
mchID := c.Wxpay.MchID mchID := c.Wxpay.MchID
mchCertificateSerialNumber := c.Wxpay.MchCertificateSerialNumber mchCertificateSerialNumber := c.Wxpay.MchCertificateSerialNumber
mchAPIv3Key := c.Wxpay.MchApiv3Key mchAPIv3Key := c.Wxpay.MchApiv3Key
mchPublicKeyID := c.Wxpay.MchPublicKeyID
// 从文件中加载商户私钥 // 从文件中加载商户私钥
mchPrivateKey, err := utils.LoadPrivateKeyWithPath(c.Wxpay.MchPrivateKeyPath) mchPrivateKey, err := utils.LoadPrivateKeyWithPath(c.Wxpay.MchPrivateKeyPath)
if err != nil { if err != nil {
logx.Errorf("加载商户私钥失败: %v", err) logx.Errorf("加载商户私钥失败: %v", err)
panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序 panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序
} }
// 从文件中加载公钥
mchPublicKey, err := utils.LoadPublicKeyWithPath(c.Wxpay.MchPublicKeyPath)
if err != nil {
logx.Errorf("加载商户私钥失败: %v", err)
panic(fmt.Sprintf("初始化失败,服务停止: %v", err)) // 记录错误并停止程序
}
// 使用商户私钥和其他参数初始化微信支付客户端 // 使用商户私钥和其他参数初始化微信支付客户端
opts := []core.ClientOption{ opts := []core.ClientOption{
option.WithWechatPayAutoAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchAPIv3Key), option.WithWechatPayPublicKeyAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchPublicKeyID, mchPublicKey),
} }
client, err := core.NewClient(context.Background(), opts...) client, err := core.NewClient(context.Background(), opts...)
if err != nil { if err != nil {
@ -71,6 +79,7 @@ func NewWechatPayService(c config.Config) *WechatPayService {
config: c.Wxpay, config: c.Wxpay,
wechatClient: client, wechatClient: client,
notifyHandler: notifyHandler, notifyHandler: notifyHandler,
userAuthModel: userAuthModel,
} }
} }
@ -104,7 +113,7 @@ func (w *WechatPayService) CreateWechatAppOrder(ctx context.Context, amount floa
} }
// CreateWechatMiniProgramOrder 创建微信小程序支付订单 // CreateWechatMiniProgramOrder 创建微信小程序支付订单
func (w *WechatPayService) CreateWechatMiniProgramOrder(ctx context.Context, amount float64, description string, outTradeNo string, openid string) (string, error) { func (w *WechatPayService) CreateWechatMiniProgramOrder(ctx context.Context, amount float64, description string, outTradeNo string, openid string) (interface{}, error) {
totalAmount := lzUtils.ToWechatAmount(amount) totalAmount := lzUtils.ToWechatAmount(amount)
// 构建支付请求参数 // 构建支付请求参数
@ -131,24 +140,41 @@ func (w *WechatPayService) CreateWechatMiniProgramOrder(ctx context.Context, amo
} }
// 返回预支付交易会话标识 // 返回预支付交易会话标识
return *resp.PrepayId, nil return resp, nil
} }
// CreateWechatOrder 创建微信支付订单(集成 APP、H5、小程序 // CreateWechatOrder 创建微信支付订单(集成 APP、H5、小程序
func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64, description string, outTradeNo string) (string, error) { func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64, description string, outTradeNo string) (interface{}, error) {
// 根据 ctx 中的 platform 判断平台 // 根据 ctx 中的 platform 判断平台
platform := ctx.Value("platform").(string) platform := ctx.Value("platform").(string)
var prepayId string var prepayData interface{}
var err error var err error
switch platform { switch platform {
case "mp-weixin": case "mp-weixin":
// 如果是小程序平台,调用小程序支付订单创建 userID, getUidErr := ctxdata.GetUidFromCtx(ctx)
prepayId, err = w.CreateWechatMiniProgramOrder(ctx, amount, description, outTradeNo, "asdasd") if getUidErr != nil {
return "", getUidErr
}
userAuthModel, findAuthModelErr := w.userAuthModel.FindOneByUserIdAuthType(ctx, userID, model.UserAuthTypeWxMini)
if findAuthModelErr != nil {
return "", findAuthModelErr
}
prepayData, err = w.CreateWechatMiniProgramOrder(ctx, amount, description, outTradeNo, userAuthModel.AuthKey)
case "h5-weixin":
userID, getUidErr := ctxdata.GetUidFromCtx(ctx)
if getUidErr != nil {
return "", getUidErr
}
userAuthModel, findAuthModelErr := w.userAuthModel.FindOneByUserIdAuthType(ctx, userID, model.UserAuthTypeWxh5)
if findAuthModelErr != nil {
return "", findAuthModelErr
}
prepayData, err = w.CreateWechatMiniProgramOrder(ctx, amount, description, outTradeNo, userAuthModel.AuthKey)
case "app": case "app":
// 如果是 APP 平台,调用 APP 支付订单创建 // 如果是 APP 平台,调用 APP 支付订单创建
prepayId, err = w.CreateWechatAppOrder(ctx, amount, description, outTradeNo) prepayData, err = w.CreateWechatAppOrder(ctx, amount, description, outTradeNo)
default: default:
return "", fmt.Errorf("不支持的支付平台: %s", platform) return "", fmt.Errorf("不支持的支付平台: %s", platform)
} }
@ -159,7 +185,7 @@ func (w *WechatPayService) CreateWechatOrder(ctx context.Context, amount float64
} }
// 返回预支付ID // 返回预支付ID
return prepayId, nil return prepayData, nil
} }
// HandleWechatPayNotification 处理微信支付回调 // HandleWechatPayNotification 处理微信支付回调

View File

@ -56,12 +56,13 @@ func NewServiceContext(c config.Config) *ServiceContext {
yushanService := service.NewYushanService(c) yushanService := service.NewYushanService(c)
productFeatureModel := model.NewProductFeatureModel(db, c.CacheRedis) productFeatureModel := model.NewProductFeatureModel(db, c.CacheRedis)
featureModel := model.NewFeatureModel(db, c.CacheRedis) featureModel := model.NewFeatureModel(db, c.CacheRedis)
userAuthModel := model.NewUserAuthModel(db, c.CacheRedis)
return &ServiceContext{ return &ServiceContext{
Config: c, Config: c,
Redis: redis.MustNewRedis(redisConf), Redis: redis.MustNewRedis(redisConf),
SourceInterceptor: middleware.NewSourceInterceptorMiddleware().Handle, SourceInterceptor: middleware.NewSourceInterceptorMiddleware().Handle,
AlipayService: service.NewAliPayService(c), AlipayService: service.NewAliPayService(c),
WechatPayService: service.NewWechatPayService(c), WechatPayService: service.NewWechatPayService(c, userAuthModel),
ApplePayService: service.NewApplePayService(c), ApplePayService: service.NewApplePayService(c),
WestDexService: westDexService, WestDexService: westDexService,
YushanService: yushanService, YushanService: yushanService,
@ -70,7 +71,7 @@ func NewServiceContext(c config.Config) *ServiceContext {
ApiRequestService: service.NewApiRequestService(c, westDexService, yushanService, featureModel, productFeatureModel), ApiRequestService: service.NewApiRequestService(c, westDexService, yushanService, featureModel, productFeatureModel),
AsynqService: service.NewAsynqService(c), AsynqService: service.NewAsynqService(c),
UserModel: model.NewUserModel(db, c.CacheRedis), UserModel: model.NewUserModel(db, c.CacheRedis),
UserAuthModel: model.NewUserAuthModel(db, c.CacheRedis), UserAuthModel: userAuthModel,
ProductModel: model.NewProductModel(db, c.CacheRedis), ProductModel: model.NewProductModel(db, c.CacheRedis),
OrderModel: model.NewOrderModel(db, c.CacheRedis), OrderModel: model.NewOrderModel(db, c.CacheRedis),
QueryModel: model.NewQueryModel(db, c.CacheRedis), QueryModel: model.NewQueryModel(db, c.CacheRedis),

View File

@ -63,7 +63,8 @@ type PaymentReq struct {
} }
type PaymentResp struct { type PaymentResp struct {
PrepayID string `json:"prepay_id"` PrepayData interface{} `json:"prepay_data"`
PrepayId string `json:"prepay_id"`
OrderID int64 `json:"order_id"` OrderID int64 `json:"order_id"`
} }