Vender claves y tarjetas de juego
Claves de Steam, tarjetas de PlayStation o Xbox, licencias de software, tarjetas prepago.
Claves de Steam, tarjetas de PlayStation o Xbox, licencias de software, tarjetas prepago. Cualquier cosa que se entrega como un código distinto para cada comprador, que te manda un distribuidor en una lista.
Se hace en la ficha del producto, en cada variante: Claves y códigos.
La bolsa: una por variante
Cada variante tiene su bolsa de códigos. Cada venta saca uno de ahí, y nunca se entrega el mismo a dos personas.
Va por variante porque es lo normal en este negocio: la tarjeta de 20 € y la de 50 € son el mismo producto con códigos distintos, y lo mismo una clave para la región europea y otra para la global.
En cuanto metes el primer código, la variante pasa a venderse así:
- No se envía. No pide porte ni dirección.
- No se vende sin existencias. Se apaga la venta sin stock: un código que no tienes no se puede prometer.
Meter códigos
Pegas la lista que te ha mandado el distribuidor y pulsas Añadir a la bolsa. Se aceptan tal como suelen llegar:
- uno por línea,
- separados por comas, punto y coma o tabuladores,
- entre comillas,
- o el CSV entero, con su cabecera: una línea que solo dice
key,clave,code,serial,license… se salta.
Un código tiene que tener entre 4 y 200 caracteres. Caben 20.000 de una vez; si tienes más, pártelos en tandas.
Cada vez que añades es un lote, con un nombre (si no le pones uno, la fecha y la hora) y, si quieres, el proveedor. Sirve para lo que viene después: cuando un distribuidor cancela una tanda, necesitas saber cuál era.
Los repetidos se detectan
Si un código ya está en la tienda, no entra otra vez. Da igual que sea en esta variante o en otra, y da igual si lo escribes en mayúsculas o en minúsculas.
Al terminar te dice cuántos ha metido, cuántos ya tenías y los últimos cuatro caracteres de los repetidos, para que puedas reclamárselos al proveedor.
Pasa más de lo que parece: el mismo fichero subido dos veces, o un proveedor que manda una tanda nueva con parte de la anterior. Sin esto, dos clientes recibirían la misma clave, y el segundo se encontraría con que ya está canjeada.
Cómo cuenta el stock
Las existencias de la variante son los códigos que quedan sin vender. No se tocan a mano: se recalculan solas al meter códigos, al apartarlos para un pedido, al retirar un lote y cuando vuelven a la bolsa.
El escaparate enseña exactamente eso. Así nunca se vende una unidad que no tiene código detrás.
El panel te enseña la bolsa por estados: sin vender, apartados, entregados y retirados. Y cada lote, con cuántos le quedan.
Que te avise antes de quedarte sin nada
En Avisarme cuando queden pones un número. Cuando se cobra una venta y la
bolsa se queda en esa cantidad o menos, te llega un aviso por Telegram: «Quedan
3 códigos de…» (en el idioma de TELEGRAM_IDIOMA; sin ponerlo, en inglés).
Quien vende claves suele enterarse de que se le han acabado cuando un cliente ya no puede comprar. Para eso hace falta tener los avisos por Telegram configurados.
Al comprar: se aparta, y se entrega al cobrar
El código se aparta al hacer el pedido, no al cobrarlo. Si entre una cosa y otra pasan unos minutos —un pago con tarjeta que pide confirmación al banco, por ejemplo—, otro cliente podría llevarse el último y el primero habría pagado por nada.
Dos compradores a la vez nunca se llevan el mismo: lo decide la base de datos al apartarlo, no una consulta de «el primero libre» que dos pueden hacer a la vez. Si mientras se paga se han acabado, el pedido no se cierra y se le dice al cliente cuántos quedaban.
Se entrega al cobrar. Un pedido por transferencia entra antes que el dinero, y un código entregado no se recupera: en cuanto el cliente lo canjea, el valor ya se ha ido. Cuando el pago se marca como cobrado, el código pasa a entregado y sale el correo «Tus códigos del pedido».
Si cancelas un pedido que no llegó a cobrarse, sus códigos vuelven a la bolsa en el mismo momento. Los que ya se habían entregado no se tocan: eso es cosa del reembolso.
El comprador lo ve tapado y lo destapa él
En la página de su pedido el código aparece tapado: solo los cuatro últimos
caracteres, ····7K2Q. Al lado, lo que hayas puesto en la variante: dónde se
canjea, la región, los idiomas y cómo se canjea («Entra en Steam → Juegos →
Activar un producto…»).
Lo destapa él, con un botón. Y queda apuntado cuándo: la primera vez se guarda la fecha, y cada vez que lo mira se guarda un registro con la IP.
Por qué así y no el código a la vista:
- Es la prueba de entrega. El día que el banco te pregunta por una devolución de cargo, «el cliente destapó el código el 3 de marzo a las 18:04 desde esta IP» es lo que tienes para responder.
- Un código tapado se puede devolver. Si devuelves un pedido entero y el código no se había destapado, vuelve a la bolsa y se puede vender otra vez. Uno ya destapado no: se retira, porque el comprador ha podido canjearlo, y queda apuntado por qué.
El código no viaja en el correo. El correo solo dice que ya está y manda a la página del pedido.
El desistimiento, en la UE. Un código cuenta como contenido digital, igual que una descarga: la caja pide la misma casilla de consentimiento antes de cobrar, y un código ya destapado queda fuera del desistimiento, como una descarga ya empezada. Sin esa casilla la exclusión no valdría, y por eso se pide.
Retirar un lote
Si un distribuidor te avisa de que una tanda no vale —se filtró, era robada, la cancela—, retira el lote entero, con el motivo.
Todos los códigos de ese lote pasan a retirados, también los ya entregados, y las existencias se recalculan. El panel te dice qué pedidos se han visto afectados, para que les mandes uno nuevo.
Al comprador que intente destaparlo le sale «Ese código se ha retirado. Escríbenos y lo cambiamos.» El motivo que escribiste se guarda para enseñárselo a quien reclame.
Cifrado en reposo
Los códigos se guardan cifrados (AES-256-GCM). Una copia de la base de datos, un volcado que se queda en un servidor de pruebas o una consulta a destiempo no enseñan ni un código: solo el cifrado y los cuatro últimos caracteres.
La clave de cifrado sale de:
PCC_CLAVE_CIFRADO= # si no está, se usa JWT_SECRETY con ella se calcula también la huella que detecta los repetidos, así que un volcado de la base tampoco sirve para comprobar si un código concreto está dentro.
Tres cosas que hay que saber de esa clave:
- Si no hay ninguna de las dos, los códigos se cifran con una clave fija que
está en el código fuente. Es decir, como si no estuvieran cifrados. En
Docker no pasa, porque el contenedor genera
JWT_SECRETla primera vez; en una instalación a mano, pon una antes de meter el primer código. - No la cambies con códigos dentro. Los que ya estén en la bolsa dejan de
poder leerse, y la detección de repetidos deja de reconocerlos. Si pones
PCC_CLAVE_CIFRADOmás tarde, pasa lo mismo: hasta entonces se cifraban conJWT_SECRET. - Guárdala fuera del servidor. Una copia de seguridad de la base sin su clave no sirve para recuperar los códigos.
Lo que hace falta
- Correo configurado (
SMTP_*). Sin él, el código se entrega igual al cobrar, pero el aviso se queda en la cola hasta que haya por dónde mandarlo. STOREFRONT_URL, para que el correo lleve el enlace a la página del pedido.- Un tema que enseñe los códigos en la página del pedido. Los pide a
GET /tienda/pedidos/:id/codigosy los destapa conPOST /tienda/pedidos/:id/codigos/:codigo/revelar.