/**
  * Processes successful authorize/clone result
  *
  * @param \Magento\Framework\DataObject $payment
  * @param \Braintree_Result_Successful $result
  * @param string $amount
  * @return \Magento\Framework\DataObject
  */
 protected function processSuccessResult(\Magento\Framework\DataObject $payment, \Braintree_Result_Successful $result, $amount)
 {
     /** @var \Magento\Sales\Model\Order\Payment $payment */
     $payment->setStatus(self::STATUS_APPROVED)->setCcTransId($result->transaction->id)->setLastTransId($result->transaction->id)->setTransactionId($result->transaction->id)->setIsTransactionClosed(false)->setCcLast4($result->transaction->creditCardDetails->last4)->setAdditionalInformation($this->getExtraTransactionInformation($result->transaction))->setAmount($amount)->setShouldCloseParentTransaction(false);
     if ($this->isFinalCapture($payment->getParentId(), $amount)) {
         $payment->setShouldCloseParentTransaction(true);
     }
     if (isset($result->transaction->creditCard['token']) && $result->transaction->creditCard['token']) {
         $payment->setTransactionAdditionalInfo('token', $result->transaction->creditCard['token']);
     }
     return $payment;
 }
 public function postProcessing(\Magento\Sales\Model\Order $order, \Magento\Framework\DataObject $payment, $response)
 {
     // Update payment details
     $payment->setTransactionId($response['invoice_id']);
     $payment->setIsTransactionClosed(0);
     $payment->setTransactionAdditionalInfo('tco_order_number', $response['order_number']);
     $payment->setAdditionalInformation('tco_order_number', $response['order_number']);
     $payment->setAdditionalInformation('tco_order_status', 'approved');
     $payment->place();
     // Update order status
     $order->setStatus($this->getOrderStatus());
     $order->setExtOrderId($response['order_number']);
     $order->save();
     // Send email confirmation
     $this->orderSender->send($order);
 }