IAP quick Guide - ONE-store/inapp-sdk GitHub Wiki

< μ°Έκ³  >

λ³Έ λ¬Έμ„œλŠ” μ›μŠ€ν† μ–΄ 인앱 SDK v16(API v4)에 λŒ€ν•œ κ°€μ΄λ“œ λ¬Έμ„œμž…λ‹ˆλ‹€. μ΅œμ‹  μ›μŠ€ν† μ–΄ 인앱 SDK v17(API v5)에 λŒ€ν•œ κ°€μ΄λ“œ λ¬Έμ„œλŠ” μ›μŠ€ν† μ–΄ κ°œλ°œμžμ„Όν„°μ—μ„œ 제곡되고 μžˆμŠ΅λ‹ˆλ‹€.

μ΅œμ‹  인앱 SDK v17 κ°€μ΄λ“œ λ¬Έμ„œ 링크 : https://dev.onestore.co.kr/devpoc/reference/view/IAP_v17


λ³Έ λ¬Έμ„œμ— κ΄€ν•˜μ—¬

  • μ›μŠ€ν† μ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” 결제 λͺ¨λ“ˆ(μ•ˆλ“œλ‘œμ΄λ“œ SDK)κ³Ό Server API 연동을 μœ„ν•œ μ „λ°˜μ˜ λ‚΄μš©μ„ κ°„λž΅νžˆ 연동 κ°œλ°œμ‚¬μ˜ κ΄€μ μ—μ„œ μž‘μ„±ν•˜μ˜€λ‹€.
  • λ³Έ λ¬Έμ„œμ—μ„œ κ°€μ΄λ“œν•˜λŠ” 연동 μƒμ˜ Business FlowλŠ” μ›μŠ€ν† μ–΄μ—μ„œ ꢌμž₯ν•˜λŠ” 방식이며 κ°œλ°œμ‚¬μ˜ μ‹œμŠ€ν…œ νŠΉμ„±μ— 따라 적절히 λ³€κ²½ 적용 개발이 κ°€λŠ₯ν•˜λ‹€.
  • 각 κΈ°λŠ₯별 μ„ΈλΆ€ λ‚΄μš©μ€ μ›μŠ€ν† μ–΄ 개발자 μ„Όν„°μ˜ 곡식 κ°€μ΄λ“œλ₯Ό ν†΅ν•˜μ—¬ 확인이 κ°€λŠ₯ν•˜λ‹€.

μš©μ–΄μ •μ˜

  • IAP(In-App Purchase, μΈμ•±κ²°μ œ): λΆ€λΆ„μœ λ£Œν™” 인앱 μƒν’ˆ 결제
  • κ°œλ°œμ‚¬(Merchant): μ›μŠ€ν† μ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” 결제 λͺ¨λ“ˆμ„ μ—°λ™ν•˜μ—¬ κ²°μ œμ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 업체
  • μΈμ•±μƒν’ˆ(Product ID, μ΄ν•˜ PID) : κ°œλ°œμ‚¬μ—μ„œ λ°°ν¬ν•˜λŠ” μ•± λ‚΄λΆ€μ—μ„œ νŒλ§€ν•˜λŠ” κ°œλ³„ μƒν’ˆ, ν•΄λ‹Ή μƒν’ˆμ€ μ›μŠ€ν† μ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” μƒν’ˆ ID에 1:1둜 λŒ€μ‘λ¨
  • IAP SDK(μ΄ν•˜ SDK): μ•ˆλ“œλ‘œμ΄λ“œ λ‹¨λ§μ˜ 결제 μ„œλΉ„μŠ€ 연동을 μœ„ν•œ library둜 .jar 파일 ν˜•νƒœλ‘œ 제곡
  • IapPlugin: IAP SDK와 동일
  • 결제 Transaction : κ°œλ³„ κ²°μ œκ±΄μ— λŒ€ν•œ μ„ΈλΆ€ λ‚΄μš©κ³Ό 진행 흐름 μ „λ°˜μ„ 의미
  • TXID : 결제 μ™„λ£Œμ‹œ SDKμ—μ„œ 응닡(response)κ°’μœΌλ‘œ μ „λ‹¬λ˜λŠ” κ°’μœΌλ‘œ, μ›μŠ€ν† μ–΄μ—μ„œ λ°œν–‰ν•˜λŠ” κ²°μ œκ±΄μ— 고유둜 λΆ€μ—¬λ˜λŠ” ID (Payment Transaction ID)
  • TID : TXID와 λ³„κ°œλ‘œ κ°œλ³„ κ²°μ œκ±΄μ— λŒ€ν•΄μ„œ κ°œλ°œμ‚¬κ°€ 직접 λΆ€μ—¬ν•  수 μžˆλŠ” 고유ID
  • μ „μžμ˜μˆ˜μ¦ : 결제 μ™„λ£Œμ‹œ SDKμ—μ„œ TXID와 ν•¨κ»˜ μ‘λ‹΅κ°’μœΌλ‘œ μ „λ‹¬λ˜λŠ” κ°’μœΌλ‘œ, 결제 μ„ΈλΆ€ λ‚΄μš©μ— λŒ€ν•œ μ „μžμ„œλͺ…κ°’

