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

使用Stripe PHP API实现自定义结账时遭遇500内部服务器错误

解决Stripe Checkout PHP后端500内部服务器错误

遇到这种500错误,核心是先定位具体的错误原因,下面是一步步的排查和修复方案:

1. 先查看服务器的错误日志

500错误的具体细节都会记录在服务器的错误日志里,这是最直接的排查方式:

  • 如果用Apache,日志一般在/var/log/apache2/error.log(Linux)或者对应Windows服务器的日志目录
  • 如果用Nginx,日志通常在/var/log/nginx/error.log
  • PHP的错误日志可以在php.ini里找到error_log配置项的路径
    日志里会明确告诉你是哪一行代码出错,比如未定义的函数、API调用异常等。

2. 给Stripe API调用添加异常捕获

Stripe的PHP SDK在调用失败时会抛出异常(比如无效的token、金额错误、API密钥错误等),你的代码里没有任何异常处理,一旦API调用失败就会直接触发500错误。修改后端代码,添加try-catch块:

require_once('html/includes/vendor/autoload.php');

$stripe = array(
    "secret_key" => "sk_test_nJxSc9Yw716tLBWTa9HHMxhj",
    "publishable_key" => "pk_test_yGQM97VuEUdttuOOFQcyaPHW"
);

$charge_reply = array();
\Stripe\Stripe::setApiKey($stripe['secret_key']);

// 自定义sendJson函数,如果没定义的话先补上
function sendJson($data) {
    header('Content-Type: application/json');
    echo json_encode($data);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    try {
        $token = $_POST['sT'];
        $email = $_POST['sE'];

        $customer = \Stripe\Customer::create(array(
            'email' => $email,
            'source' => $token
        ));

        $charge = \Stripe\Charge::create(array(
            "amount" => 1000, // 注意:这里是分,对应10美元
            "currency" => "usd",
            "source" => $customer->id,
            "email" => $email,
            "description" => "Example charge"
        ));

        $charge_reply[] = [
            'token' => $token,
            'email' => $email,
            'charge_id' => $charge->id // 可以返回charge ID方便调试
        ];
        sendJson($charge_reply);
    } catch (\Stripe\Exception\ApiErrorException $e) {
        // 捕获Stripe的API异常,返回错误信息给前端
        $charge_reply['error'] = $e->getMessage();
        http_response_code(400); // 返回400状态码,而不是500
        sendJson($charge_reply);
    } catch (Exception $e) {
        // 捕获其他PHP异常
        $charge_reply['error'] = $e->getMessage();
        http_response_code(500);
        sendJson($charge_reply);
    }
    return;
}

3. 检查sendJson函数是否存在

你的代码最后调用了sendJson($charge_reply),但没有给出这个函数的实现。如果这个函数没有定义,PHP会直接抛出“Call to undefined function sendJson()”的错误,导致500。上面的代码里已经补上了这个函数的实现,你可以直接用,或者替换成原生的JSON输出:

header('Content-Type: application/json');
echo json_encode($charge_reply);
exit;

4. 验证参数和配置的正确性

  • 确认你的Stripe Secret Key是正确的,没有拼写错误
  • 注意Stripe的金额单位是分,比如你代码里的1000对应10美元,如果后续要改用前端传的金额,记得把美元数乘以100再传入
  • 确认前端传的token.id是有效的,Stripe的token只有5分钟有效期,如果请求延迟太久可能会失效

按照上面的步骤排查,你应该能找到具体的错误原因并修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:08:33