抱怨PHP和Stripe的耳朵有点湿,但我想我们都必须从某个地方开始。
我已经设置了一个支付页面,条带一切正常,当卡的详细信息正确且已获得授权时。我遇到的这个问题是卡被拒绝或有细节问题。我得到的只是一个空白的白色屏幕,我不知道如何处理错误。
所以我想有人会这么善意帮助。
谢谢,下面是代码;
Main Index.php页面
<!-- STRIPE -->
<div class="payment">
<div class="title">
<div class="copy">
<h2>Deposit Payment</h2>
<p>Please fill out the following form.</p>
</div>
</div>
<?php require_once('inc/config.php'); ?>
<form action="inc/charge.php" method="post">
<input type="text" name="business" placeholder="Advertiser Name">
<input type="text" name="email" placeholder="Advertiser Email">
<input type="text" name="hotel" placeholder="Hotel Name">
<div class="two-blocks">
<select class="small" id="currency">
<option value="gbp">Great British Pounds</option>
</select>
<input type="text" class="small" id="price" name="price" placeholder="£500.00">
</div>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<?php echo $stripe['publishable_key']; ?>"
data-currency="GBP"
data-label="Submit"
data-name="Guest Services Worldwide"
data-image="http://www.itsjoeturner.com/pay/wallet.png"
data-description="Advertising Deposit Payment"
data-allow-remember-me="false">
</script>
</form>
</div>
<!-- // STRIPE -->
charge.php
<?php
require_once('config.php');
$token = $_POST['stripeToken'];
$business = $_POST['business'];
$email = $_POST['email'];
$hotel = $_POST['hotel'];
$currency = $_POST['currency'];
$price = $_POST['price'];
$price .= "00";
$customer = Stripe_Customer::create(array(
'email' => $email,
'card' => $token,
'description' => "Business Name: ".$business.""
));
$charge = Stripe_Charge::create(array(
'customer' => $customer->id,
'amount' => $price,
'currency' => 'gbp',
));
header( 'Location: http://gswportal.co.uk/payments/thanks.html' ) ;
?>
答案 0 :(得分:1)
当卡被拒绝时,Stripe会抛出Stripe_CardError
个例外。
try {
$charge = Stripe_Charge::create(array(
'customer' => $customer->id,
'amount' => $price,
'currency' => 'gbp',
));
} catch (Stripe_CardError $e) {
//card could not be charged
$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");
}
有关详细信息,请参阅https://stripe.com/docs/api?lang=php#errors以及可能引发的异常的完整列表。
答案 1 :(得分:0)
以下是Google的解决方案。
try {
$charge = Stripe_Charge::create(array(
"amount" => $clientPriceStripe, // amount in cents
"currency" => "usd",
"customer" => $customer->id,
"description" => $description));
$success = 1;
$paymentProcessor="Credit card (www.stripe.com)";
} catch(Stripe_CardError $e) {
$error1 = $e->getMessage();
} catch (Stripe_InvalidRequestError $e) {
// Invalid parameters were supplied to Stripe's API
$error2 = $e->getMessage();
} catch (Stripe_AuthenticationError $e) {
// Authentication with Stripe's API failed
$error3 = $e->getMessage();
} catch (Stripe_ApiConnectionError $e) {
// Network communication with Stripe failed
$error4 = $e->getMessage();
} catch (Stripe_Error $e) {
// Display a very generic error to the user, and maybe send
// yourself an email
$error5 = $e->getMessage();
} catch (Exception $e) {
// Something else happened, completely unrelated to Stripe
$error6 = $e->getMessage();
}
if ($success!=1)
{
$_SESSION['error1'] = $error1;
$_SESSION['error2'] = $error2;
$_SESSION['error3'] = $error3;
$_SESSION['error4'] = $error4;
$_SESSION['error5'] = $error5;
$_SESSION['error6'] = $error6;
header('Location: checkout.php');
exit();
}