Braintree payments - проверка статуса транзакции

Я создаю свой первый сайт электронной коммерции и использую 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 для расчета. Однако затем я хочу иметь возможность отправлять еще один запрос в Braintree (возможно, один раз в день через задание cron), чтобы узнать, была ли эта транзакция рассчитана или отклонена, и соответствующим образом обновить мою БД.

Я пытался понять это, глядя на документацию Braintrees (https://developers.braintreepayments.com/reference/response/transaction/php#result-object), но я не совсем понимаю.

Я хочу иметь возможность передать сохраненный мной идентификатор транзакции обратно в 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);
    }
}

Если кто-нибудь может оказать мне помощь или содействие в этом, я был бы очень признателен.

1
0
1 099
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если ваша транзакция не удалась, вы можете получить отчет об ошибке, используя следующие

$result->errors->shallowAll(); 

Он вернет сведения об ошибке и код BraintreeErrorValidation.

Спасибо за ответ, однако меня не слишком беспокоят ошибки. Я буду смотреть на ошибку только в том случае, если что-то пошло не так, иначе все ошибки можно будет обрабатывать одинаково. Мое главное беспокойство (я имею в виду, что основное беспокойство моего босса) - это $$$, поэтому мне нужно проверить, действительно ли они были рассчитаны после того, как они были отправлены на расчет.

Paddy Hallihan 11.04.2018 14:03

Вы можете увидеть детали транзакции, используя атрибуты $ result-> transaction -> _

sarath s rajendran 11.04.2018 14:19
Ответ принят как подходящий

Full disclosure: I work at Braintree. If you have any additional questions, please contact support

Если у вас есть идентификатор транзакции, вы можете получить доступ к статусу транзакции, передав идентификатор в Вызов API поиска транзакции, который возвращает объект транзакции, и запрос статуса, используя:

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

При этом обычно нет необходимости запрашивать окончательный статус транзакции после отправки на расчет во время объявления о продаже транзакции.

Статусы Расчет отклонен возможны только для продаж PayPal, возврата Paypal и возврата средств с кредитной карты. Если продажа транзакции по кредитной карте авторизована и отправлена ​​на расчет, она также станет расчетной. Даже для транзакций PayPal транзакция немедленно достигнет статуса Расчет отклонен, поэтому вы можете запросить статус сразу после вызова продажи транзакции, используя $transaction->status.

Транзакции Ожидается расчет также возможны только для транзакций PayPal и достигнут этого статуса сразу после объявления о продаже. Они возможны для транзакций по кредитным картам, но только если вы попросите нас включить их.

Большое спасибо. Приятно видеть, что Брейнтри предлагает ответы на открытых форумах!

Paddy Hallihan 12.04.2018 13:13

Другие вопросы по теме