为什么这个 php 方法中的所有请求值都是 null 或未定义? (Laravel + Stripe)

问题描述 投票:0回答:1

其实问题很简单(但对我来说并不容易)。我在 laravel 11 中创建了一个后端项目来处理我的数据库并与 Stripe api 进行通信,我已经成功实现了,带条的通信效果很好,但是,当我使用 Postman 测试它时,我收到的响应是以下:

{
    "error": "The amount must be greater than or equal to the minimum charge amount allowed for your account and the currency set (https://docs.stripe.com/currencies#minimum-and-maximum-charge-amounts).  If you want to save a Payment Method for future use without an immediate payment, use a Setup Intent instead: https://docs.stripe.com/payments/setup-intents"
}

我使用 POST 请愿书从邮递员处发送的是:

{
    "amount": 2434,
    "currency": "usd"
}

如您所见,只有两个值,当响应显示“金额必须大于或等于您帐户允许的最低费用金额”时,指的是我的 json 对象中的“金额”键。我检查了 stripe 文档,他们说美元货币的最低数量价值是 0.50 美元,所以我在这个范围内。而且美元也像未定义一样进入我的 api。

另一方面,如果我对这两个值进行硬编码,我收到的响应如下:

{
    "message": "Payment successful"
}

这意味着我的代码实际上可以工作,但只是使用硬编码,但我不想使用。

据我所知,我的代码中没有犯任何错误,因为我不明白文档所说的,这让我认为问题是更奇怪的事情,比如我的框架文件系统中的配置或错误,但这只是我的猜测。

这是我在 mu api.php 文件中定义的用于从邮递员访问端点的路由:

Route::post('/create-checkout-session', [App\Http\Controllers\paymentController::class, 'payment']);

这是我的控制器,条纹在其中工作:

<?php

namespace App\Http\Controllers;

use Exception;
use illuminate\Http\Request;

class paymentController extends Controller
{
    public function payment(Request $request)
    {
        try {
            $stripe = new \Stripe\StripeClient(env('STRIPE_SECRET'));

            $stripe->paymentIntents->create([
                'amount' => intval($request->input('amount')),
                'currency' => $request->input('currency'),
                'automatic_payment_methods' => ['enabled' => true],
            ]);
            return response()->json([
                'message' => 'Payment successful',
            ], 200);
        } catch (Exception $e) {
            return response()->json([
                'error' => $e->getMessage()
            ], 500);
        }
    }
}

iv'e 尝试在函数中使用有点不同的代码,但结果完全相同:

            $stripe = new \Stripe\StripeClient([
                'api_key' => env('STRIPE_SECRET')
            ]);
            $stripe->paymentIntents->create([
                'amount' => intval($request->input('amount')),
                // 'amount' => 1000,
                'currency' => $request->input('currency'),
                // 'currency' => "usd",
                'automatic_payment_methods' => ['enabled' => true],
            ]);

根据我对代码的期望,是能够捕获从前端(或邮递员)发送给我的信息,并将其发送到 stripe api,避免使用“硬编码”实践并继续开发我的支付系统,我不能,因为我在请求中收到的所有内容都是空的(空或未定义)。

这就是我的请愿书在邮递员中的样子: 在此输入图片描述

php laravel stripe-payments backend
1个回答
0
投票

根据

$currency
$amount
变量都被记录为
null
的注释,我认为我们可以理解为什么这些 API 调用不成功。

我建议从传入请求中添加更多有效负载日志记录,以确定为什么传递给处理函数的金额和货币参数不存在于

$request
变量中。前端可能有很多原因没有设置这些值。

当您遇到困难并且不确定请求失败的原因时,我仍然建议您使用 Stripe Dashboard 中的 API 日志。查看请求负载(滚动到 JSON 响应的底部)可以帮助您了解实际发送到 API 的内容,这通常会使 API 响应更加清晰。

© www.soinside.com 2019 - 2024. All rights reserved.