[php] Уникальный номер платежа

HooLIGUN

MatchMaking CS:S / RGMIX.ru
Сообщения
1,069
Реакции
269
Добрый день. Подскажите, каким способом создать уникальный номер платежа?
Я использую вот этот, подглядел в каком то ЛК
PHP:
    $order = time() % 100000;
Но заметил, что счета не уникальные, и бывает, что в разное время может создаться одинаковый номер. При этом платежный сервис не создает дубль платежа, а просто перезаписывает предыдущий (см. второй скрин, order_kassa, обработчик вернул одинаковый номер из платежной системы)
1605182951445.png


1605183160541.png
Из-за этого возникают некоторые проблемы с обработчиком (исправить их конечно можно, как минимум сортировкой по дате, но это не решение)
По порядку считать уже не вариант.
Может есть еще варианты?)
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #2
Если номер чисто числовой, то лучше просто автоинкремент сделать.
 
  • Мне нравится
Реакции: NaN

HooLIGUN

MatchMaking CS:S / RGMIX.ru
Сообщения
1,069
Реакции
269
Если номер чисто числовой, то лучше просто автоинкремент сделать.
Только одна колонка может быть с атрибутом auto_increment и она должна быть объявлена ключом (index or primary key)
у меня уже просто id занят этим. Теперь уже это выглядит не совсем правильно, но уже такая структура с кучей записей
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #4
@HooLIGUN, а не лучше тогда именно id использовать как номер платежа?
 

Andrey

пишу код за еду
Сообщения
3,386
Реакции
4,026
  • Команда форума
  • #5
ипользуй uuid как номер и как первичный ключ в базе, или timestamp в милисекундах, вероятность совпадений "крайне мала"
 

MrQout

~[C0d3z]
Сообщения
314
Реакции
246
Генерация уникального кода подтверждения под любую задачу на PHP.

PHP:
function CreateCode (int $uid = 1, int $length = 6, bool $string = true)
{
    // @Check Errors
    if ($uid <= 0
        || $length < 4
        || $length > ($string ? 32 : 6))return null;
    
    // @Secret Key for Generation
    $x = hash ('sha256', $uid + $length * ((int)$string+1));
    
    // @Microtime
    $microtime = substr((string)microtime(), 2, 8);
    
    
    // @Result
    return substr (($string
        ? hash ('sha256',  @($x ^ "{$uid}-{$microtime}"))
        : @($x ^ ($uid * $microtime))
    ), 0, $length);
}
 
Последнее редактирование:
  • Мне нравится
Реакции: NaN
Сверху Снизу