查看一个braintree事务是不是有成功状态
Posted
技术标签:
【中文标题】查看一个braintree事务是不是有成功状态【英文标题】:See if a braintree transaction has a successful status查看一个braintree事务是否有成功状态 【发布时间】:2017-09-19 09:26:42 【问题描述】:Braintree 为事务提供pretty massive list of different statuses。如果不硬编码大量状态列表(将来可能会发生变化),是否有推荐的方法来了解 Braintree::Transaction
是否成功?
【问题讨论】:
【参考方案1】:看起来他们在结果对象上有一个名为 is_success 的方法,如果成功则返回 True,否则返回 False。
【讨论】:
这对于我的情况是不正确的,因为我获得了订阅,并检查了交易列表并想知道哪些交易是“成功的”(或成功的旅程)。【参考方案2】:当您进行交易时,您应该返回一个结果对象,该对象将包含交易是否成功。
这是一个人为的例子
<?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);
【讨论】:
【参考方案3】:我得到了 Braintree 支持的以下回复:
成功的交易会经历以下状态:授权 > 提交结算 > 结算 > 已结算。如果您的目标是只显示成功的交易,我的建议是只提取状态为 Settled 的交易。一旦交易达到已结算状态,它将永远不会改变。但是,状态为提交结算或结算的交易虽然很少见,但在结算过程中可能会被拒绝或返回错误。
在我的代码中,我选择执行以下操作:
def is_braintree_status_successful?(braintree_transaction)
%w(authorized submitted_for_settlement settling settled).include?(braintree_transaction.status)
end
【讨论】:
【参考方案4】:我也向 Braintree 支持提出了一个类似的问题,即使我决定使用 Stripe,答案可能对其他人有用(经过所有测试,我发现 Stripe 好多了;)。
问题
嗨,
刚刚集成 Braintree,但找不到我应该如何获得交易确认(意味着它已正确“收费”)。当我创建一个“transaction.sale”(包括 submitForSettlement)时,我总是得到(沙盒)一个指示状态“提交结算”的响应,并且在 Braintree 全局处理它(在晚上等)之前,交易不会结算。 )。我也找不到相关的 webhook 来获得付款确认(因为我目前使用的是 PayPal - IPN)。
我何时/如何获得付款确认,以便“交付”购买的商品?通过检查您的文档,就好像您要到第二天才能得到确认……它究竟是如何工作的?
谢谢!
回答
嗨,纳乔,
感谢您与我们联系!
Braintree 交易经过几个步骤,其中的第二个步骤是提交结算。这意味着资金已经开始从客户账户中转移,并且是交易提交后的即时状态;提交时不可能立即获得“已解决”或“完成”状态。这种状态下的交易通常会在 24 小时内进入结算,然后结算,尽管这可能取决于您的处理银行。
从提交结算转为结算时,交易失败是非常罕见的,因为金额在提交结算之前就已获得授权。授权交易意味着资金在客户账户中被搁置一段时间,具体取决于付款方式,直到它们被结算。我们会立即从处理银行获得关于授权是否成功的响应,您将在 Braintree_Transaction 响应对象中看到。
因此,您通常可以依靠提交结算的状态来反映有效、成功的交易。
我们不为交易提供 webhook - 相反,我们的 API 旨在通过响应对象提供即时反馈。因此,我们只为不是由 API 调用触发的异步事件(例如为订阅计费或支付资金)提供 webhook。除了我们的报告系统和全面的搜索调用选项之外,我们鼓励客户利用我们的 API 响应来满足他们需要的任何额外功能。
如果您想获取交易的更新状态,例如确认付款已结算,您可以使用 Transaction.find() API 请求,传入交易 ID 并从响应对象中读取状态。这可以很容易地作为一个脚本运行,该脚本遍历前几天的事务 ID 并每天更新每个事务的状态。
我希望这能更清楚地解释交易过程并为您提供一些选择!
亲切的问候,布伦特里
以防万一!
【讨论】:
以上是关于查看一个braintree事务是不是有成功状态的主要内容,如果未能解决你的问题,请参考以下文章