布伦特里付款 - 检查交易状态



我正在创建我的第一个电子商务网站,并使用Braintree Payments作为网关。

我已经按照此处所示进行了设置,https://www.youtube.com/watch?v=dUAk5kwKfjs 以便它现在接受付款,然后在数据库中更新我的订单表,如下所示:

$result = Braintree_Transaction::sale([
'amount' => $total,
'orderId' => $order_id,
'merchantAccountId' => $active_country_braintree,
'paymentMethodNonce' => $nonce,
'customer' => [
'firstName' => $first_name,
'lastName' => $last_name,
'email' => $email
], 
'options' => [
'submitForSettlement' => true
]
]);
if ($result->success === true) {
$transaction_id = $result->transaction->id;
$params = [$transaction_id,$order_id];
$sql = "UPDATE orders SET transaction_id=?, status='processing payment', date_last_status_change=now() WHERE id=?";
$stmt = DB::run($sql,$params);
}else{
$error = serialize($result->errors);
$params = [$error,$order_id];
$sql = "UPDATE orders SET errors=? WHERE id=?";
$stmt = DB::run($sql,$params);
}

这工作正常,我所有的付款都被发送到布伦特里进行结算。但是,我希望能够向 Braintree 发送另一个请求(可能每天一次通过 cron 作业),以查看此事务是否已结算或拒绝,并适当地更新我的数据库。

我一直在试图通过查看 Braintree 文档 (https://developers.braintreepayments.com/reference/response/transaction/php#result-object) 来解决这个问题,但我并没有真正理解它。

我想要的是能够将我存储的交易ID传回Braintree并获取其状态。

$params = ['processing payment'];
$sql = "SELECT * FROM orders WHERE status=?";
$stmt = DB::run($sql,$params);
$orderCount = $stmt->rowCount();
if ($orderCount > 0) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$id = $row["id"];
$transaction_id = $row["transaction_id"];
$order_id = $row["order_id"];
// Pass transaction ID back to Braintree and get status
// $result = Braintree_Transaction::sale($transaction_id);
// var_dump($result);
}
}

如果有人能给我任何帮助或帮助,将不胜感激。

完全披露:我在Braintree工作。如果您有任何其他问题,请联系支持人员

如果您有事务 ID,则可以通过将 ID 传递到事务查找 API 调用(返回事务对象)并使用以下命令查询状态来访问事务的状态:

$transaction = Braintree_Transaction::find("the_transaction_id");
$transaction->status;
// "settled"

话虽如此,在交易销售调用期间提交结算后,通常不需要查询交易的最终状态。

结算被拒绝状态仅适用于PayPal销售、PayPal退款和信用卡退款。如果信用卡交易销售获得授权并提交结算,则也将达到结算状态。即使对于PayPal交易,交易也会立即达到结算已拒绝状态,因此您也可以在交易销售调用后立即使用$transaction->status查询状态。

结算待处理交易也只能用于PayPal交易,并将在销售调用后立即达到该状态。它们可以用于信用卡交易,但前提是您要求我们启用它。

如果事务失败,您可以使用以下命令获取错误报告

$result->errors->shallowAll(); 

它将返回错误详细信息和BraintreeErrorValidationcode。

最新更新