Bläddra i källkod

Added homework 2

Vlad Shadrin 2 år sedan
förälder
incheckning
2c071d43f9
2 ändrade filer med 257 tillägg och 0 borttagningar
  1. 18 0
      hw2-composer/composer.json
  2. 239 0
      hw2-composer/readme.txt

+ 18 - 0
hw2-composer/composer.json

@@ -0,0 +1,18 @@
+{
+    "require": {
+        "illuminate/database": "^9.32",
+        "watson/rememberable": "^6.0",
+        "phpoffice/phpspreadsheet": "^1.25",
+        "tecnickcom/tcpdf": "^6.5",
+        "symfony/mailer": "^6.1",
+        "aws/aws-sdk-php": "^3.237",
+	"sch-group/pickpoint": "^4.2",
+        "lapaygroup/russianpost": "*",
+	"hybridauth/hybridauth": "^3.8",
+        "yandex-market/yandex-market-php-partner": "^2.4",
+        "trustly/trustly-client-php": "^2021.1"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "^9.5"
+    }
+}

+ 239 - 0
hw2-composer/readme.txt

@@ -0,0 +1,239 @@
+1. Используется БД для хранения данных.
+"illuminate/database": "^9.32"
+Создание объекта Capsule для установки соединения с БД:
+
+$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 минут):
+
+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:
+
+// 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:
+
+// Настройка клиента для 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:
+
+$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": "*"
+Обращается к Почте России:
+
+$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:
+
+$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 Яндекс.Маркета:
+
+// Указываем авторизационные данные
+$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"
+Подключение онлайн-платежей:
+
+/* 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"
+Объект для модульного тестирования:
+
+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));
+  }
+}