127 lines
4.3 KiB
Python
127 lines
4.3 KiB
Python
# -*- 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')}")
|