其实问题很简单(但对我来说并不容易)。我在 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,避免使用“硬编码”实践并继续开发我的支付系统,我不能,因为我在请求中收到的所有内容都是空的(空或未定义)。
这就是我的请愿书在邮递员中的样子: 在此输入图片描述
根据
$currency
和 $amount
变量都被记录为 null
的注释,我认为我们可以理解为什么这些 API 调用不成功。
我建议从传入请求中添加更多有效负载日志记录,以确定为什么传递给处理函数的金额和货币参数不存在于
$request
变量中。前端可能有很多原因没有设置这些值。
当您遇到困难并且不确定请求失败的原因时,我仍然建议您使用 Stripe Dashboard 中的 API 日志。查看请求负载(滚动到 JSON 响应的底部)可以帮助您了解实际发送到 API 的内容,这通常会使 API 响应更加清晰。