<?php
/**
* Extends API payload logic with basic sanity checks.
*
* @param array $payload The API payload data.
* @param array $requiredFields Array of required field names.
* @return array|false The validated payload, or false if validation fails.
*/
function validateAndExtendPayload(array $payload, array $requiredFields): array|false
{
// Check if required fields are present
foreach ($requiredFields as $field) {
if (!isset($payload[$field])) {
error_log("Missing required field: " . $field); // Log the error
return false; // Validation failed
}
}
// Sanity checks for data types and values
if (!is_string($payload['name'])) {
error_log("Invalid 'name' field: must be a string.");
return false;
}
if (!is_numeric($payload['amount']) || $payload['amount'] <= 0) {
error_log("Invalid 'amount' field: must be a positive number.");
return false;
}
if (!is_array($payload['tags'])) {
error_log("Invalid 'tags' field: must be an array.");
return false;
}
//Extend the payload with default values or calculated values
$payload['timestamp'] = time(); // Add timestamp
$payload['status'] = 'pending'; //Add status
return $payload; // Validation successful
}
//Example Usage:
/*
$legacyPayload = [
'name' => 'Product X',
'amount' => 100,
'tags' => ['category1', 'category2']
];
$requiredFields = ['name', 'amount'];
$validatedPayload = validateAndExtendPayload($legacyPayload, $requiredFields);
if ($validatedPayload !== false) {
print_r($validatedPayload);
} else {
echo "Payload validation failed.\n";
}
*/
?>
Add your comment