Как отследить ошибки карты с помощью подписок Stripe? - PullRequest
0 голосов
/ 29 мая 2019

Я использую 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

...