### 1. Используется БД для хранения данных.
"illuminate/database": "^9.32"
Создание объекта Capsule для установки соединения с БД:

```php
$capsule = new Capsule;
$capsule->addConnection([
    'driver' => 'mysql',
    'host' => 'localhost',
    'database' => 'database',
    'username' => 'root',
    'password' => 'password',
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
]);
```

### 2. Используется кеш в памяти для временного хранения сложных запросов к БД.
"watson/rememberable": "^6.0"
Сохранение статьи первого пользователя на 6 часов (360 минут):

```php
User::first()->remember(360)->posts()->get();
```

### 3. Формируются XLS-отчеты на основе данных.
"phpoffice/phpspreadsheet": "^1.25"
Чтение и запись электронных таблиц в разных форматах.


### 4. Формируются PDF-документы на основе данных.
"tecnickcom/tcpdf": "^6.5"
Генерация PDF-документов.


### 5. Отправляются SMS-сообщения для верификации пользователей.
"symfony/mailer": "^6.1"
Отправляет SMS через API Twilio:

```php
// Your Account SID and Auth Token from twilio.com/console
$sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$token = 'your_auth_token';
$client = new Client($sid, $token);

// Use the client to do fun stuff like send text messages!
$client->messages->create(
	// the number you'd like to send the message to
	'+15558675309',
        [
		// A Twilio phone number you purchased at twilio.com/console
		'from' => '+15017250604',
            	// the body of the text message you'd like to send
            	'body' => 'Hey Jenny! Good luck on the bar exam!'
        ]
);
```

### 6. Отправляются E-mail-уведомления и рассылки для пользователей.


### 7. Используется облачное хранилище AWS S3 или Windows Azure Blob для статичных файлов.
"aws/aws-sdk-php": "^3.237"
Подключает к проекту сервисы Amazon:

```php
// Настройка клиента для S3, указание региона и последней версии
$s3 = new Aws\S3\S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);
// Отправка запроса PutObject
$s3Client->putObject([
    'Bucket' => 'bucket',
    'Key'    => 'key',
    'Body'   => 'body'
]);
// Загрузка объекта
$result = $s3Client->getObject([
    'Bucket' => 'bucket',
    'Key'    => 'key'
]);
```

### 8. Используется интеграция со службой доставки для расчета стоимости (например, PickPoint или Почта России)
"sch-group/pickpoint": "^4.2"
Обращается к PickPoint:

```php
$config = [
 'host' => '',
 'login' => '',
 'password' => '',
 'ikn' => '',
];

$pickPointConf = new PickPointConf($config['host'], $config['login'], $config['password'], $config['ikn']);
$defaultPackageSize = new PackageSize(20, 20,20); // может быть null
$senderDestination = new SenderDestination('Москва', 'Московская обл.'); // Адрес отправителя
$client = new PickPointConnector($pickPointConf, $senderDestination, $defaultPackageSize);
```

"lapaygroup/russianpost": "*"
Обращается к Почте России:

```php
$objectId = 2020; // Письмо с объявленной ценностью
// Минимальный набор параметров для расчета стоимости отправления
$params = [
	'weight' => 20, // Вес в граммах
        'sumoc' => 10000, // Сумма объявленной ценности в копейках
        'from' => 109012 // Почтовый индекс места отправления
];

// Список ID дополнительных услуг 
// 2 - Заказное уведомление о вручении 
// 21 - СМС-уведомление о вручении
$services = [2,21];

$TariffCalculation = new \LapayGroup\RussianPost\TariffCalculation();
$calcInfo = $TariffCalculation->calculate($objectId, $params, $services);
```

### 9. Используется интеграция с социальными сетями для авторизации пользователей.
"hybridauth/hybridauth": "^3.8"
Пакет для интеграции Facebook, Twitter, Google и т.д. Аутентификация через GitHub:

```php
$config = [
    'callback' => 'https://example.com/path/to/script.php',
    'keys' => [ 'id' => 'your-app-id', 'secret' => 'your-app-secret' ]
];
$github = new Hybridauth\Provider\GitHub($config);
$github->authenticate();
$userProfile = $github->getUserProfile();
```

