subscribe concept - nicepayments/nicepay-manual GitHub Wiki
์ ๊ธฐ๊ฒฐ์ ์๋น์ค๋ ํน์ ์ฃผ๊ธฐ์ ๋ฐ๋ผ ์๋์ผ๋ก ๊ฒฐ์ ๋ฅผ ์งํํ๋ ์๋น์ค๋ฅผ ์ด์ผ๊ธฐ ํฉ๋๋ค.
์ ๊ธฐ๊ฒฐ์ ์๋น์ค๋ ์ฌ์ฉ์์ ๋์ ํ์ ์ ํด์ง ๊ธ์ก์ ์ ํด์ง ์ฃผ๊ธฐ๋ก ์๋์ผ๋ก ๊ฒฐ์ ํ๋ ์๋น์ค์ ๋๋ค.
๊ฐ๋งน์ ์์๋ ์ ๊ธฐ๊ฒฐ์ ์๋น์ค๋ฅผ ์ ๊ณตํ์ฌ ์๋์ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ์์ธก ๊ฐ๋ฅํ ์์ ์ฐฝ์ถ:
์ ๊ธฐ๊ฒฐ์ ์๋น์ค๋ฅผ ํตํด ๊ณ ์ ๋ ์ฃผ๊ธฐ๋ก ์์ ์ด ๋ฐ์ํ๋ฏ๋ก, ์์ต ์์ธก์ด ์ฉ์ดํด์ง๊ณ ์ฌ๋ฌด ๊ด๋ฆฌ ๋ฐ ํฅํ ๋น์ฆ๋์ค ๊ณํ ์๋ฆฝ์ด ์ฉ์ดํด์ง๋๋ค.
- ๊ณ ๊ฐ ์ ์ง ๋ฐ ์ดํ ๋ฐฉ์ง:
์ ๊ธฐ๊ฒฐ์ ๋ ๊ณ ๊ฐ์๊ฒ ์๋์ ์ธ ๊ฒฐ์ ์ ํธ์์ฑ์ ์ ๊ณตํ๋ฉด์ ๋์์ ํด๋น ์๋น์ค๋ ์ ํ์ ๋ํ ๊พธ์คํ ์ด์ฉ ์ต๊ด์ ํ์ฑ์ํต๋๋ค. ์ด๋ก ์ธํด ๊ณ ๊ฐ์ ์ดํ์จ์ด ๊ฐ์ํ๋ฉฐ, ๊ฐ๋งน์ ๊ณผ ๊ณ ๊ฐ ์ฌ์ด์ ์ฅ๊ธฐ์ ์ธ ์ ๋ขฐ ๊ด๊ณ๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ์ ๊ธฐ๊ฒฐ์ ๋ ๊ฐ๋งน์ ์๊ฒ ์์ ์ ์ธ ์์ต๊ณผ ์ง์ ๊ฐ๋ฅํ ๋น์ฆ๋์ค ์ฑ์ฅ์ ๊ธฐ๋ฐ์ด ๋ฉ๋๋ค.
- ํจ์จ์ ์ธ ์ด์:
๊ณ ๊ฐ์ด ๋งค๋ฒ ๊ฒฐ์ ๋ฅผ ์งํํ๋ ๊ฒ์ด ์๋๋ผ ์๋์ผ๋ก ๊ฒฐ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ฏ๋ก, ๋งค๋ฒ์ ๊ฒฐ์ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์์ ๋์ด ์ค์ด๋ค์ด ์ด์์ ํจ์จ์ฑ์ด ํฅ์๋ฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ ๊ธฐ๊ฒฐ์ ๋์ ์ ์์ ์ ์ธ ์์ต ํ๋ฆ์ ํ๋ณดํ๊ณ ๊ณ ๊ฐ ์ดํ์จ์ ์ค์ฌ, ์ฅ๊ธฐ์ ์ธ ๊ณ ๊ฐ ๊ด๊ณ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํฐ ๋์์ด ๋ฉ๋๋ค.
์ ๊ธฐ๊ฒฐ์ ์๋น์ค๋ฅผ ์ํด ๊ฐ๋งน์ ์ ์๋์ ๊ฐ์ ํ๋ฆ์ ๋ฐ๋ฆ ๋๋ค.
๋น๋งํค ๋ฐ๊ธ -> ๋น๋งํค ์น์ธ -> ๋น๋งํค ์ญ์
๋นํค ๋ฐ๊ธ์ ์ ๊ธฐ๊ฒฐ์ ๋ฅผ ์ํ ํต์ฌ ๊ณผ์ ์ผ๋ก, ๊ณ ๊ฐ์ ๊ฒฐ์ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ๋ณดํธํ๋ฉด์๋, ๊ฐ๋งน์ ์ด ์ดํ ์ ๊ธฐ๊ฒฐ์ ๋ฅผ ์ํํ ์ ์๊ฒ ํ๋ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค.
-
๊ณ ๊ฐ ๊ฒฐ์ ์ ๋ณด ์์ง: ๊ฐ๋งน์ ์ ๊ณ ๊ฐ์ผ๋ก๋ถํฐ ํ์ํ ๊ฒฐ์ ์ ๋ณด(์ ์ฉ์นด๋ ๋ฒํธ, ์ ํจ์ผ, ์ฃผ๋ฏผ๋ฒํธ ๋ฐ ์ฌ์ ์๋ฒํธ, ์นด๋ ๋น๋ฐ๋ฒํธ ๋ฑ, ์นด์ ์ฃผ๋น)๋ฅผ ์์งํฉ๋๋ค.
-
์ํธํ: ์์ง๋ ๊ฒฐ์ ์ ๋ณด๋ ๋ณด์์ ์ํด ๊ฐ๋งน์ ์์ ์ํธํ ์ฒ๋ฆฌ๋ฅผ ์งํํฉ๋๋ค.
-
๋์ด์คํ์ด๋จผ์ธ ์ ์ก: ์ํธํ๋ ๊ฒฐ์ ์ ๋ณด๋ฅผ ๊ฐ๋งน์ ์ด ๋์ด์คํ์ด๋จผ์ธ ์ ์ ์กํฉ๋๋ค.
-
๊ฒฐ์ ์ ๋ณด ์ ํจ์ฑ ๊ฒ์ฆ: ๋์ด์คํ์ด๋จผ์ธ ๋ ์ ๋ฌ๋ฐ์ ๊ฒฐ์ ์ ๋ณด์ ์ ํจ์ฑ์ ๊ฒ์ฆํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ค์ ๋ก ์ ํจํ ์นด๋ ์ ๋ณด์ธ์ง, ๋ง๋ฃ๋์ง ์์๋์ง ๋ฑ์ ํ์ธํฉ๋๋ค.
-
๋นํค ์์ฑ ๋ฐ ๋ฐ๊ธ: ์ ํจ์ฑ ๊ฒ์ฆ์ด ํต๊ณผ๋ ๊ฒฐ์ ์ ๋ณด์ ๋ํ์ฌ ๋์ด์คํ์ด๋จผ์ธ ๋ ๋น๋งํค(๋นํค)๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๋นํค๋ ํน์ ๊ณ ๊ฐ์ ๊ฒฐ์ ์๋จ์ ์ ๊ทผํ ์ ์๋ ๊ณ ์ ํ ํค ๊ฐ์ผ๋ก, ์ค์ ๊ฒฐ์ ์ ๋ณด ๋์ ์ฌ์ฉ๋ฉ๋๋ค.
-
๊ฐ๋งน์ ์ ๋นํค ์ ์ก: ์์ฑ๋ ๋นํค๋ฅผ ๋์ด์คํ์ด๋จผ์ธ ๊ฐ ๊ฐ๋งน์ ์๊ฒ ์ ์กํฉ๋๋ค.
-
๋นํค ์ ์ฅ ๋ฐ ํ์ฉ: ๊ฐ๋งน์ ์ ์ ๋ฌ๋ฐ์ ๋นํค๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ , ์ ๊ธฐ๊ฒฐ์ ๊ฐ ํ์ํ ๋๋ง๋ค ํด๋น ๋นํค๋ฅผ ํ์ฉํ์ฌ ์น์ธ ์์ฒญ์ ๋์ด์คํ์ด๋จผ์ธ ์ ์ ์กํฉ๋๋ค.
sequenceDiagram
actor Customer as ๊ณ ๊ฐ
participant Merchant as ๊ฐ๋งน์ ์๋ฒ
participant NICEPAY as NICEPAY ์๋ฒ
participant CardCo as ์นด๋์ฌ
Customer->>Merchant: 1. ์ ๊ธฐ๊ฒฐ์ ์๋น์ค ์ ์ฒญ
Merchant->>Customer: 2. ์ฝ๊ด ๋์ ์์ฒญ<br/>(๊ฐ์ธ์ ๋ณด ์์ง/์ด์ฉ)
Customer->>Merchant: 3. ์ฝ๊ด ๋์ + ๊ฒฐ์ ์ ๋ณด ์
๋ ฅ<br/>(์นด๋๋ฒํธ, ์ ํจ๊ธฐ๊ฐ, ์๋
์์ผ, ์นด๋PW)
rect rgb(255, 240, 245)
Note over Merchant: ๐ ๊ฒฐ์ ์ ๋ณด ์ํธํ
Merchant->>Merchant: 4. encData ์์ฑ<br/>AES128(secretKey ์16์๋ฆฌ) or<br/>AES256(secretKey 32์, IV 16์)
end
Merchant->>NICEPAY: 5. ๋นํค ๋ฐ๊ธ ์์ฒญ<br/>POST /v1/subscribe/regist<br/>{encData, orderId, encMode}
NICEPAY->>NICEPAY: 6. encData ๋ณตํธํ
NICEPAY->>CardCo: 7. ์นด๋ ์ ํจ์ฑ ํ์ธ
CardCo-->>NICEPAY: 8. ์ ํจ์ฑ ํ์ธ ๊ฒฐ๊ณผ
alt ์ ํจํ ์นด๋
NICEPAY->>NICEPAY: 9. BID ์์ฑ<br/>BIKY + 30์ ๊ณ ์ ID
NICEPAY-->>Merchant: 10. ๋นํค ๋ฐ๊ธ ์ฑ๊ณต<br/>{bid, tid, cardCode, cardName}
Merchant->>Merchant: 11. BID ์ ์ฅ (DB)<br/>๊ณ ๊ฐID์ ๋งคํ
Merchant->>Customer: 12. ๊ตฌ๋
๋ฑ๋ก ์๋ฃ ์๋ด
else ์ ํจํ์ง ์์ ์นด๋
NICEPAY-->>Merchant: 10. ๋นํค ๋ฐ๊ธ ์คํจ
Merchant->>Customer: 12. ๋ฑ๋ก ์คํจ ์๋ด
end
๋น๋งํค ์น์ธ ๊ณผ์ ์ ๊ฐ๋งน์ ์ด ์ ์ฅํ ๋นํค๋ฅผ ์ฌ์ฉํ์ฌ ๋์ด์คํ์ด๋จผ์ธ ์ ๊ฒฐ์ ์น์ธ์ ์์ฒญํ๋ ๋จ๊ณ์ ๋๋ค. ์ด ๊ณผ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์ด๋ฃจ์ด์ง๋๋ค:
-
์น์ธ ์์ฒญ: ๊ฐ๋งน์ ์ ๋ฏธ๋ฆฌ ๋ฐ๊ธ๋ฐ์ ์ ์ฅํด๋ ๋น๋งํค์ ํจ๊ป ๊ฒฐ์ ๊ธ์ก, ์ํ ์ ๋ณด ๋ฑ ํ์ํ ๊ฒฐ์ ์์ธ ์ ๋ณด๋ฅผ ํฌํจํ์ฌ ๋์ด์คํ์ด๋จผ์ธ ์ ์น์ธ ์์ฒญ์ ํฉ๋๋ค.
-
๋น๋งํค ์ ํจ์ฑ ๊ฒ์ฌ: ๋์ด์คํ์ด๋จผ์ธ ๋ ์์ฒญ๋ฐ์ ๋น๋งํค์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค. ์ด๋, ๋น๋งํค๊ฐ ์ ์์ ์ผ๋ก ๋ฐ๊ธ๋ ๊ฒ์ธ์ง, ๋ง๋ฃ๋์ง ์์๋์ง ๋ฑ์ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
-
์ค์ ๊ฒฐ์ ์ฒ๋ฆฌ: ๋น๋งํค์ ์ ํจ์ฑ์ด ํ์ธ๋๋ฉด, ๋์ด์คํ์ด๋จผ์ธ ๋ ๋น๋งํค์ ์ฐ๋๋ ๊ณ ๊ฐ์ ์ค์ ๊ฒฐ์ ์๋จ(์: ์ ์ฉ์นด๋)๋ฅผ ํตํด ์ ํด์ฌ๋ก ๊ฒฐ์ ์์ฒญ์ ๋ณด๋ ๋๋ค.
-
์น์ธ ๊ฒฐ๊ณผ ๋ฐํ: ๊ฒฐ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด, ๋์ด์คํ์ด๋จผ์ธ ๋ ๊ฐ๋งน์ ์๊ฒ ์น์ธ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํฉ๋๋ค.
-
๊ฐ๋งน์ ์ฒ๋ฆฌ: ๊ฐ๋งน์ ์ ๋์ด์คํ์ด๋จผ์ธ ๋ก๋ถํฐ ๋ฐ์ ์น์ธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ํ ๋ด๋ถ ์ฒ๋ฆฌ๋ฅผ ์งํํฉ๋๋ค.
sequenceDiagram
actor Customer as ๊ณ ๊ฐ
participant Scheduler as ์ค์ผ์ค๋ฌ
participant Merchant as ๊ฐ๋งน์ ์๋ฒ
participant DB as ๊ฐ๋งน์ DB
participant NICEPAY as NICEPAY ์๋ฒ
participant CardCo as ์นด๋์ฌ
Scheduler->>Merchant: 1. ๊ฒฐ์ ์ผ ๋๋ ํธ๋ฆฌ๊ฑฐ<br/>(๋งค์ 1์ผ, ๋งค์ฃผ ์์์ผ ๋ฑ)
Merchant->>DB: 2. ๊ฒฐ์ ๋์ ์กฐํ<br/>(BID, ๊ณ ๊ฐ์ ๋ณด, ๊ฒฐ์ ๊ธ์ก)
DB-->>Merchant: 3. ๊ฒฐ์ ๋์ ๋ชฉ๋ก
loop ๊ฐ ๊ณ ๊ฐ๋ณ
Merchant->>NICEPAY: 4. ๋นํค ์น์ธ ์์ฒญ<br/>POST /v1/subscribe/{bid}/payments<br/>{orderId, amount, goodsName}
NICEPAY->>CardCo: 5. ๊ฒฐ์ ์น์ธ ์์ฒญ
CardCo-->>NICEPAY: 6. ์น์ธ ๊ฒฐ๊ณผ
alt ์น์ธ ์ฑ๊ณต
NICEPAY-->>Merchant: 7. ์น์ธ ์ฑ๊ณต<br/>{tid, status:paid, approveNo}
Merchant->>DB: 8. ๊ฒฐ์ ๋ด์ญ ์ ์ฅ<br/>(TID, ์น์ธ๋ฒํธ, ๊ฒฐ์ ์ผ์)
Merchant->>Customer: 9. ๊ฒฐ์ ์๋ฃ ์๋ฆผ<br/>(์ด๋ฉ์ผ/SMS)
else ์น์ธ ์คํจ
NICEPAY-->>Merchant: 7. ์น์ธ ์คํจ<br/>{resultCode, resultMsg}
Merchant->>DB: 8. ์คํจ ๋ด์ญ ๊ธฐ๋ก
Merchant->>Customer: 9. ๊ฒฐ์ ์คํจ ์๋ด<br/>๊ฒฐ์ ์๋จ ํ์ธ ์์ฒญ
end
end
๋น๋งํค ์ญ์ ๋ ๊ณ ๊ฐ์ ๊ฒฐ์ ์ ๋ณด๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ๋ ๊ณ ๊ฐ์ ์์ฒญ์ ๋ฐ๋ผ ํด๋น ๋น๋งํค๋ฅผ ํ๊ธฐํ๋ ๊ณผ์ ์
๋๋ค.
๋น๋งํค ์ญ์ ๋ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ด๋ฃจ์ด์ง๋๋ค.
-
๊ณ ๊ฐ์ ์์ฒญ: ๊ณ ๊ฐ์ด ์ ๊ธฐ๊ฒฐ์ ์๋น์ค์ ํด์ง๋ ๊ฐ๋งน์ ์์์ ์๋น์ค ์ด์ฉ ์ข ๋ฃ๋ฅผ ์ํ ๋ ๋น๋งํค๋ฅผ ์ญ์ ํ ํ์๊ฐ ์์ต๋๋ค.
-
๊ฐ๋งน์ ์ ์ ์ฑ : ์ผ์ ๊ธฐ๊ฐ๋์ ๋น๋งํค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ณ ๊ฐ, ๋๋ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์๋น์ค๋ฅผ ์ ๊ณตํ์ง ์๊ฒ ๋ ๊ณ ๊ฐ์ ๋น๋งํค๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ญ์ ํ ์ ์์ต๋๋ค.
sequenceDiagram
actor Customer as ๊ณ ๊ฐ
participant Merchant as ๊ฐ๋งน์ ์๋ฒ
participant DB as ๊ฐ๋งน์ DB
participant NICEPAY as NICEPAY ์๋ฒ
Customer->>Merchant: 1. ๊ตฌ๋
ํด์ง ์์ฒญ
Merchant->>DB: 2. ๊ณ ๊ฐ์ BID ์กฐํ
DB-->>Merchant: 3. BID ์ ๋ณด
Merchant->>NICEPAY: 4. ๋นํค ์ญ์ ์์ฒญ<br/>POST /v1/subscribe/{bid}/expire<br/>{orderId}
NICEPAY->>NICEPAY: 5. BID ๋ง๋ฃ ์ฒ๋ฆฌ
NICEPAY-->>Merchant: 6. ์ญ์ ์๋ฃ<br/>{resultCode:0000, bid}
Merchant->>DB: 7. BID ์ญ์ /๋ง๋ฃ ์ํ ์
๋ฐ์ดํธ
Merchant->>Customer: 8. ๊ตฌ๋
ํด์ง ์๋ฃ ์๋ด
Note over NICEPAY: โ ๏ธ ์ญ์ ๋ BID๋ก๋<br/>๋ ์ด์ ์น์ธ ๋ถ๊ฐ