μ›μŠ€ν† μ–΄ IAP의 μ£Όμš” νŠΉμ„±

  • μΈμ•±μƒν’ˆμ˜ μœ ν˜•μ— 따라 κ²°μ œμ‹œ 쀑볡 ꡬ맀 λΆˆκ°€ 및 ꡬ맀 κ°€λŠ₯ μ‹œκ°„μ΄ 관리됨
  • κ²°μ œκ°€ 정상 μ™„λ£Œλœ μƒν’ˆμ— λŒ€ν•œ β€˜μ‚¬μš©μ™„λ£Œβ€™ ν˜Ήμ€ β€˜μ†ŒλΉ„β€™μ˜ κ°œλ…μ€ μ—†μŒ
  • κ°œλ°œμ‚¬μ˜ μ•± μ„œλ²„(Billing)μ—μ„œ 판맀된 μƒν’ˆμ˜ μ‚¬μš© κ°€λŠ₯ μ—¬λΆ€μ˜ 이λ ₯ 관리 ν•„μš”
  • κ²°μ œμ— λŒ€ν•œ μ™„λ£Œμ—¬λΆ€λ₯Ό 단말(SDK의 응닡)을 ν†΅ν•΄μ„œλ§Œ μ•Œ 수 있음
  • 결제 μ™„λ£Œ ν›„ SDK의 응닡값 쀑 μ €μž₯이 ν•„μš”ν•œ 값은 κ°œλ°œμ‚¬μ—μ„œ μ €μž₯ 관리 ν•„μš”
  • ν–₯ν›„ κ°œλ³„ κ²°μ œκ±΄μ— λŒ€ν•œ Server to Server Notification 제곡 μ˜ˆμ •

사전 μ€€λΉ„ 상항 및 개발 진행 흐름

  • κ°œλ°œμžμ„Όν„° κ°œλ°œμ‚¬ 계정 생성
  • μ•± 및 μƒν’ˆ 정보 μ„€μ • 및 생성
  • ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ SDK 연동 개발
  • μ•± κ²€μ¦μš”μ²­ 및 μƒν’ˆ νŒλ§€μƒνƒœ μ „ν™˜
  • Live λͺ¨λ“œ(SDK의 Releaseλͺ¨λ“œ)μƒμ—μ„œλŠ” μ›μŠ€ν† μ–΄μ˜ μƒν’ˆ 결제 검증이 μ™„λ£Œλœ μƒνƒœμ—μ„œλ§Œ 정상 κ²°μ œκ°€ κ°€λŠ₯함

ꢌμž₯ 개발 흐름

  • SDKλ₯Ό μ‹€μ œ 단말App에 μ—°λ™ν•˜μ—¬ 결제 κΈ°λŠ₯ 개발
  • SDKμ—μ„œ μ œκ³΅ν•˜λŠ” 각쒅 Command API λ₯Ό ν˜ΈμΆœν•˜μ—¬ 정상 응닡 확인
  • μ›μŠ€ν† μ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” Server to Server APIλ₯Ό ν˜ΈμΆœν•˜μ—¬ 정상 응닡 확인

IAP SDK : 결제 κΈ°λŠ₯ 연동 (Android 파트)

  • μ•ˆλ“œλ‘œμ΄λ“œ 단말상 연동을 μœ„ν•œ 초기 ν™˜κ²½ μ„€μ • 및 μ „λ°˜μ˜ λ‚΄μš©μ€ μ•„λž˜μ˜ 링크λ₯Ό μ°Έμ‘°
  • 결제 처리 Flow
  • μ•„λž˜ 그림상 IapPlugin이 SDK에 ν•΄λ‹Ήλ˜λ©°, 단말에 μ„€μΉ˜λ˜λŠ” App이 YourApp 에 해당됨
  • 그림상 결제 μš”μ²­κ³Ό μ‘λ‹΅μ‹œμ˜ ParameterλŠ” ν•„μˆ˜ 인자만 ν‘œμ‹œν•¨
  • SDK둜 λΆ€ν„° 정상 응닡을 받은 경우 일뢀값(3번 ν•­λͺ©, μ΅œμ†Œ κΆŒκ³ μ‚¬ν•­)을 μ•„λž˜μ™€ 같이 App의 Server둜 μ „μ†‘ν•˜μ—¬ μ²˜λ¦¬ν•„μš”

κ·Έλ¦Ό1. SDK 결제 μš”μ²­ 처리

[κ·Έλ¦Ό1] SDK 결제 μš”μ²­ 처리

  • 결제 μš”μ²­μ‹œ (SDK μ—μ„œ μ œκ³΅ν•˜λŠ”) IapPlugin.sendPaymentRequest APIλ₯Ό 호좜
