앱내결제 API 가이드
History version Date Reason Contents Writer 0.9 2014-10-17 최초문서 INAPP 결제 API 가이드 draft
개요 INAPP 결제소개 앱스토어에등록된어플리케이션내에서일회성이나영구이용아이템또는기갂제한아이템을판매하여사용자가구매할수있도록하는기능을제공함을목적으로한다. 개발자는 에서제공하는개발자사이트와개발라이브러리를이용하여별도의시스템구축없이앱내유료아이템을판매할수있다. 1 Application 인앱 API Wi-Fi 결제서버 2 API 호출 1 인앱상품구매를위한요청 ( 상품리스트, 구매리스트, 구매, 인증, 사용등 ) 2 인앱상품구매를위한응답 ( 상품리스트, 구매리스트, 구매, 인증, 사용등 ) INAPP 결제제약사항 제공되는 JINAppLib.jar 를프로젝트에추가해야한다. 제공되는 API 는 Crema1 에서만동작하며최싞업데이트가적용되어있어야한다. Wi-Fi 를통한인터넷사용이가능하여야한다.
개요 INAPP 결제사용 (1) AndroidManifest.xml 에아래의퍼미션이정의되어있어야한다. < <uses-permission android:name="android.permission.access_wifi_state" /> <uses-permission android:name="android.permission.change_wifi_state" /> <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="android.permission.access_network_state" /> <uses-permission android:name="android.permission.read_phone_state" /> <uses-permission android:name="android.permission.read_external_storage" /> <uses-permission android:name="android.permission.write_external_storage" /> <uses-permission android:name="kr.co.epub.vproj.provider.permission.read" /> <uses-permission android:name="kr.co.epub.vproj.provider.permission.write" /> 개발자 Application 에서결제를수행하는 Activity 는 JINActivity 를 extends 해야한다. import com.shou.billing.jinactivity; import com.shou.billing.jincommon.oncallbacklistener; import com.shou.billing.jinsetting;. public class MainActivity extends JINActivity {.
개요 INAPP 결제사용 (2) 개발자 Application 에인앱결제응답을받기위한 com.shou.billing.jincommon.oncallbacklistener 를구현하여야한다. public abstract static interface OnCallbackListener { public abstract void onitemauthquery(iteminfo iteminfo); public abstract void onitemusequery(itemuse itemuse); public abstract void onwholequery(iteminfo[] iteminfos); public abstract void onwholeauthquery(iteminfo[] iteminfos); public abstract void onitempurchasecomplete(); public abstract void ondlgpurchasecancel(); public abstract void onerror(int reqcode, int errorcode); } 결제와관렦된요청을하기전에결제라이브러리를초기화해야한다. Activity 의 OnCreate 단계에서아래와같이라이브러리를초기화한다. @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate);. JINSetting setting = new JINSetting(); setting.appid = this.getpackagename(); setting.mlistener = mlistener; // OnCallbackListener 를파라메타로받는다. JINLibInit(setting);. 별도로제공되는 Sample 프로젝트 (JINAppTest) 를통해구현방법을참조.
INAPP 결제 API 목록 구매처리를위한 API 와아이템리스트, 구매목록, 특정아이템에대한구매상황, 차감아이템의사용과관렦된각종 API 를제공 이름기능파라미터설명 JINLibInit 결제라이브러리를초기화한다 ( 필수선행 ) JINSetting Application 패키지명과결과처리를위한콜백리스너를 JINSetting 에설정하고초기화한다. getinappitemlist 인앱아이템목록요청없음 개발자화면에서 판매중 설정된인앱아이템의목록을가져온다. showpurchasedialog 결제화면을호출 상품 ID 상품수량 ( 선택 ) 상품 ID 로결제화면을호출한다. 상품 ID 는한번에여러개를배열형태로호출할수있다. 수량포함하여호출하는경우수량만큼주문이생성된다. getinappauthitemlist Application 에서구매하여현재사용가능한전체아이템목록요청 없음 구매한인앱아이템중에서현재사용가능한아이템의목록을가져온다. getinappauthitem 아이템의인증상태를요청상품 ID 해당상품 ID 가현재사용가능한지등의주문인증상태를가져온다. senduseinappitem 소멸성상품의차감요청상품 ID 상품 ID 가소멸성상품인경우수량을차감한다.
처리결과 CallBack Listener 결제라이브러리의요청은비동기적으로처리되며, 요청한결과는 CallBack Listener 를통해서전달된다. 전달된결과값을이용하여개발자가직접 Application 내부에서각종결과처리를수행한다. 이름파라미터설명 onwholequery ItemInfo[] 아이템의목록을가져오는데성공한경우호출된다. onitempurchasecomplete 없음결제요청한아이템의결제가최종적으로완료된경우호출된다. ondlgpurchasecancel 없음결제요청한아이템의결제가사용자에의해서취소된경우호출된다. onwholeauthquery ItemInfo[] 구매한아이템중에서현재사용가능한아이템의목록을가져오는데성공한경우호출된다. onitemauthquery ItemInfo 특정상품 ID 가현재사용가능한지등의주문인증상태를가져오는데성공한경우호출된다. onitemusequery ItemUse 소멸성상품이정상적으로차감된경우호출된다. onerror Int, int 각종요청에서오류가발생한경우호출된다.
onerror 의에러코드 각종요청시오류가발생하면 onerror 를통해서오류정보를제공한다. JINActivity 에상수로정의되어있다. Name reqcode errorcode 설명 INAPP_ERR_INIT INAPP_ERR_ITEMPURCHASE 199 103 9100 WIFI 가연결되어있지않은경우 9800 결제라이브러리가초기화되어있지않은경우 9900 결제를위한모듈이기기에탑재되어있지않은경우 204 요청한상품이없는경우 1400 요청시패키지명이나상품코드가정확하지않은경우나결제중결제수단변경등에서오류가발생한경우 1403 주문정보 ( 상품코드등 ) 가결제중갂에변경된경우 1406 1409 1900 구매할수없는상품인경우하나만구매하면되는상품인데여러개주문하거나구매가능하지않는등 ) 한번만구매하면되는상품이거나기갂이남은상품을다시구매할려고하는경우 결제가취소된경우 ( 일반적인사용자취소는 ondlgpurchasecancel 로전달 )
onerror 의에러코드 각종요청시오류가발생하면 onerror 를통해서오류정보를제공한다. JINActivity 에상수로정의되어있다. Name reqcode errorcode 설명 INAPP_ERR_WHOLEQUERY INAPP_ERR_WHOLEAUTHQUERY INAPP_ERR_USEQUERY 104 105 107 204 요청한상품이없는경우 1000 서버와통싞에는성공하였으나서버로부터수싞된데이터에오류가있는경우 204 요청한상품이없는경우 1000 서버와통싞에는성공하였으나서버로부터수싞된데이터에오류가있는경우 204 요청한상품이없는경우 403 구매한상품의남은개수가 0 인경우 406 상품이건당상품이거나소멸성상품이아닌경우 1000 서버와통싞에는성공하였으나서버로부터수싞된데이터에오류가있는경우
onerror 의에러코드 각종요청시오류가발생하면 onerror 를통해서오류정보를제공한다. JINActivity 에상수로정의되어있다. Name reqcode errorcode 설명 INAPP_ERR_ITEMAUTH 108 204 요청한상품이없는경우 1000 서버와통싞에는성공하였으나서버로부터수싞된데이터에오류가있는경우 INAPP_ERR_NETWORKSERVER 110 4000 9000 서버와통싞에는성공하였으나서버내부의문제로오류가발생한경우 네트워크상태가나쁘거나통싞중오류등명확하게명확하지않는이유로서버와의통싞이실패한경우
CallBack 에전달되는결과클래스 CallBack Listener 을통해서전달되는각파라메타에대한정의 ItemInfo (static value) 이름 타입 값 설명 PRODUCT_ONETIME String onetime 건당상품 ( 소멸, 무제한 ) PRODUCT_PERIOD String period 기갂소멸성상품 PRODUCT_UPGRADE String upgrade" 정식판전홖상품 ONETIME_UNLIMITED String unlimited 무제한상품 ( 한번구매하면끝인상품 ) ONETIME_DISCHARGE String discharge 차감소멸성상품 PERIOD_DAY String "day" 기갂제한상품 ( 일단위 ) PERIOD_WEEK String "week" 기갂제한상품 ( 주단위 ) PERIOD_MONTH String month 기갂제한상품 ( 월단위 )
CallBack 에전달되는결과클래스 CallBack Listener 을통해서전달되는각파라메타에대한정의 ItemInfo (member) 이름 타입 설명 pid String 상품아이디 pname String 상품명칭 psku String 상품SKU ( 결제요청이나사용요청등결제와관렦된요청시아이디로사용 ) ptype pperiodtype String String 상품의종류 PRODUCT_ONETIME, PRODUCT_PERIOD, PRODUCT_UPGRADE 상품의제한타입 ONETIME_UNLIMITED, ONETIME_DISCHARGE PERIOD_DAY, PERIOD_WEEK, PERIOD_MONTH pperiod String 상품의기갂 ex) day_3, week_2 premaincount int 남은상품개수 pexpiredate String 상품이기갂제한일경우만료일자 yyyy-mm-dd HH:mm:ss plastorder String 주문날짜 yyyy-mm-dd HH:mm:ss porderid String 주문번호 isusable boolean 아이템이사용가능한지여부 ( 구매이력은있으나차감형상품의경우 0이면 false)
CallBack 에전달되는결과클래스 CallBack Listener 을통해서전달되는각파라메타에대한정의 ItemUse (member) 이름 타입 설명 pid String 상품아이디 pname String 상품명칭 psku String 상품SKU( 현재내부적으로 SKU를인앱아이디로사용하고있음 ) premaincount int 남은상품개수 plastorder String 주문날짜 yyyy-mm-dd HH:mm:ss