diff --git a/app/integrations/cafe24/config.py b/app/integrations/cafe24/config.py index af50e58..fa6486b 100644 --- a/app/integrations/cafe24/config.py +++ b/app/integrations/cafe24/config.py @@ -13,16 +13,28 @@ from dataclasses import dataclass PRODUCT_SCOPES: tuple[str, ...] = ("mall.read_product", "mall.write_product") ORDER_SCOPES: tuple[str, ...] = ("mall.read_order", "mall.write_order") -# 디자인(테마) — 상단 공통 홍보 숨김을 스킨 쪽에서 처리할 수 있는지 확인/구현용. -# ⚠️ 카페24 Admin API 에는 스킨 HTML 파일(detail.html)을 직접 읽거나 쓰는 -# 엔드포인트가 없다. 조회 가능한 것은 테마 목록과 테마 페이지뿐이다. -# 스크립트 태그 주입은 디자인이 아니라 mall.write_store(상점) 권한이며 -# 인라인 코드가 아닌 외부 HTTPS URL 만 받는다. +# 디자인(테마) — **요청하지 않는다.** 아래 확인 결과 때문이다. +# +# 운영몰에서 직접 호출해 확인한 사실(2026-08-14): +# GET /admin/themes → 조회는 가능(디자인 권한 필요)하지만 테마 "목록"뿐이며 +# 스킨 파일 내용은 응답에 없다. +# GET /admin/themes/pages → No API found. (버전 2026-03-01 에 존재하지 않음) +# 스킨 HTML 파일(product/detail.html 등)을 읽거나 쓰는 엔드포인트는 없다. +# +# 즉 스킨의 `const numbers = [...]`(상단 공통 홍보 제외 목록)을 API 로 고치는 방법은 +# 없다. 상단 공통 홍보 숨김은 상품 상세설명 안 CSS 로 처리한다 +# (app/modules/cafe24/store.py 의 set_promo_hidden). +# +# 페이지에 코드를 주입하는 유일한 수단은 스크립트 태그(/admin/scripttags)이며, +# 디자인이 아니라 **mall.write_store(상점)** 권한이 필요하고 인라인 코드가 아닌 +# 외부 HTTPS URL 만 받는다. 쓰려면 우리 서버에 공개 JS 엔드포인트가 필요하다. DESIGN_SCOPES: tuple[str, ...] = ("mall.read_design", "mall.write_design") +STORE_SCOPES: tuple[str, ...] = ("mall.read_store", "mall.write_store") # 실제로 요청하는 scope 묶음. 개발자센터 앱에 등록된 권한과 어긋나면 인증이 # 거부되므로, 여기에 추가할 때는 앱 권한도 함께 확인해야 한다. -DEFAULT_SCOPES: tuple[str, ...] = PRODUCT_SCOPES + DESIGN_SCOPES +# 쓰지 않는 권한은 요청하지 않는다 — 토큰이 유출돼도 피해 범위를 좁히기 위함. +DEFAULT_SCOPES: tuple[str, ...] = PRODUCT_SCOPES DEFAULT_API_VERSION = "2026-03-01" diff --git a/docs/CAFE24_MODULE.md b/docs/CAFE24_MODULE.md index 4edf19f..371e733 100644 --- a/docs/CAFE24_MODULE.md +++ b/docs/CAFE24_MODULE.md @@ -204,9 +204,23 @@ cafe24_oauth_tokens 저장 const numbers = [12,31,32, ...]; // .edb-img-tag-w 를 remove() ``` -**카페24 Admin API 로는 이 파일을 고칠 수 없다.** 확인 결과 스킨/테마는 조회만 -가능하고(`GET /admin/themes`), 스킨 HTML 파일을 읽거나 쓰는 엔드포인트가 없다. -쓸 수 있는 것은 테마 페이지와 스크립트 태그(`/admin/scripttags`)뿐이다. +**카페24 Admin API 로는 이 파일을 고칠 수 없다.** 운영몰에서 직접 호출해 확인했다 +(2026-08-14, API 버전 2026-03-01). + +| 호출 | 결과 | +| --- | --- | +| `GET /admin/themes` | 디자인 권한이 있으면 조회 가능하나 **테마 목록뿐** — 파일 내용 없음 | +| `GET /admin/themes/pages` | **`No API found.`** — 이 버전에 존재하지 않는다 | +| 스킨 파일(`product/detail.html`) 읽기/쓰기 | **엔드포인트 자체가 없다** | + +권한 문제가 아니라 기능이 없는 것이므로, 디자인 권한을 추가해도 달라지지 않는다. +그래서 `DEFAULT_SCOPES` 에 디자인 scope 를 **넣지 않는다**(쓰지 않는 권한은 요청하지 +않는다 — `app/integrations/cafe24/config.py` 주석 참고). + +페이지에 코드를 주입하는 유일한 수단은 스크립트 태그(`/admin/scripttags`)인데, +디자인이 아니라 **`mall.write_store`(상점)** 권한이며 **인라인 코드가 아닌 외부 HTTPS +URL** 만 받는다. 쓰려면 우리 서버에 공개 JS 엔드포인트를 두고 쇼핑몰이 그것을 불러가게 +해야 한다. 그래서 같은 결과를 **상품 상세설명 안의 CSS** 로 낸다. 상세설명은 우리가 쓸 수 있고, 상품별로 켜고 끌 수 있으며, 상태가 그 상품 소스에 그대로 보인다. @@ -226,9 +240,11 @@ const numbers = [12,31,32, ...]; // .edb-img-tag-w 를 remove() - 스킨의 `numbers` 목록과는 독립이다. 이미 목록에 있는 상품은 그대로 두면 된다 (스킨은 요소를 제거하고, 이쪽은 CSS 로 숨긴다 — 결과는 같고 충돌하지 않는다). -> 스킨의 `numbers` 방식을 그대로 자동화하려면 `/admin/scripttags` 로 전역 스크립트를 -> 주입하는 방법이 있다. 다만 **디자인 쓰기 권한 추가 + 재인증**이 필요하고, 상품별 -> 상태가 한 곳에 몰려 관리가 어려워진다. 지금은 채택하지 않았다. +> 스킨의 `numbers` 방식(요소 제거 + 목록 한 곳 관리)을 자동화하려면 `/admin/scripttags` +> 로 전역 스크립트를 주입하는 방법뿐이다. 필요한 것: **`mall.write_store` 권한 추가 + +> 재인증**, 그리고 **우리 서버의 공개 HTTPS JS 엔드포인트**(쇼핑몰 방문자 브라우저가 +> 직접 불러가므로 인증을 걸 수 없다). 쇼핑몰이 우리 서버 가용성에 의존하게 되는 것도 +> 감안해야 한다. 지금은 채택하지 않았다. ---