# -*- coding: utf-8 -*- """백제약품 주문 원장 API 분석 - 상세 탐색""" import json import requests from datetime import datetime import calendar # 저장된 토큰 로드 TOKEN_FILE = r'c:\Users\청춘약국\source\pharmacy-wholesale-api\.baekje_token.json' with open(TOKEN_FILE, 'r', encoding='utf-8') as f: token_data = json.load(f) token = token_data['token'] cust_cd = token_data['cust_cd'] # API 세션 설정 session = requests.Session() session.headers.update({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept': 'application/json, text/plain, */*', 'Accept-Language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7', 'Origin': 'https://ibjp.co.kr', 'Referer': 'https://ibjp.co.kr/', 'Authorization': f'Bearer {token}' }) API_URL = "https://www.ibjp.co.kr" today = datetime.now() year = today.year month = today.month _, last_day = calendar.monthrange(year, month) print("=== 주문 원장 API 탐색 (다양한 파라미터) ===\n") # 날짜 형식 변형 date_formats = [ {'startDt': f'{year}{month:02d}01', 'endDt': f'{year}{month:02d}{last_day:02d}'}, {'stDt': f'{year}{month:02d}01', 'edDt': f'{year}{month:02d}{last_day:02d}'}, {'fromDate': f'{year}-{month:02d}-01', 'toDate': f'{year}-{month:02d}-{last_day:02d}'}, {'strDt': f'{year}{month:02d}01', 'endDt': f'{year}{month:02d}{last_day:02d}'}, {'ordDt': f'{year}{month:02d}'}, ] endpoints = [ '/ordLedger/listSearch', '/ordLedger/search', '/ordLedger/ledgerList', '/cust/ordLedgerList', '/cust/ledger', '/ord/histList', '/ord/history', '/ord/list', ] for endpoint in endpoints: for params in date_formats: full_params = {**params, 'custCd': cust_cd} try: resp = session.get(f"{API_URL}{endpoint}", params=full_params, timeout=10) if resp.status_code == 200: print(f"✓ GET {endpoint} {params}: {resp.status_code}") try: data = resp.json() print(f" -> {str(data)[:300]}") except: print(f" -> {resp.text[:200]}") except Exception as e: pass try: resp = session.post(f"{API_URL}{endpoint}", json=full_params, timeout=10) if resp.status_code == 200: print(f"✓ POST {endpoint} {params}: {resp.status_code}") try: data = resp.json() print(f" -> {str(data)[:300]}") except: print(f" -> {resp.text[:200]}") except Exception as e: pass print("\n=== 주문 이력 관련 API ===\n") # 주문 이력 조회 시도 order_endpoints = [ '/ord/ordList', '/ord/orderHistory', '/ordReg/list', '/ordReg/history', '/order/list', '/order/history', ] for endpoint in order_endpoints: try: params = {'custCd': cust_cd, 'startDt': f'{year}{month:02d}01', 'endDt': f'{year}{month:02d}{last_day:02d}'} resp = session.get(f"{API_URL}{endpoint}", params=params, timeout=10) print(f"GET {endpoint}: {resp.status_code}") if resp.status_code == 200: try: data = resp.json() print(f" -> {str(data)[:500]}") except: print(f" -> {resp.text[:200]}") except: pass print("\n=== custMonth/listSearch 상세 데이터 분석 ===\n") # 이미 작동하는 API의 데이터 상세 분석 resp = session.get(f"{API_URL}/custMonth/listSearch", params={'custCd': cust_cd, 'year': str(year), 'endDt': f'{year}{month:02d}{last_day:02d}'}, timeout=10) if resp.status_code == 200: data = resp.json() print("월간 데이터 구조:") for item in data: print(f"\n월: {item.get('BALANCE_YM')}") print(f" 매출액(SALE_AMT): {item.get('SALE_AMT'):,}") print(f" 반품액(BACK_AMT): {item.get('BACK_AMT'):,}") print(f" 순반품(PURE_BACK_AMT): {item.get('PURE_BACK_AMT'):,}") print(f" 순매출(TOTAL_AMT): {item.get('TOTAL_AMT'):,}") print(f" 입금액(PAY_CASH_AMT): {item.get('PAY_CASH_AMT'):,}") print(f" 전월이월(PRE_TOTAL_AMT): {item.get('PRE_TOTAL_AMT'):,}") print(f" 월말잔고(BALANCE_A_AMT): {item.get('BALANCE_A_AMT'):,}") print(f" 회전일수(ROTATE_DAY): {item.get('ROTATE_DAY')}")