관리 메뉴

나만을 위한 블로그

[Android] 안드로이드 KG이니시스 결제 연동하는 법 본문

Android

[Android] 안드로이드 KG이니시스 결제 연동하는 법

참깨빵위에참깨빵_ 2020. 6. 24. 18:12
728x90
반응형

※ 20.06.24에 에러 없이 작동하는 걸 확인한 후 올리는 코드임

 

1. 매니페스트에 권한 설정

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

 

2. 앱 수준 gradle에 의존성 추가

implementation 'com.github.bootpay:client_android_java:3.2.47'

 

3. 프로젝트 수준 gradle에 의존성과 리포지토리 추가

dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' <- 이 부분을 추가한다
        

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' } <- 이 부분을 추가한다
        
    }
}

 

4. 레이아웃 xml 설정. 테스트니까 버튼 하나만 뒀다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="결제"
        android:textSize="30sp"/>

</LinearLayout>

 

5. MainActivity.java 소스코드

이 코드를 보기 전에 들어가야 할 사이트가 있다. 키를 하나 받아야 하는데 이게 없으면 결제고 나발이고 안된다.

 

https://www.bootpay.co.kr

 

무료 결제 연동 API 서비스

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

www.bootpay.co.kr

 

이 사이트에 회원가입 후 로그인한 다음 IP 및 인증키 관리 페이지에서 Android를 누르고 Android Application ID 텍스트의 아래 회색 부분을 누른다.

구글링 후 나오는 게시글들을 보면 application id라고만 써놨길래 안드로이드 스튜디오에서 확인하는 건줄 알았는데 그게 아니라 이 사이트에서 확인하는 거다.

확인하는 경로는 여기다.

 

로그인 후 결제설치에서 인증키 및 보안 클릭

저걸 누르면 아래의 화면이 나온다. 회색 부분을 클릭하면 지가 알아서 클립보드에 복사되니 이 키는 메모장에 잠깐 붙여넣기하자.

 

검은색으로 가린 부분을 클릭하면 클립보드에 자동으로 복사됐다는 알림 메시지가 뜬다.

 

그 다음 아래 소스코드에서 '웹에서 확인한 id' 부분에 복사한 키를 붙여넣는다.

당연한 거지만 "" 안에 넣어야 한다.

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import kr.co.bootpay.Bootpay;
import kr.co.bootpay.BootpayAnalytics;
import kr.co.bootpay.enums.Method;
import kr.co.bootpay.enums.PG;
import kr.co.bootpay.enums.UX;
import kr.co.bootpay.listener.CancelListener;
import kr.co.bootpay.listener.CloseListener;
import kr.co.bootpay.listener.ConfirmListener;
import kr.co.bootpay.listener.DoneListener;
import kr.co.bootpay.listener.ReadyListener;
import kr.co.bootpay.model.BootExtra;
import kr.co.bootpay.model.BootUser;

public class MainActivity extends AppCompatActivity {

    Button button;
    private int stuck = 10;

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

        // 초기설정 - 해당 프로젝트(안드로이드)의 application id 값을 설정합니다. 결제와 통계를 위해 꼭 필요합니다.
        // 앱에서 확인하지 말고 꼭 웹 사이트에서 확인하자. 앱의 application id 갖다 쓰면 안됨!!!
        BootpayAnalytics.init(this, "웹에서 확인한 application id 값 복붙");

        button = findViewById(R.id.test);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                BootUser bootUser = new BootUser().setPhone("010-1234-5678"); // !! 자신의 핸드폰 번호로 바꾸기
                BootExtra bootExtra = new BootExtra().setQuotas(new int[] {0, 2, 3});

                Bootpay.init(getFragmentManager())
                        .setApplicationId("웹에서 확인한 application id 값 복붙") // 해당 프로젝트(안드로이드)의 application id 값(위의 값 복붙)
                .setPG(PG.INICIS) // 결제할 PG 사
                    .setMethod(Method.CARD) // 결제수단
                    .setContext(MainActivity.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);
                        }
                    })
                    .onClose(
                            new CloseListener() { //결제창이 닫힐때 실행되는 부분
                                @Override
                                public void onClose(String message) {
                                    Log.d("close", "close");
                                }
                            })
                    .request();
            }
        });
    }
}

 

이것 말고도 여러 결제 모듈과 결제 수단이 존재하는데 다른 걸 쓰고 싶다면 이 사이트를 참조. 기본적인 의존성과 매니페스트 설정 및 각 경우별 소스코드, 소스코드에서 사용하는 요청 파라메터에 대해 친절하게 설명돼 있다.

 

값들을 자신에 맞게 바꾼 후 앱을 빌드하면 아래처럼 작동한다.

 

취소나 백버튼을 누르면 정말 미련없이 깔끔하게 결제창이 사라지는 걸 볼 수 있다.

자바 소스코드에서 입력한 핸드폰 번호의 단말에서 모듈이 떠오르는 걸 볼 수 있고 소스코드에 적힌대로 금액, 상품명이 나오는 걸 볼 수 있다.

저 안에 들어갈 정보는 인텐트를 통해 값을 넘겨서 받아오든가 쉐어드에서 저장된 값을 getXXX()으로 빼오던가 해서 자신에 맞게 바꿔 넣으면 될 것이다.

반응형
Comments