| 
									
										
										
										
											2024-10-02 00:57:17 +08:00
										 |  |  | package FLXG | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	"encoding/hex" | 
					
						
							|  |  |  | 	"tianyuan-api/apps/api/internal/common" | 
					
						
							|  |  |  | 	"tianyuan-api/apps/api/internal/validator" | 
					
						
							|  |  |  | 	"tianyuan-api/apps/api/internal/westmodel" | 
					
						
							|  |  |  | 	"tianyuan-api/pkg/crypto" | 
					
						
							|  |  |  | 	"tianyuan-api/pkg/errs" | 
					
						
							| 
									
										
										
										
											2024-10-02 00:57:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"tianyuan-api/apps/api/internal/svc" | 
					
						
							|  |  |  | 	"tianyuan-api/apps/api/internal/types" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/zeromicro/go-zero/core/logx" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type FLXG5876Logic struct { | 
					
						
							|  |  |  | 	logx.Logger | 
					
						
							|  |  |  | 	ctx    context.Context | 
					
						
							|  |  |  | 	svcCtx *svc.ServiceContext | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewFLXG5876Logic(ctx context.Context, svcCtx *svc.ServiceContext) *FLXG5876Logic { | 
					
						
							|  |  |  | 	return &FLXG5876Logic{ | 
					
						
							|  |  |  | 		Logger: logx.WithContext(ctx), | 
					
						
							|  |  |  | 		ctx:    ctx, | 
					
						
							|  |  |  | 		svcCtx: svcCtx, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | func (l *FLXG5876Logic) FLXG5876(req *types.Request) (resp string, err *errs.AppError) { | 
					
						
							| 
									
										
										
										
											2024-10-13 20:52:47 +08:00
										 |  |  | 	var status string | 
					
						
							|  |  |  | 	var charges bool | 
					
						
							|  |  |  | 	var remark = "" | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	secretKey, ok := l.ctx.Value("secretKey").(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | 		return "", errs.ErrSystem | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	transactionID, ok := l.ctx.Value("transactionID").(string) | 
					
						
							|  |  |  | 	if !ok { | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | 		return "", errs.ErrSystem | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2024-10-13 20:52:47 +08:00
										 |  |  | 	userId, userIdOk := l.ctx.Value("userId").(int64) | 
					
						
							|  |  |  | 	if !userIdOk { | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | 		return "", errs.ErrSystem | 
					
						
							| 
									
										
										
										
											2024-10-13 20:52:47 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	productCode, productCodeOk := l.ctx.Value("productCode").(string) | 
					
						
							|  |  |  | 	if !productCodeOk || productCode == "" { | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | 		return "", errs.ErrSystem | 
					
						
							| 
									
										
										
										
											2024-10-13 20:52:47 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	defer func() { | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			status = "failed" | 
					
						
							|  |  |  | 			charges = false | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			status = "success" | 
					
						
							|  |  |  | 			charges = true | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		sendApiRequestMessageErr := l.svcCtx.ApiRequestMqsService.SendApiRequestMessage(l.ctx, transactionID, userId, productCode, status, charges, remark) | 
					
						
							|  |  |  | 		if sendApiRequestMessageErr != nil { | 
					
						
							|  |  |  | 			logx.Errorf("发送 API 请求消息失败: %v", err) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}() | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	// 1、解密 | 
					
						
							|  |  |  | 	key, decodeErr := hex.DecodeString(secretKey) | 
					
						
							|  |  |  | 	if decodeErr != nil { | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | 		return "", errs.ErrSystem | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	decryptData, aesDecryptErr := crypto.AesDecrypt(req.Data, key) | 
					
						
							|  |  |  | 	if aesDecryptErr != nil || len(decryptData) == 0 { | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | 		return "", errs.ErrParamDecryption | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 2、校验 | 
					
						
							|  |  |  | 	var data validator.FLXG5876Request | 
					
						
							|  |  |  | 	if validatorErr := validator.ValidateAndParse(decryptData, &data); validatorErr != nil { | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | 		return "", errs.ErrParamValidation | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 3、西部加密 | 
					
						
							|  |  |  | 	westConfig := l.svcCtx.Config.WestConfig | 
					
						
							| 
									
										
										
										
											2024-10-12 21:35:35 +08:00
										 |  |  | 	encryptedFields, encryptStructFieldsErr := common.EncryptStructFields(data, westConfig.Key) | 
					
						
							|  |  |  | 	if encryptStructFieldsErr != nil { | 
					
						
							|  |  |  | 		logx.Errorf("西部加密错误:%v", encryptStructFieldsErr) | 
					
						
							| 
									
										
										
										
											2024-10-13 22:17:25 +08:00
										 |  |  | 		return "", errs.ErrSystem | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// 4、发送请求到西部 | 
					
						
							|  |  |  | 	logx.Infof("交易号:%s", transactionID) | 
					
						
							|  |  |  | 	apiRequest := common.MapStructToAPIRequest(encryptedFields, westmodel.FLXG5876FieldMapping, "") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-24 18:05:13 +08:00
										 |  |  | 	westResp, callAPIErr := l.svcCtx.WestDexService.CallAPI("G03XM02", apiRequest, l.svcCtx.Config.WestConfig.SecretId) | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	if callAPIErr != nil { | 
					
						
							| 
									
										
										
										
											2024-10-21 23:54:17 +08:00
										 |  |  | 		if callAPIErr.Code == errs.ErrDataSource.Code { | 
					
						
							| 
									
										
										
										
											2024-10-15 20:52:51 +08:00
										 |  |  | 			encryptData, aesEncrypt := crypto.AesEncrypt(westResp, key) | 
					
						
							|  |  |  | 			if aesEncrypt != nil { | 
					
						
							|  |  |  | 				return "", errs.ErrSystem | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			return encryptData, callAPIErr | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return "", callAPIErr | 
					
						
							| 
									
										
										
										
											2024-10-12 20:41:55 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2024-10-02 00:57:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-13 22:47:49 +08:00
										 |  |  | 	encryptData, aesEncrypt := crypto.AesEncrypt(westResp, key) | 
					
						
							|  |  |  | 	if aesEncrypt != nil { | 
					
						
							|  |  |  | 		return "", errs.ErrSystem | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return encryptData, nil | 
					
						
							| 
									
										
										
										
											2024-10-02 00:57:17 +08:00
										 |  |  | } |