Чтобы дать пользователю знать, что его заряд не удался, и вызвать ev.complete('fail');
в приведенном выше коде, вам потребуется response.ok
в вашем запросе на получение, чтобы вернуть false
.
Давайте сначалапосмотрите определение этого свойства response.ok
,
Свойство ok только для чтения интерфейса Response содержит логическое значение, указывающее, был ли ответ успешным (состояние в диапазоне 200-299) или нет.
через https://developer.mozilla.org/en-US/docs/Web/API/Response/ok
Таким образом, для успешного запроса вы хотите, чтобы PHP возвращал статус 2xx
(скажем, 200
), а для отказа - не 200Код состояния HTTP (скажем, 402
).
В вашем PHP вы попытаетесь сделать Charge, а затем получите ответ от Stripe.Основываясь на этом ответе, вы должны заставить PHP возвращать статус вашему интерфейсу - либо 200
OK, либо 402
ошибка.
Вы можете сделать это с помощью функции http_response_code()
, например, http_response_code(200)
или http_response_code(402)
http://php.net/manual/en/function.http-response-code.php
Давайте рассмотрим упрощенный пример
try {
// make a charge
$charge = \Stripe\Charge::create(array(
"amount" => 1000,
"currency" => 'GBP',
"source" => $token
));
// send a 200 ok
http_response_code(200);
print("Charge successful");
} catch(\Stripe\Error\Card $e) {
// Since it's a decline, \Stripe\Error\Card will be caught
$body = $e->getJsonBody();
$err = $body['error'];
// this charge declined, return a 402
// response.ok should then be false
http_response_code(402);
print('Error:' . $err['message']);
}
Вызов Charge здесь заключен в блок try-catch
.Если оплата прошла успешно, отправляется HTTP-код ответа 200
, и response.ok
будет иметь значение true.
Если пользователь предоставляет отклоненную карту, эта ошибка будет обнаружена, и будет возвращен 402
код ответа HTTP (вместе с сообщением об ошибке).В этом случае response.ok
будет false
, поэтому будет вызван ev.complete('fail');
.
Есть некоторые другие типы ошибок Stripe, которые вы, вероятно, хотите отловить, полная ссылка здесь,
https://stripe.com/docs/api/errors https://stripe.com/docs/api/errors/handling