private function transactionSuccessful($ipnParameters)
    {
        /**
         * First of all we have to check the validity of the IPN
         * message. We need to send back the contents of the query
         * string coming from Paypal's IPN message.
         */
        $ipnNotifyValidateUrl = $this->urlFactory->getApiEndpoint()
            . '?'
            . http_build_query(
                array_merge(
                    $this->urlFactory->getPaypalNotifyValidateQueryParam(),
                    $ipnParameters)
            );
        $ipnValidated = (file_get_contents($ipnNotifyValidateUrl) == 'VERIFIED');

        /**
         * Matching paid amount with the originating order amount,
         * this is a security check to prevent frauds by manually
         * changing the papal form.
         */
        $amountMatches = $this->paymentBridge->getAmount() / 100 == $ipnParameters['mc_gross'];
        $amountMatches = $amountMatches && $this->paymentBridge->getCurrency() == ($ipnParameters['mc_currency']);

        /**
         * When a transaction is successful, payment_status has a 'Completed' value.
         */

        return $amountMatches && $ipnValidated && (strcmp($ipnParameters['payment_status'], 'Completed') === 0);
    }