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

Laravel集成Braintree提交支付报错:金额格式无效/无法识别支付方式

Laravel集成Braintree赞助支付报错修复方案

报错根因分析

你收到的报错包含两个问题触发点:

  1. 金额字段为空/格式不符合Braintree要求
  2. 支付凭证nonce未正常传递或者金额无效时触发支付方式识别失败

具体修复步骤

1. 修复前后端字段不匹配问题

你视图中的单选框name属性为sponsorships[],但后端checkout逻辑中直接取$request->amount,导致金额变量为空,这是最核心的问题。
直接修改视图文件中单选框的定义即可,同时增加必填校验防止未选套餐提交:

<!-- 原代码 -->
<input type="radio" name="sponsorships[]" id="sponsorships-{{ $sponsorship->id }}" value="{{ $sponsorship->price }}">
<!-- 修改后代码 -->
<input type="radio" name="amount" id="sponsorships-{{ $sponsorship->id }}" value="{{ $sponsorship->price }}" required>

如果你需要保留原数组命名,也可以修改后端取值逻辑:

// 原代码
$amount = $request->amount;
// 修改后代码
$amount = $request->sponsorships[0];

2. 增加金额格式校验与格式化

Braintree要求金额为保留两位小数的数字字符串,你可以在后端获取金额后增加如下处理:

$amount = $request->amount;
// 新增校验与格式化
if (!is_numeric($amount) || (float)$amount <= 0) {
    return back()->withErrors('请选择有效的赞助套餐');
}
$amount = number_format((float)$amount, 2, '.', '');

3. 优化Braintree初始化逻辑(可选)

你当前在三个位置重复写了Braintree网关初始化代码,且混用了config和env读取配置,env缓存后直接读取env会返回空值,建议统一用config读取:

// 统一初始化方式
$gateway = new Braintree\Gateway(config('services.braintree'));

4. 排查支付凭证是否正常生成(可选)

如果修复以上问题后仍提示无法识别支付方式,可以在前端JS的requestPaymentMethod回调中增加日志,确认nonce正常生成:

instance.requestPaymentMethod(function (err, payload) {
    if (err) {
        console.log('Request Payment Method Error', err);
        return;
    }
    // 新增打印确认nonce存在
    console.log('Payment nonce:', payload.nonce);
    document.querySelector('#nonce').value = payload.nonce;
    form.submit();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:39:01