查看一个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事务是不是有成功状态的主要内容,如果未能解决你的问题,请参考以下文章

Redis——事务 & 锁机制

Redis——事务 & 锁机制

Redis---事务篇

怎么关闭浏览器地址栏下面的百度搜索推荐

有成功吧 windows 10 做成VHD在移动硬盘里启动的吗

Dell R720 安装Dell定制版ESXi6.5 进度卡在29%,请问有成功安装esxi6.5的多多解