- wholesale 패키지 연동 (SooinSession, GeoYoungSession) - Flask Blueprint 분리 (sooin_api.py, geoyoung_api.py) - order_context 스키마 확장 (wholesaler_id, internal_code 등) - 수인약품 개별 취소 기능 (cancel_item, restore_item) - 문서 추가: WHOLESALE_API_INTEGRATION.md - 테스트 스크립트들
115 lines
3.8 KiB
Python
115 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""지오영 장바구니 API 직접 테스트 (requests)"""
|
|
|
|
import requests
|
|
from bs4 import BeautifulSoup
|
|
import asyncio
|
|
from playwright.async_api import async_playwright
|
|
|
|
async def get_cookies():
|
|
"""Playwright로 로그인 후 쿠키 획득"""
|
|
async with async_playwright() as p:
|
|
browser = await p.chromium.launch(headless=True)
|
|
page = await browser.new_page()
|
|
|
|
await page.goto('https://gwn.geoweb.kr/Member/Login')
|
|
await page.fill('input[type="text"]', '7390')
|
|
await page.fill('input[type="password"]', 'trajet6640')
|
|
await page.click('button, input[type="submit"]')
|
|
await page.wait_for_load_state('networkidle')
|
|
|
|
cookies = await page.context.cookies()
|
|
await browser.close()
|
|
return cookies
|
|
|
|
def test_cart_api():
|
|
# 1. 쿠키 획득
|
|
print("1. 로그인 중...")
|
|
cookies = asyncio.run(get_cookies())
|
|
|
|
# 2. requests 세션 설정
|
|
session = requests.Session()
|
|
for c in cookies:
|
|
session.cookies.set(c['name'], c['value'])
|
|
|
|
session.headers.update({
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
|
'X-Requested-With': 'XMLHttpRequest'
|
|
})
|
|
|
|
print(f" 쿠키: {[c['name'] for c in cookies]}")
|
|
|
|
# 3. 제품 검색
|
|
print("\n2. 제품 검색...")
|
|
search_resp = session.post('https://gwn.geoweb.kr/Home/PartialSearchProduct', data={
|
|
'srchText': '643104281',
|
|
'srchCate': '',
|
|
'prdtType': '',
|
|
'prdOrder': '',
|
|
'srchCompany': '',
|
|
'startdate': '',
|
|
'enddate': ''
|
|
})
|
|
print(f" 검색 응답: {search_resp.status_code}, 길이: {len(search_resp.text)}")
|
|
|
|
# 4. 장바구니 API 테스트 - 여러 엔드포인트 시도
|
|
print("\n3. 장바구니 API 테스트...")
|
|
|
|
endpoints = [
|
|
'/Home/PartialProductCart',
|
|
'/Home/AddCart',
|
|
'/Order/AddCart',
|
|
'/Home/AddToCart',
|
|
'/Order/AddToCart',
|
|
'/Home/InsertCart',
|
|
'/Order/InsertCart',
|
|
]
|
|
|
|
for endpoint in endpoints:
|
|
url = f'https://gwn.geoweb.kr{endpoint}'
|
|
|
|
# 다양한 파라미터 조합 시도
|
|
params_list = [
|
|
{'prdtCode': '643104281', 'qty': 1},
|
|
{'productCode': '643104281', 'quantity': 1},
|
|
{'code': '643104281', 'cnt': 1},
|
|
{'insCode': '643104281', 'orderQty': 1},
|
|
]
|
|
|
|
for params in params_list:
|
|
try:
|
|
resp = session.post(url, data=params, timeout=5)
|
|
if resp.status_code == 200:
|
|
text = resp.text[:200]
|
|
if 'error' not in text.lower() and '404' not in text:
|
|
print(f" ✓ {endpoint}")
|
|
print(f" Params: {params}")
|
|
print(f" Response: {text[:100]}...")
|
|
except Exception as e:
|
|
pass
|
|
|
|
# 5. 현재 장바구니 조회
|
|
print("\n4. 장바구니 조회...")
|
|
cart_resp = session.post('https://gwn.geoweb.kr/Home/PartialProductCart')
|
|
print(f" 응답: {cart_resp.status_code}")
|
|
|
|
soup = BeautifulSoup(cart_resp.text, 'html.parser')
|
|
|
|
# 장바구니 테이블에서 상품 찾기
|
|
rows = soup.find_all('tr')
|
|
print(f" 테이블 행: {len(rows)}개")
|
|
|
|
# HTML에서 장바구니 추가 폼 찾기
|
|
forms = soup.find_all('form')
|
|
for form in forms:
|
|
action = form.get('action', '')
|
|
if 'cart' in action.lower() or 'order' in action.lower():
|
|
print(f" 폼 발견: {action}")
|
|
inputs = form.find_all('input')
|
|
for inp in inputs:
|
|
print(f" - {inp.get('name')}: {inp.get('value', '')}")
|
|
|
|
if __name__ == "__main__":
|
|
test_cart_api()
|