외부 API/kakao

카카오 Klip API

재테크하는 개발자 2022. 2. 24. 17:09

 

 


 

카카오 Klip API

 

Klip

Klip은 사용자의 디지털 자산을 쉽고 편리하게 관리해 주는 개인 디지털 지갑 서비스입니다. 지금까지 다양한 블록체인 지갑이 있었지만, 어려운 사용자 경험으로 인해 제한적으로 활용되었습니다. Klip은 카카오톡에 연동되어 메신저만큼 쉬운 사용자 경험을 제공합니다. 또한, Klaytn 기반의 다양한 블록체인 서비스들을 소개하는 창구 기능을 하며 블록체인 서비스 확산에 기여할 것입니다.

 

Klip API

Klip API는 외부 서비스에서 API를 통해 Klip에 있는 KLAY 및 대체 가능한 토큰(FT)을 전송하거나 Klip에서 카드(NFT)를 발행, 조회, 전송 또는 삭제하는 기능을 제공합니다. Klip API는 Card Minting API와 App2App API로 구성됩니다.
일반적인 Klip app2app API를 사용하는데에는 Klip Partners 가입이 필요하지 않습니다.
Klip Partners 가입은 Klip 내 NFT 발행 및 전송을 지원하기 위한 API 사용 시에 필요합니다.

 

1. Card Minting API

Card Minting API는 서비스에 가입한 파트너사에서 직접 카드를 발행, 조회, 전송, 삭제하기 위한 API입니다. 복잡한 스마트 컨트랙트 배포나 관리 및 운영없이 간단한 API를 사용하여 카드를 활용하는 BApp을 개발할 수 있습니다. Card Minting API를 사용하기 위한 절차는 아래와 같습니다.

 

2. App2App API

App2App API는 BApp 개발자가 별도 가입 절차없이 Klip 사용자를 인증하고 해당 사용자의 토큰 및 카드를 전송하기 위한 API입니다. 또한 직접 개발한 스마트 컨트랙트 실행을 Klip 사용자에게 요청할 수 있습니다. 기본적으로 카카오톡이 설치된 모바일 환경에서 BApp에서 Deep Link를 통해 Klip에 서명을 요청하는 방식으로 동작합니다.

App2App API는 아래와 같은 상황에서 활용할 수 있습니다.

  • BApp 사용자의 Klip 지갑 주소 인증
  • Klip을 통한 KLAY, 토큰 전송
  • Klip을 통한 카드 조회 및 전송
  • Klip을 통한 smart contract 실행

 


 

출처 : https://docs.klipwallet.com/

klip연결시 크게 3가지 step으로 진행 됩니다.

  1. prepare (request할 내용으로 key를 발급 받고)
  2. request (klip에 연결하여 서명을 하고)
  3. getResult (그에 대한 res를 받는다.)
 

npm install klip-sdk 혹은 yarn add klip-sdk 커맨드를 통해 설치 후 다음과 같이 ES module import 방식으로 사용가능합니다.

 

Prepare

App2App 처리 시 가정 먼저 수행해야할 Prepare 과정은 Klip에서 처리할 요청 데이터를 전달하고 Request Key를 발급받는 과정입니다. Reqeust Key는 Deep Link 호출 및 결과 확인 과정에서 필요합니다.
prepare과정에선 auth , sendKlay, sendToken, sendCard(ERC721,KIP17,NFT) 그리고 실질적으로 서비스를 구축하면서 많이 사용하게 될 executeContract 총 5가지가 있다

auth(인증)을 제외한 나머지는 Klaytn에 트랜잭션을 전송하는 작업입니다.

1.auth는 klip의 EOA정보를 받아오는 과정이다. (로그인은 버튼 이미지 가이드가 존재하고, 별도의 SDK를 제공하고 있지는 않다.)

res data는 address를 받아오고 auth한 시간과 상태 값 정도다.

 

 

prepare 단계에서 auth 타입으로 호출하면 아래와 같이 request_key를 가져올 수 있습니다.
(expiration time은 10분 고정값이나 그라운드엑스에서 내부적으로 더 긴 시간동안 조회할수있도록 제공은 되어지고있음.)

 

 

그 다음 Request 단계에서 IOS와 Android 환경에서 위에서 얻은 request_key를 쿼리 스트링으로 넘겨줍니다.

 

sendKlay은 BApp(블록체인 앱) 회원의 클립 지갑에서 다른 Klaytn 계정 주소(EOA)로 KLAY를 전송하는 작업입니다.

