|
@@ -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));
|
|
|
+ }
|
|
|
+}
|