### 10. Данные о товарах регулярно отправляются в Яндекс.Маркет.
"yandex-market/yandex-market-php-partner": "^2.4"
Подключение API Яндекс.Маркета:

```php
// Указываем авторизационные данные
$clientId = '9876543210fedcbaabcdef0123456789';
$token = '01234567-89ab-cdef-fedc-ba9876543210';

// Создаем экземпляр клиента с базовыми методами
$baseClient = new \Yandex\Market\Partner\Clients\BaseClient($clientId, $token);

// Магазины возвращаются постранично
$pageNumber = 0;
do {
    $pageNumber++;
    
    // Получаем страницу магазинов с номером pageNumber
    $campaignsObject = $baseClient->getCampaigns(['page' => $pageNumber,]);
    // Получаем итератор по магазинам на странице
    $campaignsPage = $campaignsObject->getCampaigns();

    // Получаем количество магазинов на странице
    $campaignsCount = $campaignsPage->count();

    // Получаем первый магазин
    $campaign = $campaignsPage->current();
    // Печатаем идентификатор и URL магазина, затем переходим к следующему    
    for ($i = 0; $i < $campaignsCount; $i++) {
        echo 'ID: ' . $campaign->getId();
        echo 'Domain: ' . $campaign->getDomain();        
        $campaign = $campaignsPage->next();
    }
    
    // Получаем информацию о страницах. Возвращаемое количество страниц может увеличиваться 
    // по мере увеличения номера страницы. Последняя страница будет достигнута, 
    // когда вернется количество страниц, равное номеру текущей страницы    
    $campaignsTotalPages = $campaignsObject->getPager()->getPagesCount();
} while ($pageNumber != $campaignsTotalPages); 
```

### 11. Принимается онлайн-оплата от покупателей.
"trustly/trustly-client-php": "^2021.1"
Подключение онлайн-платежей:

```php
/* Change 'test.trustly.com' to 'trustly.com' below to use the live environment */
$api = new Trustly_Api_Signed(
                $trustly_rsa_private_key,
                $trustly_username,
                $trustly_password,
                'test.trustly.com'
            );

$deposit = $api->deposit(
                "$base_url/php/example.php/notification",   /* NotificationURL */
                'john.doe@example.com',                     /* EndUserID */
                $messageid,                                 /* MessageID */
                'en_US',                                    /* Locale */
                $amount,                                    /* Amount */
                $currency,                                  /* Currency */
                'SE',                                       /* Country */
                NULL,                                       /* MobilePhone */
                'Sam',                                      /* FirstName */
                'Trautman',                                 /* LastName */
                NULL,                                       /* NationalIdentificationNumber */
                NULL,                                       /* ShopperStatement */
                $ip,                                        /* IP */
                "$base_url/success.html",                   /* SuccessURL */
                "$base_url/fail.html",                      /* FailURL */
                NULL,                                       /* TemplateURL */
                NULL,                                       /* URLTarget */
                NULL,                                       /* SuggestedMinAmount */
                NULL,                                       /* SuggestedMaxAmount */
                'trustly-client-php example/1.0'            /* IntegrationModule */
                FALSE,                                      /* HoldNotifications */
                'john.doe@example.com',                     /* Email */
                'SE',                                       /* ShippingAddressCountry */
                '12345',                                    /* ShippingAddressPostalCode */
                'ExampleCity',                              /* ShippingAddressCity */
                '123 Main St'                               /* ShippingAddressLine1 */
                'C/O Careholder',                           /* ShippingAddressLine2 */
                NULL                                        /* ShippingAddress */
            );

$iframe_url= $deposit->getData('url');

Example notification processing
$request = $api->handleNotification($notification_body);
    # FIXME Handle the incoming notification data here
$notifyresponse = $api->notificationResponse($request, TRUE);
```

### 12. Применяются средства тестирования (например, PHPUnit).
"phpunit/phpunit": "^9.5"
Объект для модульного тестирования:

```php
class StackTest extends TestCase
{
  public function testPushAndPop()
  {
    $stack = [];
    $this->assertSame(0, count($stack));
    array_push($stack, 'foo');
    $this->assertSame('foo', $stack[count($stack)-1]);
    $this->assertSame(1, count($stack));
    $this->assertSame('foo', array_pop($stack));
    $this->assertSame(0, count($stack));
  }
}
```