【问题标题】:Stripe webhook test returns http 500 errorStripe webhook 测试返回 http 500 错误
【发布时间】:2020-08-03 13:14:44
【问题描述】:

这是我的代码:

<?php

$payload = @file_get_contents('php://input');
$event = null;

try {
    $event = \Stripe\Event::constructFrom(
        json_decode($payload, true)
    );
} catch(\UnexpectedValueException $e) {
    // Invalid payload
    http_response_code(400);
    exit();
}

// Handle the event
switch ($event->type) {
    case 'payment_intent.succeeded':
        $paymentIntent = $event->data->object;
        $paymentintentid = $paymentIntent['id'];
        break;

    default:
        // Unexpected event type
        http_response_code(400);
        exit();
}
http_response_code(200);
?>

基本上就是这里的示例代码:https://stripe.com/docs/webhooks/build

我要做的是通过 $paymentIntent['id']; 获取 PaymentIntent ID;

但是当我运行测试 webhook 时,Stripe 说它返回 Http 错误 500。

我的 PHP 不像他们的脚本需要的那样先进,所以我不确定我是否遗漏了任何数据或代码。看起来我可能需要包含一些文件,因为 Stripe 希望我使用他们自己的类?

这是 PaymentIntent 文档:https://stripe.com/docs/api/payment_intents/create

【问题讨论】:

  • 返回 500 状态的是您的脚本吗?如果是这样,请检查您的错误日志

标签: php stripe-payments


【解决方案1】:

您是否使用 composer 来添加 Stripe 依赖项?如果是这样,您是否包含来自作曲家的自动加载文件? Stripe 类需要以某种方式加载或包含。这是 500 错误的一部分。

我的测试中的完整工作代码:

<?php

require '../vendor/autoload.php'; \\ replace with the actual location of your autoload file

$payload = @file_get_contents('php://input');
$event = null;

try {
    $event = \Stripe\Event::constructFrom(
        json_decode($payload, true)
    );
} catch(\UnexpectedValueException $e) {
    // Invalid payload
    http_response_code(400);
    exit();
}

// Handle the event
switch ($event->type) {
    case 'payment_intent.succeeded':
        $paymentIntent = $event->data->object;
        $paymentintentid = $paymentIntent['id']; \\ $paymentIntent->id works as well. 
        echo $paymentintentid;
        break;

    default:
        // Unexpected event type
        http_response_code(400);
        exit();
}
http_response_code(200);
?>

如果您想更进一步,我建议您将回复发送回 Stripe,以便您在 UI 中进行测试时可以看到它们。

示例响应:

// Handle the event
switch ($event->type) {
    case 'payment_intent.succeeded':
        $paymentIntent = $event->data->object;
        
        // Store the payment ID from the webhook
        $paymentintentid = $paymentIntent['id'];
        
        // Set array for successful response
        $response = array(
            'http_code' => 200,
            'payment_id' => $paymentintentid,
            'response' => 'webhook caught successfully'
        );

        // Set status code and echo back response
        http_response_code(200);
        echo json_encode($response, true);

        break;

    default:
        // Unexpected event type, set array for this case
        $response = array(
            'http_code' => 400,
            'response' => 'Unexpected event type'
        );

        // Set status code and echo back response
        http_response_code(400);
        echo json_encode($response, true);
        exit();
}

条带 UI 中显示的 200 响应示例测试:

Stripe 200 response sample in Stripe UI showing response from my server

条带 UI 中显示的 400 响应示例测试:

Stripe 400 response sample in Stripe UI showing response from my server

【讨论】:

    猜你喜欢
    • 2021-04-03
    • 2016-03-09
    • 2018-03-21
    • 1970-01-01
    • 2020-06-10
    • 2020-01-05
    • 2016-11-10
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多