Як правильно читати теги з двокрапкою (<p:id>) у google_merchant.xml у PHP
Спосіб читання xml з тегами, що мають двокрапку <p:id>, як у вивантаженні в Google Merchant. Використання registerXPathNamespace або звернення безпосередньо до тега.
JWT (JSON Web Token) має три компоненти, розділених точками: заголовок, корисне навантаження (payload) та підпис. Підпис є шифрованим хешом від перших двох компонентів, використовуючи ключ.
При створенні токена сервер формує заголовок і корисне навантаження, записує їх у формат JSON і кодує змінений BASE64. Це дає два рядки, які поєднуються через точку. Потім формується підпис від загального рядка з використанням вказаного в заголовку алгоритму. Підпис додається через точку, створюючи повний токен.
При отриманні запиту з токеном сервер розбиває токен на компоненти, розшифровує заголовок та визначає алгоритм підпису. Потім сервер обчислює контрольний підпис від перших двох компонентів токена і порівнює його з тим, що вказано в токені. Якщо вони збігаються, то токен вважається дійсним.
При використанні симетричного алгоритму обидва сервери знають той самий ключ - сервер, який генерує токен, і сервер, який його перевіряє. Асиметричне шифрування дозволяє створювати токени на одному сервері з використанням закритого ключа та перевіряти їх на іншому сервері з використанням відповідного відкритого ключа.
Приклад токена:
$token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Nwid WF0IjoxNTE2MjM5MDIyfQ.qeDJnxS97205riRwowv_szvCv-h2IiPqAAnhFA214CI';
Секретний ключ, яким було зашифровано:
$key = 'private_key';< /p>
Розглянемо обробку та звіряння сигнатур:
<?php
$token = 'Наведено вище';
$key = 'Наведено вище';
// Розділяємо наш token на 3 змінні
$jwtArr = array_combine(['header', 'payload', 'signature'], explode('.', $token));
// base64_decode($jwtArr['header']) - заголовок
// {"alg":"HS256","typ":"JWT"}
//
// base64_decode($jwtArr['payload']) - тiло
// {"alg":"HS256","typ":"JWT"}
//
// $jwtArr['signature'] - підпис на основі секретного ключа, $key
// qeDJnxS97205riRwowv_szvCv-h2IiPqAAnhFA214CI
$calculatedHash = hash_hmac(
'sha256',
$jwtArr['header'] . '.' . $jwtArr['payload'],
$key,
true);
// sha256 суму, кодуємо в base64 і наводимо до повної версії
$calcSign = convertBase64UrlToBase64(base64_encode($calculatedHash));
// Наводимо до повної версії сигнатуру, яка була в коді
$unswerS = convertBase64UrlToBase64($jwtArr['signature']);
if ($calcSign === $unswerS) {
die("Сигнатура збіглася, цілісність не порушена");
} else {
die("Сигнатура НЕ збіглася, цілісність ПОРУШЕНА");
}
// Приводить обрізану base64 у нормальну
function convertBase64UrlToBase64($input) {
$remainder = \strlen($input) % 4;
if ($remainder) {
$padlen = 4 - $remainder;
$input .= \str_repeat('=', $padlen);
}
return \strtr($input, '-_', '+/');
}
Шляхом обчислення SHA-256 хешу для об'єднаних перших двох частин токена із застосуванням відповідного ключа можна переконатися, що цей хеш збігається з першою частиною токену, що підтверджує відсутність змін у перших двох частинах.
Сервіс для онлайн для тестів.
Бібліотека з готовими рішеннями
Спосіб читання xml з тегами, що мають двокрапку <p:id>, як у вивантаженні в Google Merchant. Використання registerXPathNamespace або звернення безпосередньо до тега.
Розглянемо виправлення зникнення пробiлiв перед змінними у старій версії Twig на php 7.4 не оновлюючи версію.
Розглянемо можливість швидкого створення CSV файлу з автоматичним скачуванням файлу. Розглянемо формування, роздільники та header для можливості завантажити файл.
Останні шаблони від ImageCMS 4.12, для завантаження потрібна авторизація.
Розглянемо варіанти популярних варіантів зберігання товарів у кошику в інтернет-магазині. Позначимо плюси та мінуси таких зберігання. Розглянемо варіанти довгострокового зберігання корзини.