Parameter Type ν•„μˆ˜ μ„€λͺ…
appId string O - κ°œλ°œμžμ„Όν„°μ—μ„œ 생성&λ°œν–‰λ˜λŠ” app의 idκ°’
- 10자리 κ³ μ •κ°’ (β€˜OAβ€™λ‘œ μ‹œμž‘)
ex) OA00001234
pId string O - κ°œλ°œμžμ„Όν„°μ—μ„œ 생성&λ°œν–‰λ˜λŠ” app λ‚΄λΆ€ μƒν’ˆ(product)의 idκ°’
- 10자리 κ³ μ •κ°’
ex) 0900001234(β€˜09’ ν˜Ήμ€ β€˜00β€™μœΌλ‘œ μ‹œμž‘)
productName string X - κ°œλ°œμ‚¬μ—μ„œ μ„ νƒμ μœΌλ‘œ 결제 화면에 μ„€μ •ν•  수 μžˆλŠ” μƒν’ˆλͺ…
- pIdλŠ” λ™μΌν•˜λ‚˜ 이벀트 λ“±μœΌλ‘œ μƒν’ˆλͺ…을 μΌμ‹œμ μœΌλ‘œ
λ°”κΏ”μ•Ό ν•˜λŠ” 경우 ν™œμš©κ°€λŠ₯
ex) β€˜κΈˆν™”100’ β†’ β€˜κΈˆν™”120 (λ³΄λ„ˆμŠ€20)’
- μƒν’ˆμ΄ 맀우 λ‹€μ–‘ν•˜λ‚˜ κΈˆμ•‘μ΄ λ™μΌν•œ 경우,
ν•˜λ‚˜μ˜ pId μ„€μ •ν›„ μƒν’ˆλͺ…을 λ‹€μ–‘ν™”ν•˜μ—¬ ν™œμš© κ°€λŠ₯
tid string X - κ²°μ œμ‹œ κ°œλ°œμ‚¬μ—μ„œ λ°œν–‰ν•˜λŠ” κ²°μ œμ— λŒ€ν•œ 고유 IDκ°’
(μ›μŠ€ν† μ–΄μ—μ„œ λ°œν–‰ν•˜λŠ” txidκ°’κ³ΌλŠ” λ³„κ°œλ‘œ κ°œλ°œμ‚¬μ—μ„œ
λ°œν–‰ 관리 ν•  수 μžˆλŠ” 결제 transaction의 κ³ μœ κ°’)
- tid μ‚¬μš©μ‹œ Serverμ—μ„œ μ œκ³΅ν•˜λŠ” β€˜tidꡬ맀이λ ₯ μ‘°νšŒβ€™
APIλ₯Ό ν†΅ν•˜μ—¬ 결제 진행 여뢀와 상관없이 ꡬ맀이λ ₯의 μ‘°νšŒκ°€ κ°€λŠ₯함
(Server API Section μ°Έμ‘°)
gameUserId string X - κ²°μ œμ‹œ κ°œλ°œμ‚¬μ—μ„œ λ°œν–‰ν•˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μš©μžμ— λŒ€ν•œ 고유 IDκ°’
- μ‚¬μš©μžμ˜ μ›μŠ€ν† μ–΄ ν”„λ‘œλͺ¨μ…˜ μ°Έμ—¬λ₯Ό μ œμ–΄ ν•˜λ„λ‘ μ œκ³΅ν•œ κ°’
- 16.04 λΆ€ν„° 제곡
promotionApplicable boolean X - gameUserId둜 μž…λ ₯된 μ‚¬μš©μžμ˜ ν”„λ‘œλͺ¨μ…˜ μ°Έμ—¬ μ—¬λΆ€ κ²°μ •
- gameUserIDκ°€ μž…λ ₯λ˜μ§€ μ•Šμ„ 경우 μ‚¬μš©λ˜μ§€ μ•ŠμŒ
- 16.04 λΆ€ν„° 제곡
  • κ²°μ œμ— λŒ€ν•œ 응닡은 (SDKμ—μ„œ μ œκ³΅ν•˜λŠ”) requestCallback 였브젝트λ₯Ό 전달 λ°›μŒ
  • 응닡 ν˜•νƒœ (μ‹€μ œ κ°œλ°œμ‹œclass object의 ν˜•νƒœμž„)
{
   "api_version" : "(api version)", 
   "identifier" : "(request id)", 
   "method" : "purchase", 
   "result" : {
"code" : "(result code)",
"message" : "(result message)",
"txid" : "(id)",
"receipt" : "(encode receipt using Base64)", 
"count" : "(count of product)",
"product" : [ { "(product information)" } ]
   }
}
  • μ£Όμš” 응닡 Parameter별 뢄석
