readme.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. 1. Используется БД для хранения данных.
  2. "illuminate/database": "^9.32"
  3. Создание объекта Capsule для установки соединения с БД:
  4. $capsule = new Capsule;
  5. $capsule->addConnection([
  6. 'driver' => 'mysql',
  7. 'host' => 'localhost',
  8. 'database' => 'database',
  9. 'username' => 'root',
  10. 'password' => 'password',
  11. 'charset' => 'utf8',
  12. 'collation' => 'utf8_unicode_ci',
  13. 'prefix' => '',
  14. ]);
  15. 2. Используется кеш в памяти для временного хранения сложных запросов к БД.
  16. "watson/rememberable": "^6.0"
  17. Сохранение статьи первого пользователя на 6 часов (360 минут):
  18. User::first()->remember(360)->posts()->get();
  19. 3. Формируются XLS-отчеты на основе данных.
  20. "phpoffice/phpspreadsheet": "^1.25"
  21. Чтение и запись электронных таблиц в разных форматах.
  22. 4. Формируются PDF-документы на основе данных.
  23. "tecnickcom/tcpdf": "^6.5"
  24. Генерация PDF-документов.
  25. 5. Отправляются SMS-сообщения для верификации пользователей.
  26. "symfony/mailer": "^6.1"
  27. Отправляет SMS через API Twilio:
  28. // Your Account SID and Auth Token from twilio.com/console
  29. $sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
  30. $token = 'your_auth_token';
  31. $client = new Client($sid, $token);
  32. // Use the client to do fun stuff like send text messages!
  33. $client->messages->create(
  34. // the number you'd like to send the message to
  35. '+15558675309',
  36. [
  37. // A Twilio phone number you purchased at twilio.com/console
  38. 'from' => '+15017250604',
  39. // the body of the text message you'd like to send
  40. 'body' => 'Hey Jenny! Good luck on the bar exam!'
  41. ]
  42. );
  43. 6. Отправляются E-mail-уведомления и рассылки для пользователей.
  44. 7. Используется облачное хранилище AWS S3 или Windows Azure Blob для статичных файлов.
  45. "aws/aws-sdk-php": "^3.237"
  46. Подключает к проекту сервисы Amazon:
  47. // Настройка клиента для S3, указание региона и последней версии
  48. $s3 = new Aws\S3\S3Client([
  49. 'version' => 'latest',
  50. 'region' => 'us-east-1'
  51. ]);
  52. // Отправка запроса PutObject
  53. $s3Client->putObject([
  54. 'Bucket' => 'bucket',
  55. 'Key' => 'key',
  56. 'Body' => 'body'
  57. ]);
  58. // Загрузка объекта
  59. $result = $s3Client->getObject([
  60. 'Bucket' => 'bucket',
  61. 'Key' => 'key'
  62. ]);
  63. 8. Используется интеграция со службой доставки для расчета стоимости (например, PickPoint или Почта России)
  64. "sch-group/pickpoint": "^4.2"
  65. Обращается к PickPoint:
  66. $config = [
  67. 'host' => '',
  68. 'login' => '',
  69. 'password' => '',
  70. 'ikn' => '',
  71. ];
  72. $pickPointConf = new PickPointConf($config['host'], $config['login'], $config['password'], $config['ikn']);
  73. $defaultPackageSize = new PackageSize(20, 20,20); // может быть null
  74. $senderDestination = new SenderDestination('Москва', 'Московская обл.'); // Адрес отправителя
  75. $client = new PickPointConnector($pickPointConf, $senderDestination, $defaultPackageSize);
  76. "lapaygroup/russianpost": "*"
  77. Обращается к Почте России:
  78. $objectId = 2020; // Письмо с объявленной ценностью
  79. // Минимальный набор параметров для расчета стоимости отправления
  80. $params = [
  81. 'weight' => 20, // Вес в граммах
  82. 'sumoc' => 10000, // Сумма объявленной ценности в копейках
  83. 'from' => 109012 // Почтовый индекс места отправления
  84. ];
  85. // Список ID дополнительных услуг
  86. // 2 - Заказное уведомление о вручении
  87. // 21 - СМС-уведомление о вручении
  88. $services = [2,21];
  89. $TariffCalculation = new \LapayGroup\RussianPost\TariffCalculation();
  90. $calcInfo = $TariffCalculation->calculate($objectId, $params, $services);
  91. 9. Используется интеграция с социальными сетями для авторизации пользователей.
  92. "hybridauth/hybridauth": "^3.8"
  93. Пакет для интеграции Facebook, Twitter, Google и т.д. Аутентификация через GitHub:
  94. $config = [
  95. 'callback' => 'https://example.com/path/to/script.php',
  96. 'keys' => [ 'id' => 'your-app-id', 'secret' => 'your-app-secret' ]
  97. ];
  98. $github = new Hybridauth\Provider\GitHub($config);
  99. $github->authenticate();
  100. $userProfile = $github->getUserProfile();
  101. 10. Данные о товарах регулярно отправляются в Яндекс.Маркет.
  102. "yandex-market/yandex-market-php-partner": "^2.4"
  103. Подключение API Яндекс.Маркета:
  104. // Указываем авторизационные данные
  105. $clientId = '9876543210fedcbaabcdef0123456789';
  106. $token = '01234567-89ab-cdef-fedc-ba9876543210';
  107. // Создаем экземпляр клиента с базовыми методами
  108. $baseClient = new \Yandex\Market\Partner\Clients\BaseClient($clientId, $token);
  109. // Магазины возвращаются постранично
  110. $pageNumber = 0;
  111. do {
  112. $pageNumber++;
  113. // Получаем страницу магазинов с номером pageNumber
  114. $campaignsObject = $baseClient->getCampaigns(['page' => $pageNumber,]);
  115. // Получаем итератор по магазинам на странице
  116. $campaignsPage = $campaignsObject->getCampaigns();
  117. // Получаем количество магазинов на странице
  118. $campaignsCount = $campaignsPage->count();
  119. // Получаем первый магазин
  120. $campaign = $campaignsPage->current();
  121. // Печатаем идентификатор и URL магазина, затем переходим к следующему
  122. for ($i = 0; $i < $campaignsCount; $i++) {
  123. echo 'ID: ' . $campaign->getId();
  124. echo 'Domain: ' . $campaign->getDomain();
  125. $campaign = $campaignsPage->next();
  126. }
  127. // Получаем информацию о страницах. Возвращаемое количество страниц может увеличиваться
  128. // по мере увеличения номера страницы. Последняя страница будет достигнута,
  129. // когда вернется количество страниц, равное номеру текущей страницы
  130. $campaignsTotalPages = $campaignsObject->getPager()->getPagesCount();
  131. } while ($pageNumber != $campaignsTotalPages);
  132. 11. Принимается онлайн-оплата от покупателей.
  133. "trustly/trustly-client-php": "^2021.1"
  134. Подключение онлайн-платежей:
  135. /* Change 'test.trustly.com' to 'trustly.com' below to use the live environment */
  136. $api = new Trustly_Api_Signed(
  137. $trustly_rsa_private_key,
  138. $trustly_username,
  139. $trustly_password,
  140. 'test.trustly.com'
  141. );
  142. $deposit = $api->deposit(
  143. "$base_url/php/example.php/notification", /* NotificationURL */
  144. 'john.doe@example.com', /* EndUserID */
  145. $messageid, /* MessageID */
  146. 'en_US', /* Locale */
  147. $amount, /* Amount */
  148. $currency, /* Currency */
  149. 'SE', /* Country */
  150. NULL, /* MobilePhone */
  151. 'Sam', /* FirstName */
  152. 'Trautman', /* LastName */
  153. NULL, /* NationalIdentificationNumber */
  154. NULL, /* ShopperStatement */
  155. $ip, /* IP */
  156. "$base_url/success.html", /* SuccessURL */
  157. "$base_url/fail.html", /* FailURL */
  158. NULL, /* TemplateURL */
  159. NULL, /* URLTarget */
  160. NULL, /* SuggestedMinAmount */
  161. NULL, /* SuggestedMaxAmount */
  162. 'trustly-client-php example/1.0' /* IntegrationModule */
  163. FALSE, /* HoldNotifications */
  164. 'john.doe@example.com', /* Email */
  165. 'SE', /* ShippingAddressCountry */
  166. '12345', /* ShippingAddressPostalCode */
  167. 'ExampleCity', /* ShippingAddressCity */
  168. '123 Main St' /* ShippingAddressLine1 */
  169. 'C/O Careholder', /* ShippingAddressLine2 */
  170. NULL /* ShippingAddress */
  171. );
  172. $iframe_url= $deposit->getData('url');
  173. Example notification processing
  174. $request = $api->handleNotification($notification_body);
  175. # FIXME Handle the incoming notification data here
  176. $notifyresponse = $api->notificationResponse($request, TRUE);
  177. 12. Применяются средства тестирования (например, PHPUnit).
  178. "phpunit/phpunit": "^9.5"
  179. Объект для модульного тестирования:
  180. class StackTest extends TestCase
  181. {
  182. public function testPushAndPop()
  183. {
  184. $stack = [];
  185. $this->assertSame(0, count($stack));
  186. array_push($stack, 'foo');
  187. $this->assertSame('foo', $stack[count($stack)-1]);
  188. $this->assertSame(1, count($stack));
  189. $this->assertSame('foo', array_pop($stack));
  190. $this->assertSame(0, count($stack));
  191. }
  192. }