我正在创建我的第一个电子商务网站,并使用Braintree Payments作为网关。
我已将其设置为https://www.youtube.com/watch?v=dUAk5kwKfjs,以便现在接受付款,然后在DB中更新我的订单表,如下所示:
$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进行结算。但是,我希望能够向Braintree发送另一个请求(可能每天通过cron作业一次)以查看此事务是否已经解决或拒绝并正确更新我的数据库。
我一直试图通过查看Braintrees文档(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);
}
}
如果有人能给我任何帮助或帮助,我们将不胜感激。
答案 0 :(得分:3)
完全披露:我在Braintree工作。如果您有任何其他问题,请与support
联系如果您有事务ID,则可以通过将id传递到Transaction Find API Call并返回事务对象{和} querying the status来访问事务的状态:
$transaction = Braintree_Transaction::find("the_transaction_id");
$transaction->status;
// "settled"
话虽如此,通常不需要在交易销售电话中提交结算后查询交易的最终状态。
Settlement declined状态仅适用于PayPal销售,Paypal退款和信用卡退款。如果信用卡交易销售被授权并提交结算,它也将达到已解决的状态。即使对于PayPal交易,交易也会立即达到 Settlement Declined 状态,因此您也可以使用$transaction->status
在交易销售电话后立即查询状态。
Settlement pending交易也只适用于PayPal交易,并且会在售后电话后立即达到该状态。它们可用于信用卡交易,但仅当您要求我们启用它时才会这样做。
答案 1 :(得分:0)
如果您的交易失败,您可以使用以下
获取错误报告$result->errors->shallowAll();
它将返回错误详细信息和BraintreeErrorValidationcode。