【问题标题】:PHP: Stripe API does not display any error when entering a bad card numberPHP:输入错误卡号时,Stripe API 不显示任何错误
【发布时间】:2021-01-30 18:37:07
【问题描述】:

在 PHP 的测试模式下尝试处理 Stripe 的一些错误时,我似乎遗漏了一些东西。

输入4242424242424242(VISA)等测试卡号时支付成功,但输入错误卡号时没有错误,也没有任何记录。

如果我在测试模式下使用真实正确的卡号,它会显示错误消息,就像“支付”按钮不起作用。

有人知道我在这里做错了什么吗?谢谢。

这是 PHP 代码:

// Check whether stripe token is not empty 
if(!empty($_POST['stripeToken'])){ 
     
    // Retrieve stripe token, card and user info from the submitted form data 
    $token  = $_POST['stripeToken']; 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $card_number = $_POST['card_number']; 
    $card_exp_month = $_POST['card_exp_month']; 
    $card_exp_year = $_POST['card_exp_year']; 
    $card_cvc = $_POST['card_cvc']; 
    $itemPrice = $_POST['itemPrice']; 
    $itemNumber = $_POST['itemNumber'];
    $Ticket_number = $_POST['Ticket_number'];

    // Include Stripe PHP library 
    require_once 'stripe-php/init.php'; 
     
    // Set API key 
    \Stripe\Stripe::setApiKey(STRIPE_API_KEY); 
     
    // Add customer to stripe 
    $customer = \Stripe\Customer::create(array( 
        'email' => $email, 
        'source'  => $token 
    )); 
      
    // Unique order ID 
    $orderID = strtoupper(str_replace('.','',uniqid('', true))); 
     
    // Convert price to cents 
    $itemPrice = ($itemPrice*100); 
     
    // Charge a credit or a debit card 
    $charge = \Stripe\Charge::create(array( 
        'customer' => $customer->id, 
        'amount'   => $itemPrice, 
        'currency' => $currency, 
        'description' => $itemName, 
        'metadata' => array( 
            'order_id' => $orderID 
        ) 
    )); 
     
    // Retrieve charge details 
    $chargeJson = $charge->jsonSerialize(); 
 
    // Check whether the charge is successful 
    if($chargeJson['amount_refunded'] == 0 && empty($chargeJson['failure_code']) && $chargeJson['paid'] == 1 && $chargeJson['captured'] == 1){ 
        // Order details  
        $transactionID = $chargeJson['balance_transaction']; 
        $paidAmount = $chargeJson['amount']; 
        $paidCurrency = $chargeJson['currency']; 
        $payment_status = $chargeJson['status']; 
         
        // Include database connection file  
        include_once 'dbConnect.php';
        $itemPrice = ($itemPrice/100);
        $paidAmount = ($paidAmount/100);
         
        // Insert tansaction data into the database 
        $sql = "INSERT INTO orders(name,email,card_number,card_exp_month,card_exp_year,item_name,item_number,item_price,item_price_currency,paid_amount,paid_amount_currency,txn_id,payment_status,created,modified) VALUES('".$name."','".$email."','".$card_number."','".$card_exp_month."','".$card_exp_year."','".$itemName."','".$itemNumber."','".$itemPrice."','".$currency."','".$paidAmount."','".$paidCurrency."','".$transactionID."','".$payment_status."',NOW(),NOW())"; 
        $insert = $db->query($sql); 
        $payment_id = $db->insert_id; 
         
        // If the order is successful 
        if($payment_status == 'succeeded'){ 
            $ordStatus = 'success'; 
            $statusMsg = ''; 
        }else{ 
            $statusMsg = "Your Payment has Failed!"; 
        } 
    }else{ 
        print '<pre>';print_r($chargeJson); 
        $statusMsg = "Transaction has been failed!";
        
    } 
}else{ 
    $statusMsg = "Error on form submission.";
    
} 
?>  

【问题讨论】:

  • 你想用try-catch 语句包装它

标签: php stripe-payments


【解决方案1】:

感谢您的回答,但实际上这是一个假错误:我没有声明一个 id 来显示我的错误。我必须在我的表单中添加以下代码:

<p id="payment-status" role="alert"></p>

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 2016-02-11
    • 2013-09-23
    • 2011-04-19
    • 2012-12-22
    • 2013-07-22
    • 2013-03-13
    相关资源
    最近更新 更多