public function collectEshopData( $blLogData = true )
    {
        /** @var OxpsPaymorrowOxUser|oxUser $oUser */
        $oUser = $this->getUser();

        // If user does not exist return null
        if ( !$oUser->exists() ) {
            return null;
        }

        /** @var OxpsPaymorrowSettings $oPmSettings */
        $oPmSettings = oxNew( 'OxpsPaymorrowSettings' );

        // Mandatory authentication data
        $aData = $this->collectCommonData();

        $aData['addressEditing_disabled'] = 'N';
        $aData['order_id']                = $this->_getBasketAndSessionHash();
        $aData['source']                  = 'PAYMORROW_GATEWAY_JS';
        $aData['operationMode']           = $oPmSettings->getPaymorrowOperationMode();

        // Order data
        $aData = $this->_addOrderData( $aData, $oUser );

        // User profile data
        $aData = $this->_addUserProfileData( $aData, $oUser );

        // User shipping address data
        $aData = $this->_addUserShippingAddressData( $aData, $oUser );

        // User order history data
        $aData = $this->_addOrderHistoryData( $aData, $oUser );

        // Device and client data
        $aData = $this->_addDeviceAndClientData( $aData, $oUser );

        if ( !empty( $blLogData ) ) {

            /** @var OxpsPaymorrowLogger $oLogger */
            $oLogger = oxRegistry::get( 'OxpsPaymorrowLogger' );
            $oLogger->logWithType( $aData, 'collectEshopData' );
        }

        return $aData;
    }