feat: 도매상 API 통합 및 스키마 업데이트
- 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 - 테스트 스크립트들
This commit is contained in:
101
backend/test_dataorder.py
Normal file
101
backend/test_dataorder.py
Normal file
@@ -0,0 +1,101 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""지오영 주문 확정 API 테스트"""
|
||||
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
import asyncio
|
||||
from playwright.async_api import async_playwright
|
||||
import time
|
||||
|
||||
async def get_cookies():
|
||||
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():
|
||||
print("="*60)
|
||||
print("지오영 전체 주문 플로우 테스트")
|
||||
print("="*60)
|
||||
|
||||
# 1. 로그인
|
||||
print("\n1. 로그인...")
|
||||
start = time.time()
|
||||
cookies = asyncio.run(get_cookies())
|
||||
print(f" 완료: {time.time()-start:.1f}초")
|
||||
|
||||
session = requests.Session()
|
||||
for c in cookies:
|
||||
session.cookies.set(c['name'], c['value'])
|
||||
|
||||
session.headers.update({
|
||||
'User-Agent': 'Mozilla/5.0',
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
})
|
||||
|
||||
# 2. 검색 → productCode 획득
|
||||
print("\n2. 제품 검색...")
|
||||
start = time.time()
|
||||
search_resp = session.post('https://gwn.geoweb.kr/Home/PartialSearchProduct', data={
|
||||
'srchText': '661700390'
|
||||
})
|
||||
soup = BeautifulSoup(search_resp.text, 'html.parser')
|
||||
product_div = soup.find('div', class_='div-product-detail')
|
||||
lis = product_div.find_all('li') if product_div else []
|
||||
product_code = lis[0].get_text(strip=True) if lis else None
|
||||
print(f" productCode: {product_code}")
|
||||
print(f" 완료: {time.time()-start:.1f}초")
|
||||
|
||||
# 3. 장바구니 추가
|
||||
print("\n3. 장바구니 추가...")
|
||||
start = time.time()
|
||||
cart_resp = session.post('https://gwn.geoweb.kr/Home/DataCart/add', data={
|
||||
'productCode': product_code,
|
||||
'moveCode': '',
|
||||
'orderQty': 1
|
||||
})
|
||||
result = cart_resp.json()
|
||||
print(f" result: {result.get('result')}")
|
||||
print(f" 완료: {time.time()-start:.1f}초")
|
||||
|
||||
if result.get('result') != 1:
|
||||
print(f" ❌ 장바구니 추가 실패: {result.get('msg')}")
|
||||
return
|
||||
|
||||
# 4. 주문 확정 (실제 주문!) - 테스트이므로 실행 안함
|
||||
print("\n4. 주문 확정 API 테스트...")
|
||||
print(" ⚠️ 실제 주문이 들어가므로 테스트 중지!")
|
||||
print(" API: POST /Home/DataOrder")
|
||||
print(" params: { p_desc: '메모' }")
|
||||
|
||||
# 실제 주문 코드 (주석 처리)
|
||||
# order_resp = session.post('https://gwn.geoweb.kr/Home/DataOrder', data={
|
||||
# 'p_desc': '테스트 주문'
|
||||
# })
|
||||
# print(f" 응답: {order_resp.text[:200]}")
|
||||
|
||||
# 5. 장바구니 비우기 (테스트용)
|
||||
print("\n5. 장바구니 비우기...")
|
||||
# 장바구니에서 삭제
|
||||
clear_resp = session.post('https://gwn.geoweb.kr/Home/DataCart/delAll')
|
||||
print(f" 상태: {clear_resp.status_code}")
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("✅ 전체 API 플로우 확인 완료!")
|
||||
print("")
|
||||
print("1. 검색: POST /Home/PartialSearchProduct")
|
||||
print("2. 장바구니: POST /Home/DataCart/add")
|
||||
print("3. 주문확정: POST /Home/DataOrder")
|
||||
print("="*60)
|
||||
|
||||
if __name__ == "__main__":
|
||||
test()
|
||||
Reference in New Issue
Block a user