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

Braintree创建交易时出现无效密钥错误求助

解决Braintree PHP SDK创建交易时的InvalidArgumentException错误

我之前也碰到过一模一样的问题!问题核心很明确:你错误地把客户端返回的完整nonce对象(包含binData等元数据)直接传给了交易创建接口,但Braintree PHP SDK只需要nonce的纯字符串值,不需要嵌套的binData字段。

下面是具体的排查和解决步骤:

1. 确认客户端传递的内容是否正确

不管你用的是Braintree Drop-in UI还是手动调用Braintree.js,客户端最终都会生成一个纯字符串格式的nonce:

  • 如果是表单提交,会自动生成一个名为payment_method_nonce的隐藏字段,值就是纯字符串nonce;
  • 如果是JS异步请求,调用requestPaymentMethod后返回的payload对象里,payload.nonce才是需要传给后端的字符串,而不是整个payload对象。

你需要确保后端接收的是这个纯字符串,而不是包含binData的嵌套数组。

2. 修正后端交易创建代码

错误示例(导致报错的写法)

你可能不小心把带binData的数组传进了参数:

$result = Braintree\Transaction::create([
    'amount' => '10.00',
    'paymentMethodNonce' => $_POST['paymentMethodNonce'], // 这里是带binData的数组,触发错误
    'options' => [
        'submitForSettlement' => true
    ]
]);

正确示例

换成纯字符串格式的nonce:

// 假设前端传递的是payment_method_nonce字段
$result = Braintree\Transaction::create([
    'amount' => '10.00',
    'paymentMethodNonce' => $_POST['payment_method_nonce'], // 纯字符串nonce
    'options' => [
        'submitForSettlement' => true
    ]
]);

如果是异步接收JSON数据,确保只提取nonce字段的值:

$input = json_decode(file_get_contents('php://input'), true);
$result = Braintree\Transaction::create([
    'amount' => '10.00',
    'paymentMethodNonce' => $input['paymentMethodNonce'], // 这里必须是纯字符串
    'options' => [
        'submitForSettlement' => true
    ]
]);

3. 快速验证方法

在调用Transaction::create之前,先打印你要传递的paymentMethodNonce值:

var_dump($yourNonceValue);

如果输出是一个包含binData键的数组,那肯定是传错了;正常的nonce应该是类似fake-valid-nonce这样的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:26:08