Принципы генерации промокодов с помощью PHP/JAVA

Пользовательские данные

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 байта
  • initialisation_vector длиной 8 байт
  • режим шифрования: CFB8 (Cipher Feedback Mode)
  • дополнение: NoPadding

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

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

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

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

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

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

Сгенерируйте ключ eSSuperKeyXXXXXXXXXXXXXX (где ХХХ… – случайные цифры) и создайте вектор инициализации: 12345678.

Важно

Вектор инициализации всегда должен быть 12345678.

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

Пример Java-кода

Java
COPY
MORE

Пример PHP-кода

PHP
COPY
MORE

Важно!

Используйте Format Preserving Encryption, чтобы упростить перевод кода в человекочитаемый вид.

Остались вопросы?
Специалисты обязательно ответят и помогут решить вашу проблему!
Консультация в чате
Готовы к вашим вопросам!
Написать в чат
Электронная почта
Напишите в службу поддержки eSputnik.
Отправить email