diff --git a/imweb/README.md b/imweb/README.md index 457358d..687dd92 100644 --- a/imweb/README.md +++ b/imweb/README.md @@ -28,8 +28,10 @@ 2. 아임웹 개발자센터 앱 설정 - redirect URI: `http://localhost:3100/api/imweb/oauth/callback` (= 루트 `BACKEND_API_URL` + `/imweb/oauth/callback`, 정확히 일치해야 한다) - - 권한: `사이트 정보 읽기∙쓰기(site-info:write)`, `회원 정보 읽기(member-info:read)` - (site-info:write 는 아임웹이 연동 때 필수로 요구한다 — 없으면 errorCode 30156) + - 권한: `사이트 정보 읽기∙쓰기(site-info:write)`, `회원 정보 읽기(member-info:read)`, + `상품 읽기(product:read)`, `주문 읽기(order:read)` + (백엔드가 이 네 가지를 요청한다 — 앱 설정에 하나라도 없으면 연결이 errorCode 30156 으로 거부된다. + site-info:write 는 아임웹이 연동 때 필수로 요구한다) 3. 백엔드 기동·마이그레이션 ```bash docker compose -f docker-compose.yml -f docker-compose.dev.yml --env-file .env.development up -d @@ -60,10 +62,10 @@ docker exec -u root moneyguide-backend rm /tmp/members-1.xls ## 강의 신청 기록 (신청 완료 화면 → 신청 내역) -아임웹 `/apply` 페이지의 신청 완료 위젯(`money/product-free-complete.html`)이 표시될 때 +아임웹 `/apply` 페이지의 신청 완료 위젯(`imweb-free-apply.html`)이 표시될 때 `POST /api/applications` 로 신청을 남긴다. 관리자 화면 **신청 내역** 메뉴에서 본다. -- 보내는 값: `MEMBER_UID`(회원 아이디 또는 회원 코드), 상품번호(`idx`), 상품명, 그 순간의 유입정보(`MG_UTM.peek()`) +- 보내는 값: `MEMBER_UID`(회원 아이디 또는 회원 코드), 상품번호(`idx`), 상품명, 그 순간의 유입정보(`MG_UTM.peek()`), 업체 링크 클릭 ID(`MG_PARTNER.refs()`) - 백엔드는 아임웹에 실제로 있는 회원인지 확인하고(동기화 전 신규 가입자는 아임웹 API 로 직접 확인), 회원·상품당 한 건만 남긴다. 이름·연락처는 브라우저 값이 아니라 아임웹 회원 정보를 쓴다 - 오픈카톡 버튼 클릭은 `POST /api/applications/{id}/kakao-clicks` 로 처음 한 번만 남는다 @@ -72,6 +74,44 @@ docker exec -u root moneyguide-backend rm /tmp/members-1.xls - 한계: 신청 완료 화면은 공개 페이지라 "실제로 그 회원이 보냈는지"는 확인할 수 없다 (있는 회원인지만 확인). 무료 신청 기록 용도라 이 수준으로 둔다 +## 업체 링크 (업체별 신청·구매 추적) + +상품마다 업체에 단축 링크를 발급하고, 그 링크로 들어온 회원의 신청·구매를 업체별로 센다. +관리자 화면 **업체 링크** 메뉴에서 업체 추가 → 링크 발급 → 실적 확인. + +``` +업체에 링크 전달 ── https://moneyguide.wandergo.net/r/{코드} + │ ① 클릭 기록 (카톡 미리보기·검색봇 제외) 후 상품 페이지로 이동하며 클릭 ID(mg_ref)를 붙인다 + ▼ +상품 페이지 ── partner-ref.html(Header Code)이 클릭 ID 를 30일 보관하고 주소창에서 지운다 + │ ② 로그인 회원이 확인되면 "이 회원이 이 클릭으로 들어왔다"를 POST /api/partner-touches 로 알린다 + ▼ +신청: 신청 완료 위젯이 신청 기록에 클릭 ID 를 함께 보낸다 → 바로 귀속 +구매: 서버가 1시간마다 최근 60일 아임웹 주문(회원 주문)을 훑어 결제완료 상품을 귀속, 환불·취소는 집계에서 뺀다 +``` + +- **귀속 규칙**: 신청·구매 직전 30일 안에 누른 **그 상품의** 업체 링크 중 마지막 것 (마지막 클릭) +- **구매 수**: 결제완료 주문만 센다. 전액 환불되거나 해당 상품 품목이 모두 취소·반품되면 빠진다. 금액은 관리하지 않는다 +- **링크는 지우지 않고 중지**한다 — 중지해도 상품 페이지로 이동은 되지만 클릭·실적은 쌓이지 않는다. + 링크가 있는 업체는 삭제할 수 없다 (실적 기록 보존) +- 이동 주소는 아임웹 사이트(www 유무 무관) 안만 허용한다 — 단축 링크가 피싱에 쓰이지 않게. + 사이트 주소는 `IMWEB_SITE_URL`, 비우면 `IMWEB_ADMIN_PAGE_URL` 의 origin +- 한계 + - 링크를 누른 브라우저와 신청·구매한 브라우저가 다르면(휴대폰 → PC) 추적되지 않는다 + - 비회원 주문은 회원과 이을 수 없어 세지 않는다 + - 공개 페이지에서 오는 기록이라 위조를 완전히 막을 수는 없다 (실제 아임웹 회원·실제 클릭인지만 확인) + - 60일보다 오래된 구매의 환불은 반영되지 않는다 + +### 처음 켤 때 + +1. 아임웹 개발자센터 앱 권한에 `상품 읽기`·`주문 읽기` 추가 (위 '로컬에서 띄우기' 2번) +2. 백엔드 배포 (마이그레이션 자동 실행) +3. 관리자 화면 **연동 관리 → 아임웹 연결**을 다시 한다 — 새 권한이 담긴 토큰을 받는다. + 다시 연결하기 전에는 상품 불러오기·구매 집계가 `IMWEB_006`(권한 부족)으로 실패한다. 회원 동기화는 그대로 돈다 +4. `partner-ref.html` 을 아임웹 **Header Code** 에 붙여 넣는다 (사이트 전체) +5. `imweb-free-apply.html` 을 신청 완료 위젯에 다시 붙여 넣는다 (신청 기록·클릭 ID 전송 추가됨) +6. 업체 링크 메뉴에서 **상품 불러오기** → 업체 추가 → 링크 발급 + ## 인증 방식 — 왜 쿠키가 아닌가 백엔드(`moneyguide.wandergo.net`)와 관리자 화면(`www.moneyguider.co.kr`)이 **다른 사이트**라 @@ -106,6 +146,8 @@ docker exec -u root moneyguide-backend rm /tmp/members-1.xls - 아임웹 개발자센터 redirect URI 를 `https://moneyguide.wandergo.net/api/imweb/oauth/callback` 으로 등록 - `imweb-members.html` 의 `API_BASE` 운영 주소(`https://moneyguide.wandergo.net/api`)를 확인하고 아임웹 코드 위젯에 붙여 넣는다 - 아임웹에서 그 페이지의 접근 권한을 관리자로 제한한다 +- 업체 링크를 쓰려면 위 '업체 링크 → 처음 켤 때' 순서를 따른다 + (`partner-ref.html`·`imweb-free-apply.html` 의 `API_BASE` 도 같은 운영 주소) ## 유입 기록 상태 diff --git a/imweb/imweb-free-apply.html b/imweb/imweb-free-apply.html new file mode 100644 index 0000000..40d99ee --- /dev/null +++ b/imweb/imweb-free-apply.html @@ -0,0 +1,653 @@ + + +
+
+ + + +

