fix : sep gateway

This commit is contained in:
2026-01-04 15:50:49 +03:30
parent 95990cd1df
commit e5068ad389
3 changed files with 34 additions and 2 deletions
@@ -7,6 +7,38 @@ import { BadRequestError } from "../app/app.errors";
@injectable() @injectable()
export class ValidationMiddleware { export class ValidationMiddleware {
static validateInputWithLogging(DTO: ClassConstructor<any>, logPrefix: string = "Request Body"): RequestHandler {
return async (req: Request, _res: Response, next: NextFunction): Promise<void> => {
try {
// Log the raw request body before validation
console.log(`${logPrefix}:`, JSON.stringify(req.body, null, 2));
// Convert the request body to an instance of the DTO class
const validationClass = plainToInstance(DTO, req.body, {
excludeExtraneousValues: true,
});
// Validate the DTO instance, including nested objects
const errors: ValidationError[] = await validate(validationClass, {
whitelist: true,
// forbidNonWhitelisted: true,
// transform: true,
});
if (errors.length > 0) {
const errorMsg = errors.map((error) => ValidationMiddleware.flattenValidationErrors(error)).flat();
next(new BadRequestError(errorMsg));
// throw new BadRequestError("Bad Request", errorMsg);
} else {
req.body = validationClass;
next();
}
} catch (error) {
next(error);
}
};
}
static validateInput(DTO: ClassConstructor<any>): RequestHandler { static validateInput(DTO: ClassConstructor<any>): RequestHandler {
return async (req: Request, _res: Response, next: NextFunction): Promise<void> => { return async (req: Request, _res: Response, next: NextFunction): Promise<void> => {
try { try {
+1 -1
View File
@@ -51,7 +51,7 @@ class SepGateway implements IGateway {
RedirectUrl: `${this.callBackURL}${callBackPath}`, RedirectUrl: `${this.callBackURL}${callBackPath}`,
ResNum: Date.now().toString(), ResNum: Date.now().toString(),
CellNumber: _mobile, CellNumber: _mobile,
GetMethod:true // GetMethod:true
}; };
const response = await axios.post<SepRequestPaymentResponse>(requesturl, purchaseData, { headers: this.requestHeader }); const response = await axios.post<SepRequestPaymentResponse>(requesturl, purchaseData, { headers: this.requestHeader });
+1 -1
View File
@@ -111,7 +111,7 @@ class PaymentController extends BaseController {
@ApiOperation("verify a payment for current session user for cartCheckout (method post for SEP)") @ApiOperation("verify a payment for current session user for cartCheckout (method post for SEP)")
@ApiResponse("successful", HttpStatus.Ok) @ApiResponse("successful", HttpStatus.Ok)
@ApiParam("gateway", "the name of api gateway", true) @ApiParam("gateway", "the name of api gateway", true)
@httpPost("/verify/:gateway/cart", ValidationMiddleware.validateInput(VerifyOnlinePaymentDTO)) @httpPost("/verify/:gateway/cart", ValidationMiddleware.validateInputWithLogging(VerifyOnlinePaymentDTO, "Verify Cart Checkout"))
public async VerifyCartCheckoutPost( public async VerifyCartCheckoutPost(
@requestParam("gateway") gateway: string, @requestParam("gateway") gateway: string,
@response() res: Response, @response() res: Response,