카카오페이 React Native 연동 실전 가이드
카카오페이를 React Native 앱에 연동하는 방법. 공식 React Native SDK가 없는 상황에서 WebView + REST API로 구현하는 플로우, Android intent 이슈, iOS 콜백 처리까지 실전 경험을 정리했습니다.
카카오페이를 React Native 앱에 연동하는 방법. 공식 React Native SDK가 없는 상황에서 WebView + REST API로 구현하는 플로우, Android intent 이슈, iOS 콜백 처리까지 실전 경험을 정리했습니다.
한국 PG 통합
카카오페이 React Native 연동, 공식 SDK 없이 WebView로 구현하는 방법. 결제 준비-승인 API 구성, Android/iOS 딥링크 처리, 파트너 가입 없이 테스트하는 방법까지.
한 줄 답: 카카오페이 공식 React Native SDK는 없으므로, 단독 연동이 필요하면 WebView + REST API 방식을 사용하고, 여러 결제수단을 함께 지원할 계획이라면 토스페이먼츠 결제위젯 SDK 하나로 처리하는 것이 실용적입니다.
Boaz · Product Engineer
카카오페이를 React Native 앱에 붙이려 하면 첫 번째 장벽부터 만납니다. 공식 React Native SDK가 없습니다. 카카오는 Android, iOS, Flutter SDK를 공식 제공하지만, React Native는 별도 패키지 없이 WebView와 REST API를 조합해서 직접 구현해야 합니다. 번거롭지만 구조를 한 번 잡아두면 이후 유지보수는 어렵지 않습니다.
2026년 현재도 없습니다. 카카오페이 개발자센터(developers.kakaopay.com)는 REST API 기반 온라인결제 API만 제공합니다. React Native 앱에서 카카오페이를 사용하는 표준 방법은 두 가지입니다.
next_redirect_app_url을 WebView로 열어 결제 진행 후 딥링크로 복귀1인 개발자라면 2번이 훨씬 빠릅니다. 카카오페이만 단독 결제수단으로 지원해야 한다면 직접 연동을 선택하게 됩니다.
결제 플로우는 준비(ready) → 사용자 인증 → 승인(approve) 세 단계입니다.
결제 준비 API
const response = await fetch('https://open-api.kakaopay.com/online/v1/payment/ready', {
method: 'POST',
headers: {
Authorization: `SECRET_KEY ${process.env.KAKAO_PAY_SECRET_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
cid: 'TC0ONETIME',
partner_order_id: 'order_001',
partner_user_id: 'user_001',
item_name: '테스트 상품',
quantity: 1,
total_amount: 10000,
tax_free_amount: 0,
approval_url: 'https://yourapp.com/payment/success',
cancel_url: 'https://yourapp.com/payment/cancel',
fail_url: 'https://yourapp.com/payment/fail',
}),
});
const data = await response.json();
API 엔드포인트는 2024년 초에 https://kapi.kakao.com/v1/payment/ready에서 https://open-api.kakaopay.com/online/v1/payment/ready로 변경됐습니다. 구 URL을 쓰는 레거시 코드라면 반드시 업데이트해야 합니다. 인증 헤더 키도 KakaoAK에서 SECRET_KEY로 바뀌었습니다.
서버에서 받은 next_redirect_app_url을 React Native WebView로 열면 카카오페이 결제 화면이 뜹니다.
import { WebView } from 'react-native-webview';
import { Linking } from 'react-native';
function KakaoPayScreen({ redirectAppUrl }: { redirectAppUrl: string }) {
return (
<WebView
source={{ uri: redirectAppUrl }}
onShouldStartLoadWithRequest={(request) => {
const { url } = request;
if (url.startsWith('intent://') || url.startsWith('kakaotalk://')) {
Linking.openURL(url).catch(() => null);
return false;
}
if (url.startsWith('myapp://payment/success')) {
handlePaymentSuccess(url);
return false;
}
return true;
}}
/>
);
}
Android: intent scheme URL 처리
Android에서 카카오톡 앱을 여는 URL은 intent://kakaopay/pg?url=...#Intent;scheme=kakaotalk;package=com.kakao.talk;end 형식입니다. react-native-webview는 이 URL을 기본적으로 처리하지 못해 "Can't open url" 에러가 납니다. onShouldStartLoadWithRequest에서 intent://로 시작하는 URL을 잡아서 Linking.openURL()로 넘기는 처리가 필수입니다.
iOS: onMessage 충돌
iOS 환경에서 WebView에 onMessage props를 등록하면 카카오페이 결제창이 열리지 않는 문제가 2024년 하반기부터 보고되고 있습니다. 카카오페이 브릿지 페이지 변경 이후 발생하는 이슈로, 결제 URL로 진입하는 시점에 onMessage를 undefined로 교체하는 임시 해결책이 사용되고 있습니다.
가능합니다. 카카오페이 개발자센터(developers.kakaopay.com)에서 카카오 계정으로 가입하고 애플리케이션을 등록하면 Secret Key를 발급받을 수 있습니다. 테스트용 CID TC0ONETIME(단건)과 TCSUBSCRIP(정기)을 사용하면 실제 결제 없이 플로우를 확인할 수 있습니다.
실제 결제를 받으려면 카카오페이 파트너센터(partner.kakaopay.com)에 사업자로 등록해야 합니다. 개인사업자 또는 법인 모두 가능하지만, 사업자 없이 순수 개인으로는 실제 결제 처리가 불가능합니다.
1인 개발자가 앱에 결제를 붙일 때 실용적인 선택 기준은 하나입니다. "카카오페이만 받을 건가, 여러 결제수단을 받을 건가."
카카오페이 결제수단 비중이 높은 서비스라도 직접 연동보다 토스페이먼츠 결제위젯을 쓰면 카카오페이를 포함해 신용카드, 간편결제 전체를 한 SDK로 처리할 수 있습니다. 유지보수 포인트가 하나로 줄어들고, API 엔드포인트 변경 같은 이슈도 SDK가 흡수합니다.
없습니다. 2026년 현재 카카오페이는 Android, iOS, Flutter SDK만 공식 제공합니다. React Native에서는 카카오페이 온라인결제 REST API와 react-native-webview를 조합해서 직접 구현하거나, 토스페이먼츠 결제위젯 SDK를 통해 카카오페이 결제수단을 사용하는 방식 중 선택해야 합니다.
2024년 초에 변경됐습니다. 기존 https://kapi.kakao.com/v1/payment/ready에서 https://open-api.kakaopay.com/online/v1/payment/ready로 바뀌었습니다. 인증 헤더도 KakaoAK {admin_key}에서 SECRET_KEY {secret_key}로 변경됐습니다. 구 URL 사용 코드는 반드시 업데이트가 필요합니다.
테스트는 가능합니다. 카카오페이 개발자센터에서 카카오 계정으로 가입 후 앱을 등록하면 Secret Key를 발급받을 수 있습니다. 테스트 CID(TC0ONETIME)로 실제 결제 없이 전체 플로우를 확인할 수 있습니다. 실제 결제를 받으려면 파트너센터에 사업자 등록이 필수입니다.
Android WebView는 intent:// 스킴 URL을 기본적으로 처리하지 못합니다. onShouldStartLoadWithRequest 핸들러에서 url.startsWith('intent://') 또는 url.startsWith('kakaotalk://')를 감지하여 Linking.openURL()로 넘기는 처리가 필요합니다. 이 처리 없이는 카카오톡이 설치되어 있어도 앱이 열리지 않습니다.
2024년 하반기부터 iOS에서 WebView의 onMessage props가 등록되어 있으면 카카오페이 결제창이 열리지 않는 문제가 보고되고 있습니다. 결제 URL 진입 시 onMessage를 undefined로 설정하는 임시 방법이 사용되고 있으며, 카카오페이 개발자 포럼에서 최신 상태를 확인해야 합니다.
React Native + NestJS + Supabase + AI 에이전트 17개. 1회 결제로 끝나는 인디해커 시스템입니다.