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:
112
backend/test_geoyoung_api.py
Normal file
112
backend/test_geoyoung_api.py
Normal file
@@ -0,0 +1,112 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""지오영 API 직접 테스트"""
|
||||
|
||||
import asyncio
|
||||
from playwright.async_api import async_playwright
|
||||
import json
|
||||
|
||||
async def capture_cart_api():
|
||||
async with async_playwright() as p:
|
||||
browser = await p.chromium.launch(headless=True)
|
||||
page = await browser.new_page()
|
||||
|
||||
# 요청/응답 캡처
|
||||
cart_requests = []
|
||||
|
||||
async def handle_request(request):
|
||||
if 'Cart' in request.url or 'Order' in request.url or 'Add' in request.url:
|
||||
cart_requests.append({
|
||||
'url': request.url,
|
||||
'method': request.method,
|
||||
'headers': dict(request.headers),
|
||||
'data': request.post_data
|
||||
})
|
||||
|
||||
page.on('request', handle_request)
|
||||
|
||||
# 로그인
|
||||
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')
|
||||
print("로그인 완료")
|
||||
|
||||
# 쿠키 저장
|
||||
cookies = await page.context.cookies()
|
||||
print(f"쿠키: {[c['name'] for c in cookies]}")
|
||||
|
||||
# 검색 페이지
|
||||
await page.goto('https://gwn.geoweb.kr/Home/Index')
|
||||
await page.wait_for_timeout(2000)
|
||||
|
||||
# 검색 (AJAX)
|
||||
await page.evaluate('''
|
||||
$.ajax({
|
||||
url: "/Home/PartialSearchProduct",
|
||||
type: "POST",
|
||||
data: {srchText: "643104281"},
|
||||
success: function(data) {
|
||||
console.log("검색 결과:", data.substring(0, 500));
|
||||
}
|
||||
});
|
||||
''')
|
||||
await page.wait_for_timeout(2000)
|
||||
|
||||
# 장바구니 추가 시도 (JavaScript로)
|
||||
result = await page.evaluate('''
|
||||
async function testCart() {
|
||||
// 장바구니 추가 함수 찾기
|
||||
if (typeof AddCart !== 'undefined') {
|
||||
return "AddCart 함수 존재";
|
||||
}
|
||||
if (typeof fnAddCart !== 'undefined') {
|
||||
return "fnAddCart 함수 존재";
|
||||
}
|
||||
|
||||
// 전역 함수 목록
|
||||
var funcs = [];
|
||||
for (var key in window) {
|
||||
if (typeof window[key] === 'function' &&
|
||||
(key.toLowerCase().includes('cart') ||
|
||||
key.toLowerCase().includes('order') ||
|
||||
key.toLowerCase().includes('add'))) {
|
||||
funcs.push(key);
|
||||
}
|
||||
}
|
||||
return "발견된 함수: " + funcs.join(", ");
|
||||
}
|
||||
return testCart();
|
||||
''')
|
||||
print(f"JavaScript 분석: {result}")
|
||||
|
||||
# 페이지 소스에서 장바구니 관련 스크립트 찾기
|
||||
scripts = await page.evaluate('''
|
||||
var scripts = document.querySelectorAll('script');
|
||||
var result = [];
|
||||
scripts.forEach(function(s) {
|
||||
var text = s.textContent || s.innerText || '';
|
||||
if (text.includes('Cart') || text.includes('AddProduct')) {
|
||||
result.push(text.substring(0, 1000));
|
||||
}
|
||||
});
|
||||
return result;
|
||||
''')
|
||||
|
||||
await browser.close()
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("캡처된 Cart/Order 요청:")
|
||||
print("="*60)
|
||||
for r in cart_requests:
|
||||
print(json.dumps(r, indent=2, ensure_ascii=False))
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("장바구니 관련 스크립트:")
|
||||
print("="*60)
|
||||
for i, s in enumerate(scripts[:3]):
|
||||
print(f"\n--- Script {i+1} ---")
|
||||
print(s[:800])
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(capture_cart_api())
|
||||
Reference in New Issue
Block a user