Skip to content

bootpay/flutter-example

Repository files navigation

Bootpay Flutter 공식 예제

부트페이에서 지원하는 공식 Flutter 예제입니다.

지원 플랫폼

  • Android (API 16+)
  • iOS (9.0+)
  • Web

의존성

dependencies:
  bootpay: ^5.2.0          # PG / Commerce 결제 (Android · iOS · Web)
  get: ^4.6.5              # 라우팅
  flutter_dotenv: ^5.1.0   # 환경 키 (.env) 로딩
  webview_flutter: ^4.10.0 # 웹앱 연동 데모용

bootpay_bio 는 deprecated — 생체/비밀번호 간편결제는 bootpay 패키지의 결제위젯으로 대체되었습니다. 본 예제에서는 의존성과 메뉴 모두 비활성화되어 있습니다.

테스트 메뉴

# 메뉴 설명 사용 메서드
1 PG 일반 결제 테스트 일반 PG 결제 (기본: 나이스페이 / 카드) — client_key · legacy application_id · 키 없음 3 가지 인증모드 토글 requestPayment()
2 통합결제 테스트 여러 결제수단 통합 requestPayment()
3 카드자동 결제 테스트(인증) 정기결제 빌링키 발급 (인증 방식) requestSubscription()
4 카드자동 결제 테스트(비인증) 비인증 정기결제 requestSubscription()
5 본인인증 테스트 휴대폰 본인인증 requestAuthentication()
7 비밀번호 결제 테스트 - BootpayUI 비밀번호 간편결제 bootpay 결제위젯
8 웹앱으로 연동하기 WebView 기반 연동 WebView

기본 사용법

1. Client Key 설정

부트페이 관리자에서 client_key를 발급받으세요. 예제 앱은 .env 값을 먼저 읽고, 미설정 시 production 테스트 키로 fallback 합니다.

String clientKey = BootpayEnvConfig.clientKey;

2. PG 일반 결제 (requestPayment)

import 'package:bootpay/bootpay.dart';
import 'package:bootpay/model/extra.dart';
import 'package:bootpay/model/item.dart';
import 'package:bootpay/model/payload.dart';
import 'package:bootpay/model/user.dart';

void bootpayTest(BuildContext context) {
  Payload payload = Payload();

  // Client Key 설정
  payload.clientKey = BootpayEnvConfig.clientKey;

  // 결제 정보
  payload.pg = '나이스페이';   // PG 사 선택 (예제 기본값)
  payload.method = '카드';
  payload.orderName = "테스트 상품";
  payload.price = 1000.0;
  payload.orderId = DateTime.now().millisecondsSinceEpoch.toString();

  // 상품 정보
  Item item = Item();
  item.name = "상품명";
  item.qty = 1;
  item.id = "ITEM_CODE";
  item.price = 1000;
  payload.items = [item];

  // 구매자 정보
  User user = User();
  user.username = "사용자 이름";
  user.email = "user@example.com";
  user.phone = "010-1234-5678";
  user.addr = "서울시 강남구";
  payload.user = user;

  // 결제 옵션
  Extra extra = Extra();
  extra.appScheme = 'bootpayFlutterExample';  // iOS 앱스킴
  extra.cardQuota = '3';  // 할부 개월수
  payload.extra = extra;

  // 결제 요청
  Bootpay().requestPayment(
    context: context,
    payload: payload,
    showCloseButton: false,
    onCancel: (String data) {
      print('------- onCancel: $data');
    },
    onError: (String data) {
      print('------- onError: $data');
    },
    onClose: () {
      print('------- onClose');
      Bootpay().dismiss(context);
    },
    onIssued: (String data) {
      print('------- onIssued: $data');
    },
    onConfirm: (String data) {
      // 클라이언트 승인
      Bootpay().transactionConfirm();
      return false;

      // 또는 바로 승인: return true;
      // 또는 서버 승인: return false; (서버에서 승인 API 호출)
    },
    onDone: (String data) {
      print('------- onDone: $data');
    },
  );
}