신청이 완료되었습니다.

+ +
+ +
+
+ 신청강의 + [무료한정 😳] 하루 2시간 월1000 버는 AI 효자 상품 찾기 +
+
+ +

+ 무료 라이브 단톡방에 입장하셔서
+ 전자책, 무료강의 등 다양한 혜택을 받아가세요! +

+ + + + + + 오픈카톡 입장하기 + + + 메인 페이지로 이동 + +
+
+ + + + + \ No newline at end of file diff --git a/imweb/imweb-members.html b/imweb/imweb-members.html index a72ed2c..ed625ad 100644 --- a/imweb/imweb-members.html +++ b/imweb/imweb-members.html @@ -212,6 +212,11 @@ #mg-members th { font-size: 12px; color: var(--mgm-muted); font-weight: 600; background: #fafbfc; position: sticky; top: 0; } #mg-members td.mgm-wrap { white-space: normal; min-width: 140px; } #mg-members .mgm-empty { padding: 32px; text-align: center; color: var(--mgm-muted); } + #mg-members tr.is-selected td { background: var(--mgm-accent-soft); } + + /* 업체 링크 */ + #mg-members .mgm-code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; } + #mg-members .mgm-url { display: inline-block; max-width: 280px; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; } /* 연동 관리 */ #mg-members .mgm-dl { display: grid; grid-template-columns: 140px 1fr; gap: 10px 16px; margin: 0; } @@ -292,6 +297,10 @@ 신청 내역 + + + + + + + + 구매 집계 상태 확인 중 + + + +

+ 링크를 누른 뒤 30일 안에 신청·구매하면, 그 상품의 링크 중 마지막으로 누른 업체 실적으로 잡습니다. + 구매는 결제완료 주문만 세며(환불·취소 제외) 아임웹 주문을 1시간마다 확인합니다. +

+ + +
+
+
+

업체

+ +
+
+ + + +
+
+ + + +
업체링크클릭신청구매
+
+ +
+
+
+

링크 발급

+ 업체·상품 조합당 하나 +
+
+ + + + 아임웹에서 상품 페이지를 열고 주소창의 주소를 붙여 넣으세요. 우리 사이트 안의 주소만 됩니다. +
+
+
+
+ +
+
+

링크

+ + + +
+
+ + + + + + + + +
업체상품업체에 줄 링크클릭신청구매상태발급일
+
+ +
+ +
+
+ + + +