subjectReader = $subjectReader; } /** * Handles response * * @param array $handlingSubject * @param array $response * @return void */ public function handle(array $handlingSubject, array $response) { $paymentDO = $this->subjectReader->readPayment($handlingSubject); if ($paymentDO->getPayment() instanceof Payment) { /** @var \Braintree\Transaction $transaction */ $transaction = $this->subjectReader->readTransaction($response); /** @var Payment $orderPayment */ $orderPayment = $paymentDO->getPayment(); $this->setTransactionId( $orderPayment, $transaction ); $orderPayment->setIsTransactionClosed($this->shouldCloseTransaction()); $closed = $this->shouldCloseParentTransaction($orderPayment); $orderPayment->setShouldCloseParentTransaction($closed); } } /** * @param Payment $orderPayment * @param \Braintree\Transaction $transaction * @return void */ protected function setTransactionId(Payment $orderPayment, \Braintree\Transaction $transaction) { $orderPayment->setTransactionId($transaction->id); } /** * Whether transaction should be closed * * @return bool */ protected function shouldCloseTransaction() { return false; } /** * Whether parent transaction should be closed * * @param Payment $orderPayment * @return bool * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function shouldCloseParentTransaction(Payment $orderPayment) { return false; } }