3. 본인인증 (requestAuthentication)

void bootpayAuthentication(BuildContext context) {
  Payload payload = Payload();

  payload.webApplicationId = webApplicationId;
  payload.androidApplicationId = androidApplicationId;
  payload.iosApplicationId = iosApplicationId;

  payload.pg = '다날';
  payload.method = '본인인증';
  payload.orderName = "본인인증";
  payload.authenticationId = DateTime.now().millisecondsSinceEpoch.toString();

  User user = User();
  user.username = "사용자 이름";
  user.phone = "010-1234-5678";
  payload.user = user;

  Extra extra = Extra();
  extra.appScheme = 'bootpayFlutterExample';
  // extra.carrier = "SKT,KT,LGT";  // 통신사 제한
  // extra.ageLimit = 20;  // 최소 나이 제한
  payload.extra = extra;

  Bootpay().requestAuthentication(
    context: context,
    payload: payload,
    showCloseButton: false,
    onCancel: (String data) { print('onCancel: $data'); },
    onError: (String data) { print('onError: $data'); },
    onClose: () { Bootpay().dismiss(context); },
    onDone: (String data) { print('onDone: $data'); },
  );
}

4. 정기결제 빌링키 발급 (requestSubscription)

void bootpaySubscription(BuildContext context) {
  Payload payload = Payload();

  payload.webApplicationId = webApplicationId;
  payload.androidApplicationId = androidApplicationId;
  payload.iosApplicationId = iosApplicationId;

  payload.pg = '토스페이먼츠';
  payload.method = '카드자동';
  payload.orderName = "정기결제 등록";
  payload.price = 1000.0;  // 0원이면 빌링키만 발급
  payload.subscriptionId = DateTime.now().millisecondsSinceEpoch.toString();

  User user = User();
  user.username = "사용자 이름";
  user.email = "user@example.com";
  user.phone = "010-1234-5678";
  payload.user = user;

  Extra extra = Extra();
  extra.appScheme = 'bootpayFlutterExample';
  extra.subscribeTestPayment = payload.price != 0;  // 테스트 결제 여부
  payload.extra = extra;

  Bootpay().requestSubscription(
    context: context,
    payload: payload,
    showCloseButton: false,
    onCancel: (String data) { print('onCancel: $data'); },
    onError: (String data) { print('onError: $data'); },
    onClose: () { Bootpay().dismiss(context); },
    onDone: (String data) { print('onDone: $data'); },
  );
}

콜백 함수 설명

콜백 설명
onCancel 사용자가 결제를 취소한 경우
onError 결제 진행 중 에러 발생
onClose 결제창이 닫힐 때 (dismiss 호출 필요)
onIssued 가상계좌 발급 완료 시
onConfirm 결제 승인 전 확인 (true: 바로 승인, false: 수동 승인)
onDone 결제 완료

iOS 설정

Info.plist - 앱스킴 등록

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>bootpayFlutterExample</string>
    </array>
  </dict>
</array>

Info.plist - 외부 앱 실행 허용

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>itms-apps</string>
  <string>kakao</string>
  <string>kakaokompassauth</string>
  <string>kakaolink</string>
  <!-- 기타 필요한 앱스킴 -->
</array>

Android 설정

AndroidManifest.xml - 인터넷 권한

<uses-permission android:name="android.permission.INTERNET"/>

AndroidManifest.xml - 앱스킴 등록

<activity ...>
  <intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="bootpayFlutterExample"/>
  </intent-filter>
</activity>

웹 설정 (Web)

if (kIsWeb) {
  payload.extra?.openType = "popup";  // 또는 "iframe"
}

실행 방법

# 의존성 설치
flutter pub get

# Android
flutter run -d <android_device_id>

# iOS
cd ios && pod install && cd ..
flutter run -d <ios_device_id>

# Web
flutter run -d chrome

문서 및 지원

License

MIT License

About

bootpay flutter 라이브러리 공식 예제프로젝트 입니다

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors