You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP集成Stripe支付:无效卡信息无响应问题求助

Stripe支付网关无效卡信息无响应问题排查与修复

问题描述

PHP集成Stripe支付网关SDK后,正确银行卡信息可正常支付,但输入无效卡信息(如错误卡号)时无任何响应,排查发现此时无法创建Stripe Token。

原始代码

if(isset($_REQUEST)){
  $cardno = $_POST['cardno'];
  $cardname = $_POST['cardno';
  $cardmonth = $_POST['cardmonth'];
  $cardyear = $_POST['cardyear'];
  $cardcvv = $_POST['cardcvv'];

require_once('vendor/autoload.php');
                $stripeSecret = 'strpe_api_key';

                \Stripe\Stripe::setApiKey($stripeSecret);
            
            $token = \Stripe\Token::create(array(
                  "card" => array(
                    "number" => $cardno,
                    "exp_month" => $cardmonth,
                    "exp_year" => $cardyear,
                    "cvc" => $cardcvv
                  )
                ));
            //echo "10";
                $charge = \Stripe\Charge::create(array(
                  [

                    'description' => "Package Subscription",
                    'shipping' => [
                            'name' => 'sam',
                            'phone'=> '0123456789',

                            'address' => [
                            'line1' => '510 Townsend St',
                            'postal_code' => '98140',
                            'city' => 'San Francisco',
                            'state' => 'CA',
                            'country' => 'US',
                            ],//address ands
                    ],//shipping ends
                    'amount' => round(10.00 * 100),
                    'currency' => 'usd',
                        "source" => $token,
                  ]
                ));
     }

已知明显错误

  • $cardname = $_POST['cardno'; 缺少闭合单引号,语法错误会直接中断脚本执行
  • Stripe密钥拼写错误:strpe_api_key 应为 stripe_api_key,错误密钥会导致API请求失败

核心问题:缺失错误处理逻辑

输入无效卡信息时,Stripe的Token::create方法会抛出异常,但原代码未捕获这些异常,导致脚本静默失败,无任何响应返回给前端。

修复后的代码

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 安全处理POST参数,修复语法错误
    $cardno = $_POST['cardno'] ?? '';
    $cardname = $_POST['cardname'] ?? ''; // 修正:对应前端cardname字段,补全引号
    $cardmonth = $_POST['cardmonth'] ?? '';
    $cardyear = $_POST['cardyear'] ?? '';
    $cardcvv = $_POST['cardcvv'] ?? '';

    require_once('vendor/autoload.php');
    
    // 修复密钥拼写错误
    $stripeSecret = 'stripe_api_key';
    \Stripe\Stripe::setApiKey($stripeSecret);

    try {
        // 创建Stripe Token
        $token = \Stripe\Token::create([
            "card" => [
                "number" => $cardno,
                "exp_month" => $cardmonth,
                "exp_year" => $cardyear,
                "cvc" => $cardcvv
            ]
        ]);

        // 创建支付订单
        $charge = \Stripe\Charge::create([
            'description' => "Package Subscription",
            'shipping' => [
                'name' => 'sam',
                'phone' => '0123456789',
                'address' => [
                    'line1' => '510 Townsend St',
                    'postal_code' => '98140',
                    'city' => 'San Francisco',
                    'state' => 'CA',
                    'country' => 'US',
                ]
            ],
            'amount' => round(10.00 * 100),
            'currency' => 'usd',
            "source" => $token,
        ]);

        // 返回成功响应
        echo json_encode([
            'success' => true,
            'charge_id' => $charge->id
        ]);
    } catch (\Stripe\Exception\CardException $e) {
        // 捕获卡相关错误(无效卡号、过期卡、CVV错误等)
        echo json_encode([
            'success' => false,
            'error' => $e->getError()->message
        ]);
    } catch (\Stripe\Exception\ApiErrorException $e) {
        // 捕获Stripe API层面的其他错误
        echo json_encode([
            'success' => false,
            'error' => '支付处理失败,请稍后重试'
        ]);
    } catch (Exception $e) {
        // 捕获通用意外错误
        echo json_encode([
            'success' => false,
            'error' => $e->getMessage()
        ]);
    }
}
?>

关键改进说明

  1. 修复语法与参数错误:补全参数引号,修正$cardname的取值逻辑,避免脚本中断
  2. 修正密钥:替换为正确的Stripe API密钥
  3. 添加异常捕获:
    • CardException:精准返回卡相关的具体错误信息,帮助用户定位问题
    • ApiErrorException:处理所有Stripe API级别的错误
    • 通用Exception:兜底捕获其他意外错误
  4. 严谨请求判断:用$_SERVER['REQUEST_METHOD'] === 'POST'替代isset($_REQUEST),避免非POST请求触发逻辑
  5. 参数安全处理:用?? ''避免未定义索引错误
  6. 结构化响应:用JSON格式返回结果,方便前端统一处理成功/失败场景

内容的提问来源于stack exchange,提问作者RAF Algowid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:45:38