Parameter Type ν•„μˆ˜ μ„€λͺ…
code string O - 결제 진행 μƒνƒœκ°’μœΌλ‘œ 결제 μ„±κ³΅μ‹œ β€˜0000’
- β€˜0000’을 μ œμ™Έν•œ 응닡값은 결제 μ‹€νŒ¨λ‘œ μ²˜λ¦¬ν•΄λ„ 무방
- ꢌμž₯ : κ°œλ°œμ‚¬ μ„œλ²„(DB)상 μ €μž₯ 관리 ν•„μš”
txid string O - μ›μŠ€ν† μ–΄μ—μ„œ λ°œν–‰ν•˜λŠ” 결제의 고유IDκ°’
- μ„±κ³΅μ²˜λ¦¬λœ 결제건의 경우 κ°œλ°œμžμ„Όν„°μ˜ μ •μ‚° ν™”λ©΄μ—μ„œλ„ 확인가λŠ₯
- μ •μ‚°, λŒ€μ‚¬μž‘μ—…, VOC 처리 λ“± 운영 업무에 ν™œμš©λ¨
- ν•„μˆ˜ : κ°œλ°œμ‚¬ μ„œλ²„μƒ μ €μž₯ 관리 ν•„μš”
receipt string O - κ²°μ œμ‹œ λ°œν–‰λ˜λŠ” 결제의 μ „μžμ˜μˆ˜μ¦(μ „μžμ„œλͺ…) κ°’μœΌλ‘œ 결제 데이터 λ³€μ‘° λ“± λΆ€μ •κ²°μ œ μ—¬λΆ€ 확인에 μ‚¬μš©
- κ²°μ œκ±΄λ³„ μ „μžμ˜μˆ˜μ¦ 데이터 κ°’μ˜ ν¬κΈ°λŠ” 5K byte λ‚΄μ™Έ
- κ°•λ ₯ ꢌ고 : ν•΄λ‹Ήκ°’ 자체λ₯Ό μ €μž₯관리 및 반볡 ν˜ΈμΆœλ˜μ–΄μ„œλŠ” μ•ˆλ¨
product string O - κ²°μ œμ‹œμ˜ μƒν’ˆ 정보
- ꢌμž₯ : μ‹€μ œ κ°œλ°œμ‚¬μ—μ„œ μΈμ§€ν•˜λŠ” μƒν’ˆID와 가격이 μΌμΉ˜ν•˜λŠ”μ§€ 확인
  • μ‹€μ§ˆμ  결제 처리 흐름
  • [κ·Έλ¦Ό1]의 흐름과 λΉ„κ΅ν•˜μ—¬ κ°œλ°œμ‚¬μ˜ Appμ—μ„œ κ΅¬λ§€μš”μ²­ λ°œμƒμ‹œ SDK의 결제 API의 호좜이 μ•„λ‹Œ κ°œλ°œμ‚¬μ˜ μ„œλ²„(YourServer)에 μ‚¬μš©μžμ˜ 결제 μš”μ²­ λ‚΄μš©μ„ 전솑
  • κ°œλ°œμ‚¬μ˜ μ„œλ²„μ—μ„œλŠ” Userκ°€ μš”μ²­ν•œ μƒν’ˆμ˜ ꡬ맀가λŠ₯ μ—¬λΆ€, User 계정 μƒνƒœ 등을 ν™•μΈν•˜μ—¬ κ°œλ°œμ‚¬ 자체적인 ꡬ맀 Transaction을 생성

κ·Έλ¦Ό2. μ‹€μ§ˆμ  결제 μš”μ²­ 흐름

[κ·Έλ¦Ό2] μ‹€μ§ˆμ  결제 μš”μ²­ 흐름

  • ꡬ맀 Transaction의 λ‚΄μš©μ€ μ•„λž˜μ˜ κ°’ λ“€λ‘œ ꡬ성될 수 있음(κ°œλ°œμ‚¬DBμ—μ„œ μ €μž₯ 관리 ν•„μš”)
  • TID : κ°œλ°œμ‚¬μ—μ„œ λ°œν–‰ν•˜λŠ” uniqueν•œ ꡬ맀 ID
  • User(Payer) ID : κ°œλ°œμ‚¬μ—μ„œ κ΄€λ¦¬ν•˜λŠ” μ‚¬μš©μž ID
  • μƒν’ˆ ID : pIdλ‚˜ ν˜Ήμ€ κ°œλ°œμ‚¬μ—μ„œ κ΄€λ¦¬ν•˜λŠ” μƒν’ˆ ID
  • 기타 : νŒλ§€μ‹œ μΌμ‹œμ μœΌλ‘œ μ„€μ •λœ μƒν’ˆλͺ…μ΄λ‚˜ 가격
  • μ£Όμ˜μ‚¬ν•­
  • 결제 진행쀑 단말 자체의 문제(λ¦¬μ†ŒμŠ€ λΆ€μ‘±, λ„€νŠΈμ›Œν¬ 이슈 λ“±)둜 결제 κ²°κ³Όλ₯Ό SDK둜 λΆ€ν„° 전달 받지 λͺ»ν•˜λŠ” 상황이 λ°œμƒν•  수 있음
  • μ„ νƒμ μœΌλ‘œ SDK의 ꡬ맀이λ ₯ 쑰회, Server API인 TID ꡬ맀이λ ₯ 쑰회 등을 ν™œμš©ν•˜μ—¬ μƒν’ˆ ν™œμ„±ν™”(지급, 배솑)λ₯Ό μœ„ν•œ 볡ꡬ 둜직의 개발이 μš”κ΅¬λ¨
  • μƒν’ˆID(PID) λ³„λ‘œ ν™˜κ²½μ— 따라 νŒλ§€κ°€λŠ₯ μƒνƒœκ°€ λ³„λ„λ‘œ κ΄€λ¦¬λ˜μ–΄, μƒμš©ν™˜κ²½μ—μ„œ νŒλ§€κ°€λŠ₯ μƒνƒœκ°€ μ•„λ‹Œκ²½μš° κ²°μ œκ°€ μ œν•œλ¨

