Невероятно, что вы получаете еще одну ошибку - если бы вы были, вы бы увидели исключение исключенной ошибки. При этом вы должны, как предположил периклис, также ловить другие типы исключений.
Скорее всего происходит то, что Stripe_CardError был брошен и пойман, но из-за того, что вы не повторяете ничего в выводе, он терпит неудачу. Попробуйте это:
} catch (Stripe_CardError $e) {
// Since it's a decline, Stripe_CardError will be caught
$body = $e->getJsonBody();
$err = $body['error'];
echo 'Status is:' . $e->getHttpStatus() . "\n";
echo 'Type is:' . $err['type'] . "\n";
echo 'Code is:' . $err['code'] . "\n";
// param is '' in this case
echo 'Param is:' . $err['param'] . "\n";
echo 'Message is:' . $err['message'] . "\n";
} catch (Exception $e) {
echo $e->getMessage();
} catch (ErrorException $e) {
echo $e->getMessage();
}
EDIT 4/16/13 - Вы указали в комментариях, что вы даже не видя ваше эхо в заявлении попробовать. Таким образом, либо a) ваши инструкции эха скрыты от представления, либо b) блок кода до его сбоя. Однако, поскольку вы не поймаете Stripe_CardError, это должен быть другой тип исключения. Теперь я предполагаю, что существует проблема с одной из переменных, которые вы передаете в функцию Stripe ... либо не объявлена, либо пытается получить доступ к объекту не-объекта.
Добавить другие выписки и посмотреть, есть ли у вас что-либо. Единственный способ, которым вы не могли добраться до своего последнего утверждения эха, - это то, что бросается неперехваченное исключение ... Вы просто не видите его.
Это выстрел в темноте, но возможно ли, что ваша среда php имеет отчет об исключительных ситуациях, подавленный или обработанный каким-либо другим способом, что не очевидно? Иногда производственная среда настроена так, чтобы игнорировать или регистрировать исключения, а не показывать их пользователю. Проверьте это, потому что, и если вы этого не видите, его поймают в другом месте и заносят в журнал или скрывают от просмотра.
Попробуйте вставить это где-то ПЕРЕД вашей попытке поймать:
ini_set('error_reporting', E_ALL);
Сообщения об ошибках? – sectus
Это, вероятно, означает, что вы либо получаете фатальную ошибку, либо исключение, которое не относится к типу Stripe_CardError. Измените свой блок catch(), чтобы поймать все типы Exception и var_dump() your $ e – periklis
Ни попытка, ни catch не возвращают любые значения, отобранные в них. Я обновляю сообщение с полным кодом. – samyb8