first commit
This commit is contained in:
		
							
								
								
									
										81
									
								
								app/user/cmd/api/internal/logic/pay/iapcallbacklogic.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								app/user/cmd/api/internal/logic/pay/iapcallbacklogic.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| package pay | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/pkg/errors" | ||||
| 	"time" | ||||
| 	"tydata-server/app/user/cmd/api/internal/svc" | ||||
| 	"tydata-server/app/user/cmd/api/internal/types" | ||||
| 	"tydata-server/common/xerr" | ||||
| 	"tydata-server/pkg/lzkit/lzUtils" | ||||
|  | ||||
| 	"github.com/zeromicro/go-zero/core/logx" | ||||
| ) | ||||
|  | ||||
| type IapCallbackLogic struct { | ||||
| 	logx.Logger | ||||
| 	ctx    context.Context | ||||
| 	svcCtx *svc.ServiceContext | ||||
| } | ||||
|  | ||||
| func NewIapCallbackLogic(ctx context.Context, svcCtx *svc.ServiceContext) *IapCallbackLogic { | ||||
| 	return &IapCallbackLogic{ | ||||
| 		Logger: logx.WithContext(ctx), | ||||
| 		ctx:    ctx, | ||||
| 		svcCtx: svcCtx, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (l *IapCallbackLogic) IapCallback(req *types.IapCallbackReq) error { | ||||
| 	// Step 1: 查找订单 | ||||
| 	order, findOrderErr := l.svcCtx.OrderModel.FindOne(l.ctx, req.OrderID) | ||||
| 	if findOrderErr != nil { | ||||
| 		logx.Errorf("苹果内购支付回调,查找订单失败: %+v", findOrderErr) | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	// Step 2: 验证订单状态 | ||||
| 	if order.Status != "pending" { | ||||
| 		return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "苹果内购支付回调, 订单状态异常: %+v", order) | ||||
| 	} | ||||
|  | ||||
| 	// Step 3: 调用 VerifyReceipt 验证苹果支付凭证 | ||||
| 	//receipt := req.TransactionReceipt // 从请求中获取支付凭证 | ||||
| 	//verifyResponse, verifyErr := l.svcCtx.ApplePayService.VerifyReceipt(l.ctx, receipt) | ||||
| 	//if verifyErr != nil { | ||||
| 	//	return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "苹果内购支付回调, 验证订单异常: %+v", verifyErr) | ||||
| 	//} | ||||
|  | ||||
| 	// Step 4: 验证订单 | ||||
| 	//product, findProductErr := l.svcCtx.ProductModel.FindOne(l.ctx, order.Id) | ||||
| 	//if findProductErr != nil { | ||||
| 	//	return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "苹果内购支付回调, 获取订单相关商品失败: %+v", findProductErr) | ||||
| 	//} | ||||
| 	//isProductMatched := false | ||||
| 	//appleProductID := l.svcCtx.ApplePayService.GetIappayAppID(product.ProductEn) | ||||
| 	//for _, item := range verifyResponse.Receipt.InApp { | ||||
| 	//	if item.ProductID == appleProductID { | ||||
| 	//		isProductMatched = true | ||||
| 	//		order.PlatformOrderId = lzUtils.StringToNullString(item.TransactionID) // 记录交易 ID | ||||
| 	//		break | ||||
| 	//	} | ||||
| 	//} | ||||
| 	//if !isProductMatched { | ||||
| 	//	return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "苹果内购支付回调, 商品 ID 不匹配,订单 ID: %d, 回调苹果商品 ID: %s", order.Id, verifyResponse.Receipt.InApp[0].ProductID) | ||||
| 	//} | ||||
|  | ||||
| 	// Step 5: 更新订单状态 mm | ||||
| 	order.Status = "paid" | ||||
| 	order.PayTime = lzUtils.TimeToNullTime(time.Now()) | ||||
|  | ||||
| 	// 更新订单到数据库 | ||||
| 	if updateErr := l.svcCtx.OrderModel.UpdateWithVersion(l.ctx, nil, order); updateErr != nil { | ||||
| 		return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "苹果内购支付回调, 修改订单信息失败: %+v", updateErr) | ||||
| 	} | ||||
|  | ||||
| 	// Step 6: 处理订单完成后的逻辑 | ||||
| 	if asyncErr := l.svcCtx.AsynqService.SendQueryTask(order.Id); asyncErr != nil { | ||||
| 		return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "苹果内购支付回调,异步任务调度失败: %v", asyncErr) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user