SDK : μ£Όλ¬Έ 쑰회 λ“± API 연동

  • SDKλŠ” κ²°μ œμ™€ κ΄€λ ¨λœ μΆ”κ°€ APIλ₯Ό μ œκ³΅ν•˜λ©°, μ•±(단말)μƒμ—μ„œλ„ SDK의 APIλ₯Ό μ΄μš©ν•˜μ—¬ μ΅œμ’…μ˜ 결제 μƒνƒœλ₯Ό μ‘°νšŒν•  수 있음
  • κ΄€λ ¨ 링크
  • ꢌ고 Flow
  • 결제 진행쀑 μ‚¬μš©μž λ‹¨λ§μ˜ 비정상적 μ’…λ£Œλ‘œ 결제 κ²°κ³Ό(response)λ₯Ό 받지 λͺ»ν•œ 경우 μ‚¬μš©μž λ‹¨λ§μ˜ App에 μ•„μ΄ν…œ 미지급(λΉ„ν™œμ„±ν™”) μƒνƒœκ°€ λ°œμƒ κ°€λŠ₯
  • μ•± μ’…λ£Œν›„ μž¬μ‹œμž‘ μ‹œμ μ— (SDKμ—μ„œ μ œκ³΅ν•˜λŠ”) IapPlugin.sendCommandPurchaseHistory APIλ₯Ό ν˜ΈμΆœν•˜μ—¬ μƒν’ˆID별 ꡬ맀이λ ₯ 취득후, κ°œλ°œμ‚¬μ˜ Billing μ„œλ²„μ˜ ꡬ맀 이λ ₯κ³Ό λΉ„κ΅ν•˜μ—¬ 미지급 μƒν’ˆμ— λŒ€ν•œ 지급 보정 κ°€λŠ₯

κ·Έλ¦Ό3.단말(SDK)λ₯Ό ν†΅ν•œ 결제 이λ ₯ 쑰회

[κ·Έλ¦Ό3] 단말(SDK)λ₯Ό ν†΅ν•œ 결제 이λ ₯ 쑰회

  • μš”μ²­ Parameter
  • AppIDλ₯Ό κΈ°μ€€μœΌλ‘œ 전체 ꡬ맀 이λ ₯ 쑰회 κ°€λŠ₯ (κ°œλ³„ μƒν’ˆλ³„λ‘œλ„ μ‘°νšŒκ°€λŠ₯)
{
    "method" : "request_purchase_history",
    "param" : {
        "appid" : "OA12345678"
    } 
}
  • 응닡 Parameter
  • ꡬ맀가 λ°œμƒν•˜μ˜€λ˜ μƒν’ˆμ˜ 리슀트λ₯Ό 확인할 수 있으며, validity값을 ν™œμš©ν•˜μ—¬ 쀑볡 ꡬ맀여뢀 및 μ‚¬μš© μƒνƒœλ‘œ ν™œμš©μ΄ κ°€λŠ₯ν•˜λ‹€. (IapPlugin.change_product_propertiesλ₯Ό ν†΅ν•˜μ—¬ validity κ°’μ˜ 차감 κ°€λŠ₯)
{
    "api_version" : "4",
    "identifier" : "1234567890",
    "result" : {
        "code" : "0000",
        "message" : "μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.", 
        "count" : 2,
        "product" : [ {
            "id" : "0000000020",
            "name": "2011 ν”„λ‘œμ•Όκ΅¬ μ•„μ΄ν…œ 1000원", 
            "type": "one-time",
            "kind": "consumable",
            "validity": 0,
            "price": 1100,
            "startDate": "20121201173841",
            "endDate": "20121201173841",
            "status": {
                "code" : "PH02", 
                "message": "μ‚¬μš© 기간이 λ§Œλ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 계속 μ΄μš©μ„ μ›ν•˜μ‹œλŠ” 경우 μž¬κ΅¬λ§€κ°€ ν•„μš”ν•©λ‹ˆλ‹€."
            }
        },{
            "id" : "0000000021",
            "name": "μžλ™ 결제 μƒν’ˆ",
            "type": "auto-renewal-month ",
            "validity": 365,
            "price": 1100,
            "startDate": "20151201173841",
            "endDate": "20151231235959",
            "status": {
                "code" : "PH00", 
                "message": "μ•„μ΄ν…œ 인증에 μ„±κ³΅ν•˜μ˜€μŠ΅λ‹ˆλ‹€."
            } 
        }]
    }
}
  • μ£Όμ˜μ‚¬ν•­
  • 초기 ꡬ동 μ‹œμ (loading)이 μ•„λ‹Œ μ•±μ˜ 진행 μƒνƒœ(μ˜ˆμ‹œ: κ²Œμž„μƒ μ›”λ“œλ³€κ²½, 인벀토리 μ§„μž… λ“±)에 ν•΄λ‹ΉAPIλ₯Ό 반볡적으둜 ν˜ΈμΆœν•˜λŠ” λ‘œμ§μ€ κΆŒκ³ ν•˜μ§€ μ•ŠμŒ

