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
相关产品推荐
相关产品推荐