KLAY 전송을 위한 트랜잭션 객체를 생성합니다.

 

sendToken은 BApp 회원의 Kilp 지갑에서 다른 Klaytn 계정 주소(EOA)로 토큰을 전송하는 작업입니다.

토큰 전송을 위한 트랜잭션 객체를 생성합니다.

 

sendCard는 BApp 회원의 Klip 지갑에서 다른 Klaytn계정 주소(EOA)로 카드(NFT)를 전송하는 작업입니다.

카드 전송을 위한 트랜잭션 객체를 생성합니다.

 

executContract는 Kilp의 EOA를 통해 Contract함수를 실행합니다.

클립에 리스팅 되어있지 않아도 executContract 메소드를 이용해서 token contrct의 트랜잭션을 호출하거나 NFT 컨트랙트의 트랜잭션을 사용하면 됩니다.

 

 

 

 

 

Request

Request는 BApp에서 Klip에 App2App 처리를 요청하기 위한 Deep Link를 실행하는 과정입니다. Deep Link를 통해 Klip이 실행된 경우, 사용자에게 확인 창이 뜨게됩니다. 인증의 경우는 BApp에 EOA를 제공에 동의를 구하는 창이 뜨게되며, 트랜잭션 처리의 경우 요청한 트랜잭션 데이터를 화면에 보여주고, pin code 입력받아서 실제 트랜잭션을 처리하게됩니다.

위 prepare 단계에서 정의한 작업을 실제로 실행하도록 요청합니다.

“인증”은 BApp 회원의 Klip 지갑 주소(EOA)를 BApp으로 받아오는 작업이며 그 외에 작업은 위 트랜잭션에 서명을 받는 작업입니다. 이 단계에서는 이들 트랜잭션에 Klaytn 계정 키로 서명한 다음 Klaytn에 트랜잭션 전송 요청을 하고 전송합니다.


그 다음 IOS와 Android 환경에서 위 Prepare단계에서 얻은 request_key를 쿼리 스트링으로 넘겨줍니다.

 

IOS 환경

kakaotalk://klipwallet/open?url=https://klipwallet.com/?target=/a2a?request_key=0b0ee0ad-62b3-4146-980b-531b3201265d

카카오톡 설치가 되어있지 않은경우 다운받을 수 있는 스토어로 이동하는 링크는 아래와 같습니다.

itms-apps://itunes.apple.com/app/id362057947

 

Android 환경

intent://klipwallet/open?url=https://klipwallet.com/?target=/a2a?request_key=0b0ee0ad-62b3-4146-980b-531b3201265d#Intent;scheme=kakaotalk;package=com.kakao.talk;end

카카오톡 설치가 되어있지 않은경우 다운받을 수 있는 스토어로 이동하는 링크는 아래와 같습니다.

market://details?id=com.kakao.talk

 

 

 

 

Result

App2App API 요청의 최종 상태는 아래와 같이 Result API를 polling하여 얻을 수 있습니다. Prepare 과정에서 얻은 request_key값을 쿼리 스트링으로 설정합니다.

Request 단계에서 요청한 작업을 실행했을때 결과를 얻는 단계입니다.
API는 형태에 따라서 두가지로 구분됩니다. 먼저 prepare와 result 단계는 klip backend서버로 요청을 날리는 REST API형태이고, request 단계는 Klip을 띄워서 처리하기 위한 Depp Link 형태입니다. 앞선 두가지 별대로 필요시 사용자의 카드 소유 정보를 얻기 위한 REST API형태의 요청도 있습니다.

 

1단계와 2단계를 모두 마치면 해당 request_key로 GET 요청을 합니다.

 
curl -X GET "https://a2a-api.klipwallet.com/v2/a2a/result?request_key=0b0ee0ad-62b3-4146-980b-531b3201265d" \
-H "Content-Type: application/json"​

 

요청이 정상 처리되면 요청 type별로 아래 값을 받습니다.

Case 1) Auth 요청

 
{
  "request_key": "0b0ee0ad-31b3201265d",
  "expiration_time": 1600011054,
  "status": "completed",
  "result": {
    "klaytn_address": ""
  }
}​

Case 2) Auth 이외의 요청

{
  "request_key": "4146-980b-",
  "expiration_time": ,
  "status": "completed",
  "result": {
    "tx_hash": "",
    "status": "success"
  }
}