μ§€κΈˆκΉŒμ§€ μ•ˆλ“œλ‘œμ΄λ“œ SDK 연동에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄μ•˜κ³ , λ‹€μŒ 뢀뢄은 μ›μŠ€ν† μ–΄μ—μ„œ μ œκ³΅ν•˜κ³  μžˆλŠ” μ„œλ²„ API에 λŒ€ν•œ λ‚΄μš©μ΄λ‹€. μ„œλ²„ API의 연동 μ—¬λΆ€λŠ” κ°œλ°œμ‚¬μ˜ μ„ νƒμ‚¬ν•­μœΌλ‘œ μ—°λ™ν•˜μ§€ μ•Šμ•„λ„ 결제 μ§„ν–‰μ—λŠ” 영ν–₯을 주지 μ•ŠμœΌλ‚˜ μ„œλΉ„μŠ€ 운영의 νš¨μœ¨μ„ λ†’μ΄λŠ” μΈ‘λ©΄μ—μ„œ 연동을 ꢌμž₯ν•œλ‹€.

Server API 연동 (Server side) : μ „μžμ˜μˆ˜μ¦ 검증

  • μ „μžμ˜μˆ˜μ¦μ€ κ°œλ³„ κ²°μ œκ±΄μ— λŒ€ν•œ μ„ΈλΆ€ λ‚΄μš©μ˜ μ „μžμ„œλͺ…(Digital Signature)κ°’μœΌλ‘œ, 결제 transaction 자체의 λ³€μ‘° μ—¬λΆ€ 확인이 κ°€λŠ₯ν•˜μ—¬ 뢀정상적 결제 μ—¬λΆ€μ˜ νŒλ³„ κ°€λŠ₯
  • ν•΄λ‹Ή κΈ°λŠ₯은 SDK와 Server μ–‘μΈ‘μ—μ„œ 동일 κΈ°λŠ₯의 APIλ₯Ό μ œκ³΅ν•˜μ§€λ§Œ λ³΄μ•ˆ 및 μš΄μ˜μ„± μΈ‘λ©΄μ—μ„œ Server API의 연동을 ꢌμž₯함
  • 상세참고 : μ „μž 영수증 검증 API
  • ꢌ고 Flow
  • 1)κ²°μ œκ°€ μ •μƒμ μœΌλ‘œ μ™„λ£Œλœ 경우, 단말(SDK)둜 λΆ€ν„° μ „μžμ˜μˆ˜μ¦(receipt)이 μ•±μœΌλ‘œ μ „λ‹¬λ˜κ³ , 앱은 ν•΄λ‹Ή 데이터λ₯Ό μ•±μ˜ μ„œλ²„λ‘œ 전달
  • 2~3)μ•±μ„œλ²„λŠ” μ›μŠ€ν† μ–΄μ˜ μ „μžμ˜μˆ˜μ¦ 검증 APIλ₯Ό ν†΅ν•˜μ—¬, λ‹¬λ§λ‘œ λΆ€ν„° 전달받은 μ „μžμ˜μˆ˜μ¦ λ°μ΄ν„°μ˜ 이상여뢀λ₯Ό 검증
  • 3~4)μ „μžμ˜μˆ˜μ¦ 검증결과가 이상이 없을 경우(status=0), μ•„μ΄ν…œ 지급 처리

κ·Έλ¦Ό4.μ „μžμ˜μˆ˜μ¦ 검증 흐름

