안드로이드 클라이언트 환경에서 포트원 V2 결제 시스템에 연동하기 위한 SDK입니다.
프로젝트의 그래들 혹은 메이븐 설정을 아래와 같이 설정하세요.
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
mavenCentral()
maven {
url = uri("https://jitpack.io")
}
}
}
// build.gradle.kts
dependencies {
implementation("com.github.portone-io:android-sdk:x.y.z")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:x.y.z") // java 8 API를 사용하기 위해, desugaring 의존성을 추가해주셔야 합니다.
}
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<dependency>
<groupId>com.github.portone-io</groupId>
<artifactId>android-sdk</artifactId>
<version>x.y.z</version>
</dependency>
</repositories>카드, 간편결제사 앱을 실행 하기 위해 다음 앱 스킴 목록을 AndroidManifest.xml에 추가해주세요.
<queries>
<!-- 간편결제 -->
<package android:name="com.kftc.bankpay.android" /> <!-- 뱅크페이 -->
<package android:name="com.nhnent.payapp" /> <!-- 페이코 -->
<package android:name="com.lottemembers.android" /> <!-- LPAY -->
<package android:name="com.ssg.serviceapp.android.egiftcertificate" /> <!-- SSGPAY -->
<package android:name="com.inicis.kpay" /> <!-- KPAY -->
<package android:name="com.tmoney.tmpay" /> <!-- 티머니페이 -->
<package android:name="viva.republica.toss" /> <!-- 토스페이 -->
<package android:name="com.samsung.android.spay" /> <!-- 삼성페이 -->
<package android:name="com.kakao.talk" /> <!-- 카카오페이 -->
<package android:name="com.nhn.android.search" /> <!-- 네이버 -->
<package android:name="com.mysmilepay.app" /> <!-- 스마일페이 -->
<!-- 카드 -->
<package android:name="kvp.jjy.MispAndroid320" /> <!-- ISP페이북 -->
<package android:name="com.kbcard.cxh.appcard" /> <!-- KBPay -->
<package android:name="com.kbstar.reboot" /> <!-- liiv -->
<package android:name="com.kbstar.kbbank" /> <!-- liiv -->
<package android:name="com.samsung.android.spaylite" /> <!-- 삼성페이니 -->
<package android:name="com.nhnent.payapp" /> <!-- 페이코 -->
<package android:name="com.lge.lgpay" /> <!-- 엘지페이 -->
<package android:name="com.hanaskcard.paycla" /> <!-- 하나 -->
<package android:name="kr.co.hanamembers.hmscustomer" /> <!-- 하나멤버스 -->
<package android:name="com.hanaskcard.rocomo.potal" /> <!-- 하나공인인증 -->
<package android:name="kr.co.citibank.citimobile" /> <!-- 씨티모바일 -->
<package android:name="com.lcacApp" /> <!-- 롯데 -->
<package android:name="kr.co.samsungcard.mpocket" /> <!-- 삼성 -->
<package android:name="com.shcard.smartpay" /> <!-- 신한 -->
<package android:name="com.shinhancard.smartshinhan" /> <!-- 신한(ARS/일반/smart) -->
<package android:name="com.shinhan.smartcaremgr" /> <!-- 신한 SOL -->
<package android:name="com.hyundaicard.appcard" /> <!-- 현대 -->
<package android:name="nh.smart.nhallonepay" /> <!-- 농협 -->
<package android:name="nh.smart.card" /> <!-- 농협 -->
<package android:name="net.ib.android.smcard" /> <!-- 삼성 모니모 -->
<package android:name="kr.co.citibank.citimobile" /> <!-- 씨티 -->
<package android:name="com.wooricard.smartapp" /> <!-- 우리WON카드 -->
<package android:name="com.wooribank.smart.npib" /> <!-- 우리WON뱅킹 -->
<!-- 백신 -->
<package android:name="com.TouchEn.mVaccine.webs" /> <!-- TouchEn -->
<package android:name="com.ahnlab.v3mobileplus" /> <!-- V3 -->
<package android:name="kr.co.shiftworks.vguardweb" /> <!-- vguard -->
<!-- 신용카드 공인인증 -->
<package android:name="com.hanaskcard.rocomo.potal" /> <!-- 하나 -->
<package android:name="com.lumensoft.touchenappfree" /> <!-- 현대 -->
<!-- 계좌이체 -->
<package android:name="com.kftc.bankpay.android" /> <!-- 뱅크페이 -->
<package android:name="kr.co.kfcc.mobilebank" /> <!-- MG 새마을금고 -->
<package android:name="com.nh.cashcardapp" /> <!-- 뱅크페이 -->
<package android:name="com.knb.psb" /> <!-- BNK경남은행 -->
<package android:name="com.lguplus.paynow" /> <!-- 페이나우 -->
<package android:name="com.kbankwith.smartbank" /> <!-- 케이뱅크 -->
<!-- 해외결제 -->
<package android:name="com.eg.android.AlipayGphone" /> <!-- 페이나우 -->
<!-- 기타 -->
<package android:name="com.sktelecom.tauth" /> <!-- PASS -->
<package android:name="com.lguplus.smartotp" /> <!-- PASS -->
<package android:name="com.kt.ktauth" /> <!-- PASS -->
<package android:name="kr.danal.app.damoum" /> <!-- 다날 다모음 -->
<package android:name="com.shinhan.sbanking" /> <!-- 신한 SOL뱅크 -->
</queries>일반적인 플로우는 결제를 요청할 화면에서, registerForXXXXActivity() -> requestXXX를 호출하는 방식으로 이루어져 있습니다.
예) 일반 결제 요청 시, registerForPaymentActivity()로 결제 완료/실패 시 어떻게 처리할지 등록 -> 이후 requestPayment를 호출하여 결제 요청
결제 요청 시 필요한 자세한 파라미터에 대한 내용은 PaymentRequest.kt 파일에 기술되어 있습니다.
import io.portone.sdk.android.PortOne
import io.portone.sdk.android.payment.PaymentCallback
import io.portone.sdk.android.type.request.PaymentRequest
import io.portone.sdk.android.type.response.PaymentResponse
import io.portone.sdk.android.type.entity.Currency
import io.portone.sdk.android.type.entity.PaymentPayMethod
class MainActivity : AppCompatActivity() {
// 결제 완료/실패 이후 응답을 처리 하기 위한 ResultLauncher 생성
private val paymentActivityResultLauncher =
PortOne.registerForPaymentActivity(this, callback = object :
PaymentCallback {
override fun onSuccess(response: PaymentResponse) {
// code가 null이면 결제 성공
AlertDialog.Builder(this@MainActivity)
.setTitle("결제 성공")
.setMessage("결제 ID: ${response.paymentId}")
.show()
}
override fun onFail(response: PaymentResponse) {
// code가 null이 아니면 결제 실패
AlertDialog.Builder(this@MainActivity)
.setTitle("결제 실패")
.setMessage("오류 코드: ${response.code}\n오류 메시지: ${response.message}")
.show()
}
})
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
PortOne.requestPayment(
this,
request = PaymentRequest(
storeId = "상점 아이디",
paymentId = "결제 건 ID",
orderName = "주문 명",
channelKey = "채널 키",
totalAmount = 1000, // 결제 금액 (Long)
currency = Currency.KRW, // 화폐 단위
payMethod = PaymentPayMethod.CARD, // 결제수단 (enum)
),
resultLauncher = paymentActivityResultLauncher
)
빌링키 발급 시 필요한 자세한 파라미터에 대한 내용은 IssueBillingKeyRequest.kt 파일에 기술되어 있습니다.
import io.portone.sdk.android.PortOne
import io.portone.sdk.android.issuebillingkey.IssueBillingKeyCallback
import io.portone.sdk.android.type.request.IssueBillingKeyRequest
import io.portone.sdk.android.type.response.IssueBillingKeyResponse
import io.portone.sdk.android.type.entity.BillingKeyMethod
class MainActivity : AppCompatActivity() {
// 빌링키 발급 완료/실패 이후 응답을 처리 하기 위한 ResultLauncher 생성
private val issueBillingKeyActivityResultLauncher =
PortOne.registerForIssueBillingKeyActivity(this, callback = object :
IssueBillingKeyCallback {
override fun onSuccess(response: IssueBillingKeyResponse) {
// code가 null이면 빌링키 발급 성공
AlertDialog.Builder(this@MainActivity)
.setTitle("빌링키 발급 성공")
.setMessage("빌링키: ${response.billingKey}")
.show()
}
override fun onFail(response: IssueBillingKeyResponse) {
// code가 null이 아니면 빌링키 발급 실패
AlertDialog.Builder(this@MainActivity)
.setTitle("빌링키 발급 실패")
.setMessage("오류 코드: ${response.code}\n오류 메시지: ${response.message}")
.show()
}
})
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 빌링키 발급 요청 함수 호출, 호출 시 전달한 IssueBillingKeyRequest 정보로 발급을 요청하는 Activity를 생성합니다.
PortOne.requestIssueBillingKey(
this,
request = IssueBillingKeyRequest(
storeId = "상점 아이디",
channelKey = "채널 키",
billingKeyMethod = BillingKeyMethod.CARD // 빌링키 발급 수단 (enum)
),
resultLauncher = issueBillingKeyActivityResultLauncher
)
본인인증 시 필요한 자세한 파라미터에 대한 내용은 IdentityVerificationRequest.kt 파일에 기술되어 있습니다.
import io.portone.sdk.android.PortOne
import io.portone.sdk.android.identityverification.IdentityVerificationCallback
import io.portone.sdk.android.type.request.IdentityVerificationRequest
import io.portone.sdk.android.type.response.IdentityVerificationResponse
class MainActivity : AppCompatActivity() {
// 본인인증 완료/실패 이후 응답을 처리 하기 위한 ResultLauncher 생성
private val identityVerificationActivityResultLauncher =
PortOne.registerForIdentityVerificationActivity(this, callback = object :
IdentityVerificationCallback {
override fun onSuccess(response: IdentityVerificationResponse) {
// code가 null이면 본인인증 성공
AlertDialog.Builder(this@MainActivity)
.setTitle("본인인증 성공")
.setMessage("본인인증 ID: ${response.identityVerificationId}")
.show()
}
override fun onFail(response: IdentityVerificationResponse) {
// code가 null이 아니면 본인인증 실패
AlertDialog.Builder(this@MainActivity)
.setTitle("본인인증 실패")
.setMessage("오류 코드: ${response.code}\n오류 메시지: ${response.message}")
.show()
}
})
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 본인인증 함수 호출, 호출 시 전달한 IdentityVerificationRequest 정보로 본인인증을 요청하는 Activity를 생성합니다.
PortOne.requestIdentityVerification(
this,
request = IdentityVerificationRequest(
storeId = "상점 아이디",
identityVerificationId = "본인인증 요청 ID",
channelKey = "채널 키"
),
resultLauncher = identityVerificationActivityResultLauncher
)
모든 응답(PaymentResponse, IssueBillingKeyResponse, IdentityVerificationResponse)은 code 필드를 통해 성공/실패를 판단합니다.
code == null: 성공code != null: 실패 (오류 코드와 메시지 포함)
실패 시 응답에 포함되는 필드:
code: 오류 코드message: 오류 메시지pgCode: PG사에서 전달한 원본 오류 코드 (있는 경우)pgMessage: PG사에서 전달한 원본 오류 메시지 (있는 경우)
유의적 버전 2.0.0을 사용합니다.
현재 주(主) 버전은 0입니다. 이는 라이브러리 공개 API가 아직 고정되지 않았음을 의미합니다. 주 버전이 1이 되기 전에도 릴리스 버전(프리릴리스가 아닌 버전)의 SDK를 프로덕션에서 사용할 수 있으며, 포트원은 관련 기술 지원을 제공합니다.
- tech.support@portone.io 로 문의 부탁드립니다.