Я использую Stripe для создания подписки и следую официальной документации. Смотрите мой код ниже. Он работает нормально, когда я использую карту, которая является действительной, но когда я использую преднамеренную карту, которая отклоняется (для целей тестирования), я получаю неперехваченные исключения вместо правильного сообщения об ошибке.
Я искал в Интернете и использовал различные методы обнаружения ошибок, но ни один из них не работает. Я использую метод try / catch, подробно описанный на их сайте.
Номер карты в полоску, который я использую для отклоненных карт: 4000 0084 0000 1629
Другие тестовые карты, которые предназначены для отклонения, также сталкиваются с той же проблемой.
Кто-нибудь может указать мне правильное направление?
require_once("stripe-php-6.35.2/init.php");
\Stripe\Stripe::setApiKey("sk_test_XXjeWNYCBa3KyiSdnGtZwYYu");
$token = $_POST['stripeToken'];
$subscription_plan = 'plan_F79GYa3Tz506JJ';
$customer = \Stripe\Customer::create(array(
"source" => $token,
"email" => 'andy@arcimedia.co.uk')
);
$payer_id = $customer->id;
try {
$subscription = \Stripe\Subscription::create([
"customer" => $payer_id,
"items" => [
[
"plan" => $subscription_plan
],
]
]);
} catch(\Stripe\Error\Card $e) {
echo 'catch';
$body = $e->getJsonBody();
$err = $body['error'];
print('Status is:' . $e->getHttpStatus() . "\n");
print('Type is:' . $err['type'] . "\n");
print('Code is:' . $err['code'] . "\n");
// param is '' in this case
print('Param is:' . $err['param'] . "\n");
print('Message is:' . $err['message'] . "\n");
} catch (\Stripe\Error\RateLimit $e) {
// Too many requests made to the API too quickly
} catch (\Stripe\Error\InvalidRequest $e) {
// Invalid parameters were supplied to Stripe's API
} catch (\Stripe\Error\Authentication $e) {
// Authentication with Stripe's API failed
// (maybe you changed API keys recently)
} catch (\Stripe\Error\ApiConnection $e) {
// Network communication with Stripe failed
} catch (\Stripe\Error\Base $e) {
// Display a very generic error to the user, and maybe send
// yourself an email
} catch (Exception $e) {
// Something else happened, completely unrelated to Stripe
}
Я ожидаю увидеть некоторые ошибки, то есть статус: xx, тип: xx и т. Д.
Вместо этого я вижу это:
Неустранимая ошибка: необработанное исключение «Stripe \ Error \ Card» с сообщением «Ваша карта отклонена». в /var/sites/s/streaming.akmmusic.co.uk/public_html/stripe/stripe-php-6.35.2/lib/ApiRequestor.php:214 из запроса API 'req_b3CIIpbtkRqOvQ' Трассировка стека: # 0 / var / sites /s/streaming.akmmusic.co.uk/public_html/stripe/stripe-php-6.35.2/lib/ApiRequestor.php(173): Stripe \ ApiRequestor :: _ specificAPIError ('{\ n "error": {\ n ... ', 402, Object (Stripe \ Util \ CaseInsensitiveArray), Array, Array) # 1 /var/sites/s/streaming.akmmusic.co.uk/public_html/stripe/stripe-php-6.35.2/lib /ApiRequestor.php(473): Stripe \ ApiRequestor-> handleErrorResponse ('{\ n "error": {\ n ...', 402, Object (Stripe \ Util \ CaseInsensitiveArray), Array) # 2 / var / sites /s/streaming.akmmusic.co.uk/public_html/stripe/stripe-php-6.35.2/lib/ApiRequestor.php(126): Stripe \ ApiRequestor -> _ interpretResponse ('{\ n "ошибка": {\ n ... ', 402, Object (Stripe \ Util \ CaseInsensitiveArray)) # 3 /var/sites/s/streaming.akmmusic.co.uk/public_html/stripe/stripe-php-6.35.2/lib/ApiOperations/Request .php (57): Stripe \ Api в /var/sites/s/streaming.akmmusic.co.uk/public_html/str ipe / stripe-php-6.35.2 / lib / ApiRequestor.php в строке 214