PHP Избегайте повторения того же попытки поймать - PullRequest
2 голосов
/ 28 июня 2019

Я использую PHP 7 с Phalcon 3. Я хотел бы реализовать ответ Stripe в одной функции.Я могу обрабатывать такие ошибки, как , что .

Вот код:

try {
  // Use Stripe's library to make requests...
} catch(\Stripe\Error\Card $e) {
  // Since it's a decline, \Stripe\Error\Card will be caught
  $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
}

Каждый раз, когда мне нужно вызвать метод Stripe, мне нужно реализовать весь этот try catch,Как я могу сделать, чтобы создать одну функцию со всеми исключениями Stripe?У меня появилась идея отправить функцию чередования в параметре и использовать функцию в попытке, но она не работает, потому что функция выполняется прежде, чем оказаться внутри функции.

  function stripeResponse($function) {
    try {
      // Use Stripe's library to make requests...
      \Stripe\Stripe::setApiKey("my_key");
      $function();
    } catch(\Stripe\Error\Card $e) {
      // Since it's a decline, \Stripe\Error\Card will be caught
    } 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
    }
  }

    return $this->stripeResponse(\Stripe\Charge::create([
        "amount" => 100,
        "currency" => "eur",
        "source" => "token",
        "description" => "Description"
    ]));

У вас есть идеяделать то, что я хочу?

1 Ответ

4 голосов
/ 28 июня 2019

Способ, которым вы звоните $this->stripeResponse, неверен.Вы передаете ему ответ \Stripe\Charge::create вместо вызываемого.

Вы можете изменить его на:

return $this->stripeResponse(function() {
    \Stripe\Charge::create([
        "amount" => 100,
        "currency" => "eur",
        "source" => "token",
        "description" => "Description"
    ]);
});
...