1. <?php
  2. /**
  3. * Extends API payload logic with basic sanity checks.
  4. *
  5. * @param array $payload The API payload data.
  6. * @param array $requiredFields Array of required field names.
  7. * @return array|false The validated payload, or false if validation fails.
  8. */
  9. function validateAndExtendPayload(array $payload, array $requiredFields): array|false
  10. {
  11. // Check if required fields are present
  12. foreach ($requiredFields as $field) {
  13. if (!isset($payload[$field])) {
  14. error_log("Missing required field: " . $field); // Log the error
  15. return false; // Validation failed
  16. }
  17. }
  18. // Sanity checks for data types and values
  19. if (!is_string($payload['name'])) {
  20. error_log("Invalid 'name' field: must be a string.");
  21. return false;
  22. }
  23. if (!is_numeric($payload['amount']) || $payload['amount'] <= 0) {
  24. error_log("Invalid 'amount' field: must be a positive number.");
  25. return false;
  26. }
  27. if (!is_array($payload['tags'])) {
  28. error_log("Invalid 'tags' field: must be an array.");
  29. return false;
  30. }
  31. //Extend the payload with default values or calculated values
  32. $payload['timestamp'] = time(); // Add timestamp
  33. $payload['status'] = 'pending'; //Add status
  34. return $payload; // Validation successful
  35. }
  36. //Example Usage:
  37. /*
  38. $legacyPayload = [
  39. 'name' => 'Product X',
  40. 'amount' => 100,
  41. 'tags' => ['category1', 'category2']
  42. ];
  43. $requiredFields = ['name', 'amount'];
  44. $validatedPayload = validateAndExtendPayload($legacyPayload, $requiredFields);
  45. if ($validatedPayload !== false) {
  46. print_r($validatedPayload);
  47. } else {
  48. echo "Payload validation failed.\n";
  49. }
  50. */
  51. ?>

Add your comment