[κ·Έλ¦Ό4] μ „μžμ˜μˆ˜μ¦ 검증 흐름

  • μ£Όμš” μš”μ²­ Parameter 뢄석
  • HTTP/JSON ν˜•νƒœλ‘œ μ›μŠ€ν† μ–΄μ˜ 결제 μ„œλΉ„μŠ€ μ„œλ²„μ— μ•„λž˜μ™€ 같이 전솑
{
    "txid":"TSTORE0004_20150515102510XXXXXXXXXXXXXXX",
    "appid":"OA00012345",
    "signdata":”MIIH7QYJKoZIhvcNAQcCo … ozANBglghkgBZQMEA" 
} 
  • signdata 값은 결제 μ™„λ£Œν›„ SDK둜 λΆ€ν„° μ‘λ‹΅λ°›λŠ” μ „μžμ˜μˆ˜μ¦ κ°’μœΌλ‘œ 결제 μ™„λ£Œ 직후 μœ„μ˜ API둜 검증이 μ§„ν–‰λ˜μ–΄μ•Ό ν•˜λ©° 이후 반볡적인 ν˜ΈμΆœμ€ ꢌμž₯ν•˜μ§€ μ•ŠμŒ
  • μ£Όμš” 응닡 Parameter 뢄석
  • HTTP/JSON ν˜•νƒœλ‘œ 응닡은 μ•„λž˜μ˜ ν˜•νƒœ
{
    "status" : 0,
    "detail" : "0000",
    "message" : "μ •μƒκ²€μ¦μ™„λ£Œ", 
    "count" : 1,
    "product" : [{
        "log_time" : "20120321154451", 
        "appid" : "OA12345678", 
        "product_id" : "0900012345", 
        "charge_amount" : 1000,
        "tid" : "201012226_01047637315_00000239",
        "detail_pname" : "μ»€μŠ€ν…€ μƒν’ˆλͺ…",
        "bp_info" : "X"}]
}
  • status=0 and detail=”0000”인 경우 μ „μžμ˜μˆ˜μ¦ 데이터 μžμ²΄μ— λ³€μ‘°κ°€ μ—†μŒμ„ μ˜λ―Έν•˜λ©°, κ°œλ°œμ‚¬κ°€ μΈμ§€ν•˜κ³  μžˆλŠ” μƒν’ˆκ°€κ²©, tid, product_id λ“±μ˜ 정보λ₯Ό λΉ„κ΅ν•˜μ—¬ 응닡값에 λ¬Έμ œκ°€ μ—†λŠ”μ§€ 비ꡐ ν•„μš”(ꢌ고)
  • μ£Όμ˜μ‚¬ν•­
  • μ „μžμ˜μˆ˜μ¦μ€ κ°œλ³„ κ²°μ œμ— λŒ€ν•΄μ„œ λ°œν–‰λ˜λŠ” 고유의 μ „μžμ„œλͺ…κ°’μœΌλ‘œ 결제 자체의 μœ„λ³€μ‘° μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ  수 있음
  • μ„±κ³΅ν•œ 결제인 κ²½μš°μ—λ§Œ μ „μžμ˜μˆ˜μ¦μ΄ λ°œν–‰λ˜λ©°, ν•΄λ‹Ή 결제건의 κ°€μž₯ 졜근의 μƒνƒœλ₯Ό ν™•μΈν•˜λŠ” μš©λ„λ‘œλŠ” μ‚¬μš©ν•  수 μ—†μŒ

Server API 연동 : TID ꡬ맀이λ ₯ 쑰회

  • TIDλŠ” 결제 λ°œμƒμ‹œ κ°œλ°œμ‚¬μ—μ„œ λ°œν–‰ν•˜λŠ” ꡬ맀(결제) ID둜 μ›μŠ€ν† μ–΄ 결제 μ‹œμž‘ 이전 μ‹œμ μ— μƒμ„±λ˜λ©° κ°œλ°œμ‚¬μ—μ„œ 해당값을 μΈμ§€ν•˜κ³  μžˆλ‹€λŠ” μ μ—μ„œ, κ²°μ œκ°€ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ 이후에 전달 받을 수 μžˆλŠ” μ „μžμ˜μˆ˜μ¦(μ›μŠ€ν† μ–΄κ°€ λ°œν–‰)κ³ΌλŠ” 닀름

  • κ²°μ œμ™„λ£Œ μ‹œμ  ν˜Ήμ€ 결제 μ—¬λΆ€ μ™„λ£Œ μ—¬λΆ€λ₯Ό μ•Œ 수 μ—†λŠ” μ‹œμ μ— TIDꡬ맀이λ ₯ 쑰회 APIλ₯Ό ν˜ΈμΆœν•˜μ—¬ 결제의 성곡여뢀λ₯Ό 확인할 수 있음 (결제 이후 ν™˜λΆˆ λ“± 변동 내역은 확인 λΆˆκ°€)

  • μ°Έκ³  링크 : TID ꡬ맀이λ ₯ 쑰회 API

  • ꢌμž₯ Flow

  • ꢌμž₯ν•˜λŠ” κ²°μ œμƒμ˜ 호좜 μ‹œμ μ€ 결제 μ™„λ£Œ μ§ν›„λ‘œ μ „μžμ˜μˆ˜μ¦ 검증과 동일(κ·Έλ¦Ό4 μ°Έκ³ )
  • λ‹¨λ§μƒμ˜ 결제 κ²°κ³Όλ₯Ό 전달 받지 λͺ»ν•˜μ—¬ μ΅œμ’… 결제의 μƒνƒœλ₯Ό κ°œλ°œμ‚¬μ˜ μ•±μ΄λ‚˜ μ„œλ²„μ—μ„œ μ•Œ 수 μ—†λŠ” 경우 μ•„λž˜μ™€ 같이 batch λ₯Ό ν†΅ν•œ μƒνƒœ 쑰회 및 동기화가 κ°€λŠ₯

