【发布时间】:2020-09-16 15:03:52
【问题描述】:
我已经在电子商务网站上使用 Braintree 大约一年了,我经常听到客户说他们无法弄清楚为什么他们的付款被拒绝。当交易被拒绝时,我会显示 Braintree 返回的错误消息(通过 Braintree_php 5.x),通常看起来像“Gateway Rejected: avs”(我的客户不知道这些词是什么意思)。
令人烦恼的是,这些错误似乎没有伴随错误代码。这是(缩写的)响应对象:
object(Braintree\Result\Error) {
success => false
[protected] _attributes => [
'errors' => object(Braintree\Error\ErrorCollection) {
[private] _errors => object(Braintree\Error\ValidationErrorCollection) {
[protected] _collection => []
[private] _errors => []
[private] _nested => []
}
},
[...]
'message' => 'Gateway Rejected: avs',
[...]
'creditCardVerification' => null,
'subscription' => null,
'merchantAccount' => null,
'verification' => null
]
}
因此,为了捕捉这些网关错误并将它们清晰地传达给我的客户,我不得不依靠对 $result->message 的检查。我的代码如下所示:
$result = $this->gateway->transaction()->sale([...]);
if (!$result->success) {
switch ($result->message) {
case 'Gateway Rejected: avs':
$error = 'The billing postal code you provided failed validation. Please try again.';
break;
case 'Gateway Rejected: avs_and_cvv':
$error = 'The postal code and/or CVV you provided failed validation. Please try again.';
break;
case 'Gateway Rejected: cvv':
$error = 'The CVV you provided failed validation. Please try again.';
break;
case 'Gateway Rejected: duplicate':
$error = 'Payment rejected as duplicate. If you feel this is in error, please contact us.';
break;
case 'Gateway Rejected: fraud':
$error = 'Payment rejected. Please try another payment method.';
break;
case 'Gateway Rejected: risk_threshold':
$error = 'Payment rejected. Please try another payment method.';
break;
default:
$error = $result->message ?? 'Payment failed. Please check your payment information and try again.';
break;
}
}
这是可行的,但感觉是错误的方法。例如,如果 Braintree 修改了 $result->message 文本怎么办?为什么我没有收到错误代码?我认为这是几乎每个使用 Braintree_php 的人都会遇到的问题,但我找不到任何提及它或任何代码演示处理错误的替代方法。
对于我的工作及其替代方案的任何反馈,我将不胜感激! (如果这实际上是处理这些错误的最佳方法,我将在这里为其他人记录我的方法。)
【问题讨论】:
标签: braintree