diff --git a/api/proto/vas/proto/pay.go b/api/proto/vas/proto/pay.go index 27ececb6..c4f7d246 100644 --- a/api/proto/vas/proto/pay.go +++ b/api/proto/vas/proto/pay.go @@ -40,6 +40,7 @@ type CreateOrderReq struct { Oid1 string Oid2 string Oid3 string + ReturnUrl string } type CreateOrderData struct { @@ -122,7 +123,7 @@ type H5DirectUnlockWechatReq struct { } type H5DirectUnlockWechatData struct { - CoinEnough int `json:"coin_enough"` // 0:不够(用下面的支付宝参数),1:够 + CoinEnough int32 `json:"coin_enough"` // 0:不够(用下面的支付宝参数),1:够 OrderId string `json:"order_id"` // 订单id AlipayParamStr string `json:"alipay_param_str"` // 支付宝 app支付参数 AlipayH5ParamStr string `json:"alipay_h5_param_str"` // 支付宝 h5支付参数 diff --git a/app/mix/service/logic/vas.go b/app/mix/service/logic/vas.go index d880a69d..f5c52992 100644 --- a/app/mix/service/logic/vas.go +++ b/app/mix/service/logic/vas.go @@ -148,7 +148,7 @@ func (v *Vas) CreateOrder(ctx *gin.Context, req *vasproto.CreateOrderReq) (data OutTradeNo: orderId, Subject: product.Subject, TotalAmount: product.RealPrice, - TimeOutSeconds: 7200, + TimeOutSeconds: 900, } alipayParamStr, err = alipayCli.AppPay(ctx, appPayParam) if err != nil { @@ -161,7 +161,8 @@ func (v *Vas) CreateOrder(ctx *gin.Context, req *vasproto.CreateOrderReq) (data OutTradeNo: orderId, Subject: product.Subject, TotalAmount: product.RealPrice, - TimeOutSeconds: 7200, + TimeOutSeconds: 900, + ReturnUrl: req.ReturnUrl, } alipayH5ParamStr, err = alipayCli.WapPay(ctx, appPayParam) if err != nil { @@ -1362,12 +1363,16 @@ func (v *Vas) H5DirectUnlockWechat(ctx *gin.Context, req *vasproto.H5DirectUnloc // 金币够不够 if wallet.GetCoins() >= uVas.GetH5WechatCoinPrice() { - v.OneStepUnlockContact(ctx, &vasproto.OneStepUnlockContactReq{ + _, _, _, err = v.OneStepUnlockContact(ctx, &vasproto.OneStepUnlockContactReq{ BaseRequest: req.BaseRequest, ContactProductId: dbstruct.ProductIdContactWechat, Uid: req.Uid, InviterMid: req.InviterMid, }) + if err != nil { + logger.Error("OneStepUnlockContact fail, req: %v, err: %v", util.ToJson(req), err) + return + } return } @@ -1381,6 +1386,7 @@ func (v *Vas) H5DirectUnlockWechat(ctx *gin.Context, req *vasproto.H5DirectUnloc CalcPrice: uVas.GetH5WechatCoinPrice() * 10, Uid: uid, Oid1: fmt.Sprintf("%d", uid), + ReturnUrl: "https://tiefen.fun/purchased", }) if err != nil { logger.Error("CreateOrder fail, req: %v, err: %v", util.ToJson(req), err) @@ -1440,6 +1446,10 @@ func (v *Vas) AlipayCallback(ctx *gin.Context, p *vasproto.AlipayCallbackParamIn // ali_order_id检查 outOrder, err := v.store.GetOrderByOutOrderId(ctx, nil, alipayOrderId) + switch err { + case sql.ErrNoRows: + err = nil + } if err != nil { logger.Error("GetOrderByOutOrderId fail, p: %v, err: %v", util.ToJson(p), err) return diff --git a/app/mix/service/service.go b/app/mix/service/service.go index ea5b5d5d..266ebf06 100644 --- a/app/mix/service/service.go +++ b/app/mix/service/service.go @@ -920,6 +920,7 @@ func (s *Service) GetCoinsProductList(ctx *gin.Context, req *vasproto.GetCoinsPr } func (s *Service) CreateOrder(ctx *gin.Context, req *vasproto.CreateOrderReq) (data *vasproto.CreateOrderData, ec errcode.ErrCode) { + req.ReturnUrl = "https://tiefen.fun/pay" data, err := _DefaultVas.CreateOrder(ctx, req) ec, err = errs.DealVasErr(err) if err != nil { diff --git a/library/payclients/alipaycli/client.go b/library/payclients/alipaycli/client.go index 9a2ef633..641fd7b9 100644 --- a/library/payclients/alipaycli/client.go +++ b/library/payclients/alipaycli/client.go @@ -48,6 +48,7 @@ func (c *AlipayClient) ParseNotify(req *http.Request) (notify gopay.BodyMap, err logger.Error("ParseNotifyToBodyMap fail, req: %v, err: %v", util.ToJson(req), err) return } + logger.Info("Alipay ParseNotify, %v", util.ToJson(notifyTmp)) // 验签 ok, err := alipay.VerifySign("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl9Pj5j6cNRdaDyWTWWFkcBViDqw/py1bDrqe7VykND1JywgLsFogeKGG0YhJfTfEeExAlGlP2DUV7z0uc8QhCMF7N+qdfXNb/RemFIpSs71i9kkaFIJEl20JnWipps96LwZLDpNRck3Nho/Xnbs4wuft3sQtd7T0sB2zEYyl7OyuTqehcoz3uAQp0JOYBosVPpgofaD6BN2RSZQ33QvqS37w3xHLif8P7hfYXdeIe+JxeHmchzQK22dRzJinYfU+pKE5J2Wm+dq1l3/ls4w8Xc3RyqvvW2UMx2lOMtSg2WWXDDi1skmHn/l1BbBP/uogNq4Avf50eoZ1UE6JxPrZpQIDAQAB", notifyTmp) if err != nil { @@ -95,6 +96,7 @@ type WapPayParam struct { Subject string // 主题 TotalAmount int64 // 金额,单位:分 TimeOutSeconds int // 订单有效时间,单位:秒 + ReturnUrl string // 支付宝return_url } func (c *AlipayClient) WapPay(ctx context.Context, param *WapPayParam) (alipayWapParamStr string, err error) { @@ -108,6 +110,9 @@ func (c *AlipayClient) WapPay(ctx context.Context, param *WapPayParam) (alipayWa "time_expire": time.Now().Add(time.Second * time.Duration(param.TimeOutSeconds)).Format("2006-01-02 15:04:05"), "notify_url": c.NotifyUrl, } + if len(param.ReturnUrl) > 0 { + bm["return_url"] = param.ReturnUrl + } alipayWapParamStr, err = c.TradeWapPay(ctx, bm) if err != nil { return