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

Braintree信用卡创建错误处理:获取错误码及有效期验证问题

我来帮你搞定这些Braintree集成的问题,一个个拆解:

为什么errors对象为空但有错误消息?

你直接对Braintree的$result对象执行json_encode()时,没法正确序列化它的错误集合结构。Braintree的错误是封装在ErrorCollection对象里的,直接序列化只会得到空的{}——因为这些错误属性需要通过特定方法访问,不是直接暴露的公共属性。另外,当你开启verifyCard: true时,部分验证错误可能会存在于$result->creditCardVerification对象中,而不是主errors集合里。

如何获取Braintree错误码?

你需要手动遍历Braintree返回的错误集合,提取错误码和对应消息,再构建一个可序列化的数组返回给前端。把你PHP代码最后一行的echo json_encode($result);替换成下面的逻辑:

$response = [
    'success' => $result->success,
    'message' => $result->message,
    'errors' => [],
    'creditCardVerification' => null
];

if (!$result->success) {
    // 遍历主错误集合
    foreach ($result->errors->deepAll() as $error) {
        $response['errors'][] = [
            'code' => $error->code,
            'message' => $error->message,
            'attribute' => $error->attribute
        ];
    }

    // 处理信用卡验证的错误(当开启verifyCard时)
    if ($result->creditCardVerification) {
        $response['creditCardVerification'] = [
            'status' => $result->creditCardVerification->status,
            'errors' => []
        ];
        foreach ($result->creditCardVerification->errors->deepAll() as $error) {
            $response['creditCardVerification']['errors'][] = [
                'code' => $error->code,
                'message' => $error->message
            ];
        }
    }
}

echo json_encode($response);

这样前端就能拿到带错误码的响应了,比如你遇到的“信用卡类型不接受”对应错误码81724,“无效卡号”对应81715。

Braintree是否验证信用卡有效期?如何处理?

当然会!Braintree会自动检查有效期是否合法(比如是否过期、格式是否正确),对应的错误码有:

  • 81706:有效期无效(比如月份是13,或者年份格式不对)
  • 81707:信用卡已过期

用上面修改后的代码,有效期相关的错误会被包含在返回的errors数组里,前端可以根据错误码给出精准提示。另外建议你把年份改成四位格式(比如2020而非20),避免Braintree解析时出现歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:37:18