查看braintree事务是否具有成功状态

时间:2017-04-22 11:16:46

标签: payment braintree

Braintree为交易提供pretty massive list of different statuses。如果没有硬编码大量的状态(可能在将来发生变化),是否有建议的方法来了解Braintree::Transaction是否成功?

4 个答案:

答案 0 :(得分:1)

看起来他们在名为 is_success的结果对象上有一个方法,如果没有成功则返回True,否则返回False。

答案 1 :(得分:1)

我得到了Braintree支持的以下回复:

  

成功的交易将通过以下状态:授权>提交结算>定居>结算。如果您的目标只是显示成功的交易,我的建议是仅提取状态为已结算的交易。一旦交易达到结算状态,它将永远不会改变。但是,状态为“已提交结算或结算”的交易虽然很少,但在结算过程中可能会被拒绝或返回错误。

在我的代码中,我选择执行以下操作:

def is_braintree_status_successful?(braintree_transaction)
  %w(authorized submitted_for_settlement settling settled).include?(braintree_transaction.status)
end

答案 2 :(得分:1)

我也向Braintree支持提出了类似的问题,即使我决定使用Stripe(我在所有测试后发现条纹好得多),答案也可能对其他人有用(。)

<强>问题

您好,

刚刚整合了Braintree,但无法找到我应该如何获得交易确认(意味着它已被正确“收费”)。当我创建一个'transaction.sale'(包括submitForSettlement)时,我总是得到(沙盒)一个响应,表明状态'已提交结算',并且交易不会在Braintree全局处理(晚上等)之前结算。 )。我也找不到相关的webhook来获得付款确认(因为我目前使用PayPal - IPN)。

何时/如何获得付款确认,以便我可以“交付”所购买的商品?通过检查您的文档,就像您在第二天之前无法得到确认...它是如何工作的?

谢谢!

<强>答案

嗨Nacho,

感谢您的联系!

Braintree交易经历了几个步骤,其中第二个步骤被提交以进行结算。这意味着资金已经开始从客户账户转移,并且是提交后交易的直接状态;提交时无法立即获得“已确定”或“完整”状态。此州的交易通常会在24小时内转为结算,然后结算,但这取决于您的处理银行。

交易在从提交结算转为结算时失败是非常不寻常的,因为在提交结算之前该数额将被授权。授权交易意味着资金在客户账户中被搁置一段时间,具体取决于付款方式,直到结算为止。我们从处理银行立即得到关于授权是否成功的响应,您将在Braintree_Transaction响应对象中看到。

因此,您通常可以依赖提交结算的状态来反映有效的成功交易。

我们不提供交易的webhooks - 相反,我们的API旨在通过响应对象提供即时反馈。因此,我们仅为不是由API调用触发的异步事件提供webhook(例如对订阅进行计费或支付资金)。除了我们的报告系统和全面的搜索调用选项外,我们还鼓励客户使用我们的API响应,以获得他们所需的任何额外功能。

如果您想提取交易的更新状态,例如确认付款已经结算,您可以使用Transaction.find()API请求,传入事务ID并从响应对象中读取状态。这可以很容易地作为脚本运行,该脚本遍历前几天的事务ID并每天更新每个事务ID的状态。

我希望这能更清晰地解释交易过程并为您提供一些选择!

亲切的问候,Braintree

以防它有帮助!

答案 3 :(得分:0)

当你进行交易时,你应该得到一个结果对象,该对象将包含交易是否成功。

这是一个人为的例子

<?php

require 'braintree_setup.php';

$nonceFromTheClient = $_POST["payment-method-nonce"];

$result = Braintree\Transaction::sale([
    'amount' => '10.00',
    'paymentMethodNonce' => $nonceFromTheClient,
    'options' => [
        'submitForSettlement' => true,
        'threeDSecure' => [
            'required' => true
        ]
    ]

]);

if ($result->success) {
   die('Payment was successful');
}

编辑:关于你的评论,

如果您想获得一系列交易,则需要使用Braintree\Transaction::search()方法。

完成后,您可以像使用其他任何内容一样循环结果。

foreach ($transactions as $transaction) {
    var_dump($transaction);
}
相关问题