flutter

bootpay flutter 결제 연동

이나주니 2025. 1. 3. 11:20
반응형

순서

개발 진행 -> PG 심사 -> 카드사 심사(2주~3주소요)

 

참고로 개발을 하다 중단이 된 상태다

 

이유 : 기부 목적으로 기능을 만듬, 비영리 단체가 아닌이상 기부 서비스 심사가 거절됨 (기부영수증 발행이 가능해야함)

카드사에서 배네핏을 보고 심사를해줌 (실물 상품) - 멤버십도 어려울수 있음

 

그렇게 인앱 결제로 전환 하기로함

 

일단 개발까지 한것만 기록하려고 함

 

회원가입

 

 

 

PG사 선택

 

참고로 나이스 페이를 신청시 카카오가 안되기 때문에 카카로 따로 신청해야함

화면에서는 카카오페이가 지원되는것으로 보이지만 사실은 아닌듯 (상담사가 따로 신청하라고함)

 

void bootpayTest(BuildContext context) {
    Payload payload = getPayload();
    if (kIsWeb) {
      payload.extra?.openType = "iframe";
    }

    Bootpay().requestSubscription(
      context: context,
      payload: payload,
      showCloseButton: false,
      onCancel: (String data) {
        print('------- onCancel: $data');
      },
      onError: (String data) {
        print('------- onCancel: $data');
      },
      onClose: () {
        print('------- onClose');
        Bootpay().dismiss(context); //명시적으로 부트페이 뷰 종료 호출
        //TODO - 원하시는 라우터로 페이지 이동
      },
      onIssued: (String data) {
        print('------- onIssued: $data');
      },
      onConfirm: (String data) {
        /**
            1. 바로 승인하고자 할 때
            return true;
         **/
        /***
            2. 비동기 승인 하고자 할 때
            checkQtyFromServer(data);
            return false;
         ***/
        /***
            3. 서버승인을 하고자 하실 때 (클라이언트 승인 X)
            return false; 후에 서버에서 결제승인 수행
         */
        // checkQtyFromServer(data);
        return true;
      },
      onDone: (String data) {
        print('------- onDone: $data');
      },
    );
  }

  Payload getPayload() {
    Payload payload = Payload();
    Item item1 = Item();
    item1.name = "후원"; // 주문정보에 담길 상품명
    item1.qty = 1; // 해당 상품의 주문 수량
    item1.id = "donation"; // 해당 상품의 고유 키
    item1.price = 500; // 상품의 가격

    Item item2 = Item();
    item2.name = "키보드"; // 주문정보에 담길 상품명
    item2.qty = 1; // 해당 상품의 주문 수량
    item2.id = "ITEM_CODE_KEYBOARD"; // 해당 상품의 고유 키
    item2.price = 500; // 상품의 가격
    List<Item> itemList = [item1, item2];
    
    payload.androidApplicationId = '67763....'; // android application id
    payload.iosApplicationId = '677....'; // ios application id


    payload.pg = 'nicepay';
    payload.methods = ['card', 'phone', 'vbank', 'bank', 'kakao'];
    payload.orderName = "후원"; //결제할 상품명
    
    payload.orderId = DateTime.now().millisecondsSinceEpoch.toString(); 

    payload.metadata = {
      "callbackParam1": "value12",
      "callbackParam2": "value34",
      "callbackParam3": "value56",
      "callbackParam4": "value78",
    }; // 전달할 파라미터, 결제 후 되돌려 주는 값
    
    payload.items = itemList; // 상품정보 배열

    User user = User(); // 구매자 정보
    user.username = "사용자 이름";
    user.email = "user@gmail.com";

    Extra extra = Extra(); // 결제 옵션
    extra.appScheme = 'FlutterExample';
    extra.cardQuota = '3';
    // extra.openType = 'popup';

    payload.user = user;
    payload.extra = extra;
    return payload;
  }

 

반응형