κ·Έλ¦Ό5.TID ꡬ맀이λ ₯ 쑰회

[κ·Έλ¦Ό5] TID ꡬ맀이λ ₯ 쑰회

  • μ‚¬μš©μžμ˜ 단말 ν˜Ήμ€ 앱이 λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜κ³  μΌμ •μ‹œκ°„ κ²½κ³Όν›„ μž¬κΈ°λ™ λ˜λŠ” μ‹œμ μ— 결제 μƒν’ˆμ˜ 정보λ₯Ό μ•±μ„œλ²„λ‘œ λΆ€ν„° 전달받아 ꡬ맀건의 볡원이 κ°€λŠ₯
  • 주의 사항
  • ν•΄λ‹Ή APIλŠ” κ²°μ œκ°€ μ™„λ£Œλœ μ‹œμ , ν˜Ήμ€ 결제 κ²°κ³Όλ₯Ό μ•Œ 수 μ—†λŠ” 상황에 μ΅œμ†Œν•œμ˜ ν˜ΈμΆœμ„ ꢌ고
  • APP μ΅œμ΄ˆλ‘œλ”© μ‹œμ , 상점 μ§„μž… μ‹œμ , μ‚¬μš©μž λ³€κ²½ μ‹œμ  λ“± APP의 λ‚΄μš© 흐름에 쒅속적인 경우 νŠΈλž˜ν”½ κ³ΌλΆ€ν•˜ 및 μ„œλΉ„μŠ€ μž₯μ•  μš”μΈμœΌλ‘œ μž‘μš© κ°€λŠ₯
  • μ „μžμ˜μˆ˜μ¦ κ²€μ¦κ³ΌλŠ” μš©λ„κ°€ κ°™κΈ° λ•Œλ¬Έμ— 쀑볡적 μ‚¬μš©μ€ ꢌμž₯ν•˜μ§€ μ•ŠμŒ

ꢌμž₯ 결제 흐름 (SDK + Server API)

  • μ•„λž˜ [κ·Έλ¦Ό6]λŠ” μ›μŠ€ν† μ–΄ IAP 결제 μ—°λ™μ‹œμ˜ 전체 ꢌμž₯ Flow둜 결제 μ™„λ£Œ(5)이후 μ „μžμ˜μˆ˜μ¦ 검증은 선택적 μ‚¬ν•­μœΌλ‘œ κ°œλ°œμ‚¬μ—μ„œ 연동 μ—¬λΆ€λ₯Ό κ²°μ •
  • λ‹¨λ§κ²°μ œ 진행 과정상(3-4)μ—μ„œμ˜ 문제둜 결제 κ²°κ³Όλ₯Ό 전달 받지 λͺ»ν•œ 경우, TIDꡬ맀이λ ₯ 쑰회λ₯Ό ν†΅ν•˜μ—¬ 결제 μƒνƒœμ˜ 볡원이 κ°€λŠ₯
  • TID ꡬ맀이λ ₯ μ‘°νšŒλŠ” batch λ‚˜ κ°œλ°œμ‚¬ CS μ‹œμŠ€ν…œμ„ ν†΅ν•œ μ‘°μž‘μœΌλ‘œ 결제 이λ ₯의 볡원이 이루어지도둝 κ΅¬ν˜„μ„ κ³ λ €ν•΄ λ³Ό 수 있음

κ·Έλ¦Ό6.ꢌμž₯ 결제 흐름

[κ·Έλ¦Ό6] ꢌμž₯ 결제 흐름

  • 결제 진행상 였λ₯˜λ‘œ 결제λ₯Ό ν•œ μ‚¬μš©μžκ°€ μ•„μ΄ν…œμ„ 지급 받지 λͺ»ν•œ κ²½μš°μ— λŒ€ν•œ λŒ€μ‘μœΌλ‘œ μœ„μ˜ TID ꡬ맀이λ ₯ 쑰회뿐만 μ•„λ‹ˆλΌ SDKμ—μ„œ μ œκ³΅ν•˜λŠ” ꡬ맀이λ ₯ 쑰회 API (IapPlugin.request_purchase_history)λ₯Ό ν™œμš©ν•˜μ—¬ μ•„μ΄ν…œ λ―Έμ§€κΈ‰κ±΄μ˜ 볡원 λ‘œμ§λ„ κ³ λ €ν•΄ λ³Ό 수 있음
  • 상세 λ‚΄μš©μ€ [SDK : μ£Όλ¬Έ 쑰회 λ“± API 연동] 파트 μ°Έκ³ 
⚠️ **GitHub.com Fallback** ⚠️