Принципи генерації промокодів

Дані користувача

Email

Омніканальність

Автоматизація

Відстеження подій та поведінки

Принципи генерації промокодів за допомогою PHP/JAVA

Якщо загальні методи підстановки промокодів вам не підходять, розгляньте можливість реалізації цього завдання за допомогою PHP/JAVA.

Формат промокоду, який підтримує eSputnik

Промокод містить дату, до якої він діє, тип акції, розмір знижки та контрольну суму.

У результаті отримаємо такий рядок:

<YY><MM><DD><Promo type><Discount><CRC>
COPY
Поле Довжина Опис Приклад
YY 2 символи Рік, двозначне число 15, 54
MM 2 символи Місяць, двозначне число, якщо треба, доповнюється зліва нулем 01, 12
DD 2 символи День, двозначне число, якщо треба, доповнюється зліва нулем 06, 28
Promo type 1 символ Тип промокоду, може набувати значення від 0 до 31, кодується символом з алфавіту Base32 A, D, X
Discount 2 символи Розмір знижки у %, двозначне число, якщо треба, доповнюється нулем зліва 15, 02
CRC 1 символ Контрольна сума – одне зі значень алфавіту Base32 B, N, Z

У результаті виходить рядок завдовжки 10 символів такого виду: 151231Y16N

Зверніть увагу

Значення промокодів залежить від параметрів блоку та поточного календарного числа. Тобто протягом доби всі контакти отримуватимуть однаковий промокод, якщо у параметри блоку не вноситимуться зміни. Відстеження використання промокоду та терміну його дії має відбуватись на вашому боці.

Приклад використання типу промокоду (Promo type)

  • 0 – діє для всього кошика (must-have)
  • 1 – діє лише для категорії А
  • 2 – діє лише для категорії В

Важливо!

Якщо ви хочете використовувати типи промокоду таким чином, надішліть файл у підтримку eSputnik, вказавши, яка категорія продукту відповідає тому чи іншому коду.

Алгоритм розрахунку контрольної суми (CRC)

  1. По порядку сумується десяткове ASCII-значення кожного символу у вихідному рядку.
  2. Отримана сума ділиться із залишком на 32.
  3. Отриманий залишок використовується як індекс символу в алфавіті Base32.

Символ цього індекса і буде контрольною сумою.

Приклад коду на java:

public static final String BASE32_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";

public char checkSum(String data) {
    int sum = 0;
    for (char c : data.toCharArray()) {
        sum += c;
}
    return BASE32_ALPHABET.charAt(sum % BASE32_ALPHABET.length()); 
}
Java
COPY

Кодування/декодування промокоду

Для кодування/декодування використовується симетричний алгоритм шифрування Triple DES.

Щоб отримати людиночитаний текст, отримані під час шифрування дані кодуються за допомогою Base32.

Параметри шифрування, що використовуються:

  • ключ довжиною 24 байти,
  • initialization vector довжиною 8 байтів,
  • режим шифрування: CFB8 (Cipher Feedback Mode),
  • доповнення: NoPadding.

Послідовність дій під час кодування промокоду

  1. До промокоду застосовується алгоритм шифрування Triple DES.
  2. Щоб отримати людиночитаний текст, отримані за допомогою шифрування дані кодуються за допомогою Base32.
  3. Через кожні 4 символи для читабельності додається “-”.

Послідовність дій при декодуванні промокоду

  1. Видаліть “-”.
  2. Спочатку дані декодуються за допомогою Base32.
  3. Далі декодовані дані розшифровуються за допомогою Triple DES.
  4. Має вийти рядок із 10 символів згідно з описаним вище форматом. Для контролю правильності розшифрування використовується контрольна сума.

Секретний ключ

Для кодування та декодування промокодів секретний ключ використовується на стороні eSputnik і на стороні сервісу, який перевіряє промокоди.

Згенеруйте ключ eSSuperKeyXXXXXXXXXXXXXX (де XXX… – випадкові цифри) та створіть вектор ініціалізації: 12345678.

Важливо

Вектор ініціалізації завжди має бути 12345678.

Передайте обидва ці значення в підтримку eSputnik.

Приклад Java-коду

Java
COPY
MORE

Приклад PHP-коду

PHP
COPY
MORE

Важливо!

Використовуйте Format Preserving Encryption, щоб спростити переведення коду в людиночитаний формат.

Залишилися питання?
Спеціалісти обов'язково нададуть відповідь та допоможуть вирішити вашу проблему!
Консультація в чаті
Готові до ваших запитань!
Написати в чат
Електронна пошта
Напишіть в службу підтримки eSputnik.
Надіслати email