Paymongo-Webhook erhält keine fehlgeschlagene Zahlungsantwort
Posted: 25 Jan 2025, 14:11
Ich arbeite derzeit an einem Projekt, bei dem wir PayMongo als Payment Gateway verwenden. Ich habe ein Problem beim Abrufen der fehlgeschlagenen Zahlungsantwort mit dem PayMongo Webhook. und der Zahlungsprozess hört nicht auf; Stattdessen leitet es auf die Zahlungsseite zurück, um eine Zahlungsmethode auszuwählen. < /p>
Ich hoffe, Einblicke zu erhalten, warum der Webhook die fehlgeschlagene Zahlungsantwort nicht erhält
Code: Select all
ini_set('display_errors', 1);
error_reporting(E_ALL);
function logWithTimestamp($message) {
$timestamp = date('Y-m-d H:i:s');
if (is_array($message) || is_object($message)) {
$message = print_r($message, true); // Convert array/object to string
}
file_put_contents("webhook_log.txt", "[$timestamp] $message" . PHP_EOL, FILE_APPEND);
}
$payload = file_get_contents("php://input");
if (!$payload) {
logWithTimestamp("No payload received.");
http_response_code(400);
echo json_encode(["message" => "No payload received"]);
exit;
}
$data = json_decode($payload, true);
if (json_last_error() !== JSON_ERROR_NONE) {
logWithTimestamp("JSON Decode Error: " . json_last_error_msg());
http_response_code(200);
echo json_encode(["message" => "Invalid JSON format"]);
exit;
}
function searchArray($array, $keys) {
$result = [];
$recursiveSearch = function ($array, $key, &$found) use (&$recursiveSearch) {
if (is_array($array)) {
foreach ($array as $k => $v) {
if ($k === $key) {
$found[] = $v;
} elseif (is_array($v)) {
$recursiveSearch($v, $key, $found);
}
}
}
};
foreach ($keys as $key) {
$found = [];
$recursiveSearch($array, $key, $found);
$result[$key] = count($found) === 1 ? $found[0] : $found;
}
return $result;
}
$jsonResponse = $data;
$keysToFind = ['id', 'status', 'source'];
$values = searchArray($jsonResponse, $keysToFind);
$paymentId = $values['id'] ?? null; // PayMongo payment ID is usually the second 'id' found
$paymentSource = $values['source'] ?? null;
$status = $values['status'] ?? null;
$test = [$paymentId, $paymentSource, $status];
logWithTimestamp($test);
http_response_code(200);
exit