This would be rather easy to implement with Flox!
You'd create an Entity, let's call it "PromotionCode". You could make the actual code (what's printed in the magazine) actually the "id" of that Entity. The one property that you add is a Boolean that stores if it was already used, and maybe some more information like the date is was used, if you need that.
Now, you'd first create a tool that logs in as a "Hero" (a super-user you can create in the online interface) and creates all those codes, i.e. it creates all those entities and stores them on the Server. Be sure that "entity.publicAccess" is "Access.READ_WRITE", so that anybody can access the entities.
In the actual app, people would then enter the code, and you'd try an "Entity.load" with that ID. If it's successful, you can check if that code is still available, credit the user his bonus, and then update the "used" boolean.
In fact, you could even change "publicAccess" to "Access.READ", so that no other user can modify that Entity again. As long as you keep your "Hero's" access key secret, this is very safe -- no one will be able to change that Entity again.
This might sound a little more complicated than it actually is.
Just have a look at the Entity and Player tutorial inside Flox, and you'll have this running in no time.