Notice
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags more
관리 메뉴

MyWorld

[Android : Java] PG결제 시스템 부트페이API 본문

Android 앱 개발 (Java)

[Android : Java] PG결제 시스템 부트페이API

vBest 2021. 6. 3. 00:53

#1 BootPay 사용하기

https://www.bootpay.co.kr/

 

무료 결제 연동 API 서비스

개발자를 위한 PG 연동 서비스로, 빠른 결제 연동, 더 높은 결제성공율, 무료 통계 서비스를 제공합니다.

www.bootpay.co.kr

위 사이트는 무료 결제 연동 서비스를 제공한다. 나에겐  너무 유용한 사이트였다.

 

먼저 회원가입을 해준다. 그다음 결제를 위한 프로젝트를 만든다.

프로젝트 생성

그다음 인증키 및 보안을 눌러 안드로이드를 선택하고 Android Application ID를 복사한다.

*API를 사용하기 위해서는 키 발급이 필수적이다

인증키 발급
어플리케이션 아이디 복사

이제 부트 페이에서 제공하는 개발자 가이드 문서를 보고 따라 하면 된다. Java 외에 Kotlin 코드도 제공한다. 

 

#2 API로 연동하기 

연동하기는 생각보다는 간단했다. 처음엔 다른 블로그 글들을 보며 했는데  개발자 가이드 문서가 더 보기엔 편했다.

다음 과정을 순서대로 진행해주었다.

 

1. build.gradle(Project)

buildscript {
    repositories {
        ...
    }
    dependencies {
        ...
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' // 비공식 해결 방법, gradle build error 가 발생시에만 추가
    }
}
allprojects {
    repositories {
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}

2. build.gradle(module)

dependencies {
    ...
    implementation 'com.github.bootpay:client_android_java:3.3.91'
}

3. manifest.xml(module)

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

4. 결제창을 띄우는 코드

해당 코드에서 PG와 결제수단을 선택하여 작성할 수 있다.

코드의 " [ Android SDK용 Application ID ] "에 위에서 받아온 Android Application ID을 입력해주어야 한다. (따옴표 안에!)  

public class MainActivity extends AppCompatActivity {
    private int stuck = 10;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 초기설정 - 해당 프로젝트(안드로이드)의 application id 값을 설정합니다. 결제와 통계를 위해 꼭 필요합니다.
        BootpayAnalytics.init(this, "[ Android SDK용 Application ID ]");
    }

    public void onClick_request(View v) {
        // 결제호출
        BootUser bootUser = new BootUser().setPhone("010-1234-5678");
        BootExtra bootExtra = new BootExtra().setQuotas(new int[] {0,2,3});

        Bootpay.init(getFragmentManager())
                .setApplicationId([ Android SDK용 Application ID ]) // 해당 프로젝트(안드로이드)의 application id 값
                .setPG(PG.) // 결제할 PG 사
                .setMethod(Method.) // 결제수단
                .setContext(this)
                .setBootUser(bootUser)
                .setBootExtra(bootExtra)
                .setUX(UX.PG_DIALOG)
//                .setUserPhone("010-1234-5678") // 구매자 전화번호
                .setName("맥북프로's 임다") // 결제할 상품명
                .setOrderId("1234") // 결제 고유번호expire_month
                .setPrice(10000) // 결제할 금액
                .addItem("마우's 스", 1, "ITEM_CODE_MOUSE", 100) // 주문정보에 담길 상품정보, 통계를 위해 사용
                .addItem("키보드", 1, "ITEM_CODE_KEYBOARD", 200, "패션", "여성상의", "블라우스") // 주문정보에 담길 상품정보, 통계를 위해 사용
                .onConfirm(new ConfirmListener() { // 결제가 진행되기 바로 직전 호출되는 함수로, 주로 재고처리 등의 로직이 수행
                    @Override
                    public void onConfirm(@Nullable String message) {

                        if (0 < stuck) Bootpay.confirm(message); // 재고가 있을 경우.
                        else Bootpay.removePaymentWindow(); // 재고가 없어 중간에 결제창을 닫고 싶을 경우
                        Log.d("confirm", message);
                    }
                })
                .onDone(new DoneListener() { // 결제완료시 호출, 아이템 지급 등 데이터 동기화 로직을 수행합니다
                    @Override
                    public void onDone(@Nullable String message) {
                        Log.d("done", message);
                    }
                })
                .onReady(new ReadyListener() { // 가상계좌 입금 계좌번호가 발급되면 호출되는 함수입니다.
                    @Override
                    public void onReady(@Nullable String message) {
                        Log.d("ready", message);
                    }
                })
                .onCancel(new CancelListener() { // 결제 취소시 호출
                    @Override
                    public void onCancel(@Nullable String message) {

                        Log.d("cancel", message);
                    }
                })
                .onError(new ErrorListener() { // 에러가 났을때 호출되는 부분
                    @Override
                    public void onError(@Nullable String message) {
                        Log.d("error", message);
                    }
                })
                .onClose(
                        new CloseListener() { //결제창이 닫힐때 실행되는 부분
                    @Override
                    public void onClose(String message) {
                        Log.d("close", "close");
                    }
                })
                .request();
    }
}

Bootpay.init 에서 setPG(PG. 결제사) , setMethod(Method. 결제 수단) 부분은

BootPay 관리자 페이지에서 원하는 PG사와 결제 수단을 활성화해주고 사용하면 된다. 

( 코드의 주석과 개발 문서에서 함수들의 역할을 알아볼 수 있다 )

 

나는 결제수단을 활성화해주는 부분을 몰라서 1시간이나 고민했었다.

다음은 결제 수단을 활성화하는 방법이다. 

부트 페이에서 생성했던 프로젝트에서 결제 수단 활성화로 들어간다.

결제 수단 활성화

나는 PG는 KG 이니시스를 선택했다.. setPG(PG.INICIS)

PG

결제 수단은 전체를 선택했는데 코드에 사용할 것만 활성화해도 될 것이다.. setMethod(Method.CARD)

Method

아래 이미지처럼 사용할 결제 수단을 '활성화' 한다. 나는 실 결제 모드는 사용하지 않고 테스트 개발 모드로 진행했다.

테스트 결제 모드

 

테스트 모드에서도 실 결제가 되기에 결제 후 관리자 페이지에서 결제를 취소해주어야 한다.

아래는 테스트 모드에서 실 결제된 것을 관리자 페이지에서 취소하는 방법이다.

테스트 결제 취소하는 법

 

실 결제 모드로 하려면 3번에 PG가맹 정보까지 입력해주어야 한다.

이렇게 하면 결제된 금액이 PG사에서 정산되어 들어오는 식인 것 같다. 

실결제 모드

 

다음은 테스트 결제 모드로 만들어 본 결과물이다.

결제하기 버튼을 누르면 금액과 상품 정보가 넘어가고 선택한 PG의  결제 방법들이 뜬다. 

결과 예시

 

~끝~