条纹:payment_init.php returns 403 禁止错误代码

Stripe: payment_init.php returns 403 forbidden error code

我正在尝试将 Stripe 支付方式集成到 Web 应用程序中。我被卡住了:payment_init.php 没有加载,当我被重定向到页面时。我收到 403 Forbidden 错误代码(“禁止访问。您无权访问此资源。 此外,在尝试使用 ErrorDocument 处理请求时遇到了 400 Bad Request 错误”)。 这是我的 payment_init.php 文件的代码:

<?php

// Include the Stripe PHP library 
require_once 'stripe-php/init.php';

// Include the configuration file 
require_once 'config.php';

$chosenService = $_POST['submitService'];

printf($chosenService);

// Product Details
if ($chosenService === "1") {
    $productName = "Hajvágás (6900 HUF)";
    $productID = "hc001";
    $productPrice = 6900;
} elseif ($chosenService === "2") {
    $productName = 'Hajvágás + Szakáll (9900 HUF)';
    $productID = "hc002";
    $productPrice = 9900;
};
$currency = "huf";
$description = "20% előleg Mobil Barber";

printf($productName);


// Set API key 
\Stripe\Stripe::setApiKey(STRIPE_API_KEY);

$response = array(
    'status' => 0,
    'error' => array(
        'message' => 'Invalid Request!'
    )
);

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $input = file_get_contents('php://input');
    $request = json_decode($input);
}

if (json_last_error() !== JSON_ERROR_NONE) {
    http_response_code(400);
    echo json_encode($response);
    exit;
}


if (!empty($request->createCheckoutSession)) {
    printf($productName);

    // Convert product price to cent 
    $stripeAmount = round($productPrice * 100, 2);

    // Create new Checkout Session for the order 
    try {
        printf($productName);
        $checkout_session = \Stripe\Checkout\Session::create([
            'line_items' => [[
                'price_data' => [
                    'currency' => $currency,
                    'unit_amount' => $productPrice,
                    'product_data' => [
                        'name' => $productName,
                        'description' => $description,
                    ],
                ],
                'quantity' => 1,
            ]],
            'mode' => 'payment',
            'success_url' => STRIPE_SUCCESS_URL . '?session_id={CHECKOUT_SESSION_ID}',
            'cancel_url' => STRIPE_CANCEL_URL,
        ]);
    } catch (Exception $e) {
        $api_error = $e->getMessage();
    }

    if (empty($api_error) && $checkout_session) {
        $response = array(
            'status' => 1,
            'message' => 'Checkout Session created successfully!',
            'sessionId' => $checkout_session->id
        );
    } else {
        $response = array(
            'status' => 0,
            'error' => array(
                'message' => 'Checkout Session creation failed! ' . $api_error
            )
        );
    }
}

// Return response 
echo json_encode($response);

当我在“if (!empty($request->createCheckoutSession)) {...}”条件之外打印 $chosenService 和 $productName 变量时,我得到了参数,因此它们不是 NULL。但是在这种情况下,我没有得到任何回报,也没有得到 NULL(这是否意味着 $request 是空的?)。我什至检查了 Stripe 仪表板中的日志,这是那里的错误消息:

"parameter_missing - line_items[0][price_data][product_data][名称] 看起来您缺少与给定订单项的 product_data.

关联的名称字段

此字段是必需的,因为它包含将显示在相关发票行项目描述中的名称。

如果有人能帮助我,我将不胜感激。提前谢谢你。

我不认为你的问题是$productName。我测试了您提供的代码,看起来问题与价格有关。您将 $productPrice 转换为 $stripeAmount 但随后您不使用它。如果不进行换算,任何一项服务的金额都低于 0.50 美元的门槛(使用 USD = HUF 换算)。

正如 their docs 指出的那样,Stripe 要求您的收费金额在 0.50 美元到 999,999.00 美元之间

我认为这不会影响您在这里的尝试,但也可能值得更新您使用 invoking/using Stripe PHP 库的方式以符合当前标准:https://github.com/stripe/stripe-php#getting-started

这意味着您可以更轻松地使用 API docs

中显示的代码片段