Android
라이브러리 적용
최소 요구사항
- minSdk 21
Plain Text
복사
build.gradle(project)
allprojects {
repositories {
...
mavenCentral()
maven { url "https://jitpack.io" }
}
}
Groovy
복사
build.gradle(app)
dependencies {
implementation 'com.github.tosspayments:payment-sdk-android:0.1.0'
}
Groovy
복사
PaymentMethodWidget 적용
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/white">
...
<com.tosspayments.paymentsdk.view.PaymentMethodWidget
android:id="@+id/payment_widget"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp" />
...
</androidx.constraintlayout.widget.ConstraintLayout>
XML
복사
class MainActivity : AppCompatActivity() {
private val paymentWidget = PaymentWidget(CLIENT_KEY, CUSTOMER_KEY)
private val tossPaymentActivityResult: ActivityResultLauncher<Intent> =
PaymentWidget.getPaymentResultLauncher(
this@MainActivity,
{ success: TossPaymentResult.Success ->
handlePaymentSuccessResult(success)
},
{ fail: TossPaymentResult.Fail ->
handlePaymentFailResult(fail)
})
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initViews()
...
}
private fun initViews() {
// 결제 위젯 설정
val methodWidget = findViewById<PaymentMethodWidget>(R.id.payment_widget)
paymentWidget.setMethodWidget(methodWidget)
...
}
// payment widget 렌더링 요청
private fun renderMethodWidget(amount: Long) {
paymentWidget.renderPaymentMethodWidget(amount)
}
// 결제 요청
private fun requestPayment(orderId: String, orderName : String, customerEmail: String?,
customerName: String?) {
paymentWidget.requestPayment(
paymentResultLauncher = tossPaymentActivityResult,
orderId = orderId,
orderName = orderName,
customerEmail = customerEmail,
customerName = customerName
)
}
private fun handlePaymentSuccessResult(success: TossPaymentResult.Success) {
// 결제 성공 처리
}
private fun handlePaymentFailResult(fail: TossPaymentResult.Fail) {
// 결제 실패 처리
}
}
Kotlin
복사
주요 클래스
PaymentWidget:<class>
public void | PaymentWidget(String clientKey, String customerKey) |
public void | setMethodWidget(PaymentMethodWidget methodWidget) |
public void | renderPaymentMethodWidget(long amount) |
public void | renderPaymentMethodWidget(float amount) |
public void | requestPayment(ActivityResultLauncher<Intent> paymentResultLauncher, String orderId, String orderName, String customerEmail(optional), String customerName(optional)) |
TossPaymentResult : <sealed class>
TossPaymentResult.Success : <TossPaymentResult>
속성 | 타입 | 필수 | 설명 |
paymentKey | String | Y | 결제 식별자 |
orderId | String | Y | 주문 식별자 |
amount | Long | Y | 결제 금액 |
TossPaymentResult.Fail : <TossPaymentResult>
속성 | 타입 | 필수 | 설명 |
errorCode | String | Y | 결제 실패코드 |
errorMessage | String | Y | 결제 실패메세지 |
orderId | String | Y | 주문 식별자 |
iOS
라이브러리 적용
최소 요구사항
iOS 11, Swift 5
Swift
복사
cocoapods
pod 'TossPayments'
Groovy
복사
Swift package manager
.package(url: "https://github.com/tosspayments/payment-sdk-ios.git", from: "0.1.0")
Groovy
복사
PaymentMethodWidget 적용
import UIKit
import WebKit
import TossPayments
public final class PaymentWidgetViewController: ViewController {
private lazy var widget: PaymentWidget = PaymentWidget(clientKey: Environment.clientKey)
public override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(widget)
widget.amount = 1000
widget.delegate = self
widget.widgetUIDelegate = self
requestPayments()
}
// 결제 요청
@objc func requestPayments() {
widget.requestPayments(
info: DefaultPaymentInfo(
amount: 1000,
orderId: "주문번호:1234567",
orderName: "테스트 결제"
),
on: self
)
}
}
extension PaymentWidgetViewController: TossPaymentsDelegate {
public func handlePaymentSuccessResult(_ success: TossPaymentsResult.Success) {
// 결제 성공 처리
}
public func handlePaymentFailResult(_ fail: TossPaymentsResult.Fail) {
// 결제 실패 처리
}
}
extension PaymentWidgetViewController: TossPaymentsWidgetUIDelegate {
public func didUpdateHeight(_ widget: PaymentWidget, height: CGFloat) {
// 높이 처리
}
}
Swift
복사
주요 클래스
class PaymentWidget: WKWebView
•
결제 수단을 선택할 수 있는 위젯 View
public | PaymentWidget(clientKey: String) |
public | weak var delegate: TossPaymentsDelegate? |
public | weak var widgetUIDelegate: TossPaymentsWidgetUIDelegate? |
public | var amount: Double |
public | func requestPayments(info: PaymentInfo, on rootViewController: UIViewController) |
protocol TossPaymentsDelegate
•
requestPayments로 호출한 결제 결과를 알려주는 delegate
public | func handlePaymentSuccessResult(_ success: TossPaymentsResult.Success) |
public | func handlePaymentFailResult(_ fail: TossPaymentsResult.Fail) |
protocol TossPaymentsWidgetUIDelegate
•
PaymentWidget View 의 상태 변화를 알려주는 delegate
public | func didUpdateHeight(_ widget: PaymentWidget, height: CGFloat) |
protocol PaymentInfo: Codable
•
결제 요청에 필요한 정보 객체
public | var amount: Double |
public | var orderId: String |
public | var orderName: String |
public | var customerName: String? |
public | var customerEmail: String? |
public | var taxFreeAmount: Double? |
struct DefaultPaymentInfo: PaymentInfo
•
PaymentInfo protocol 을 따르는 대표 객체
•
TransferPaymentInfo, CardPaymentInfo, VirtualAccountPaymentInfo, MobilePhonePaymentInfo, GiftCertificatePaymentInfo 등등 제공
•
추가 parameter가 필요한 경우 직접 PaymentInfo protocol 을 구현한 객체를 선언해서 사용할수도 있음
enum TossPaymentResult:
struct TossPaymentResult.Success
속성 | 타입 | 필수 | 설명 |
paymentKey | String | Y | 결제 식별자 |
orderId | String | Y | 주문 식별자 |
amount | Double | Y | 결제 금액 |
struct TossPaymentResult.Fail
속성 | 타입 | 필수 | 설명 |
errorCode | String | Y | 결제 실패코드 |
errorMessage | String | Y | 결제 실패메세지 |
orderId | String | Y | 주문 식별자 |

