Создать хранилище для всех одноразовых кодов. При использовании кода проверять, что код есть в хранилище, счёт пополнять на нужную сумму, затем удалять код из хранилища или помечать, что код уже был использован. Чтобы предотвратить возможность перебора кодов, можно использовать
bcypt.