관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS] 1. 애플페이 (Apply Pay) - 처리해야하는 전체 플로우 본문

iOS 응용 (swift)

[iOS] 1. 애플페이 (Apply Pay) - 처리해야하는 전체 플로우

jake-kim 2026. 5. 20. 01:15

애플페이 관련 목차

1. 애플페이 (Apply Pay) - 처리해야하는 전체 플로우
2. 애플페이 (Apply Pay) - 사전 설정 2단계 (앱 외적인 세팅)

3. 애플페이 (Apply Pay) - Xcode에 적용하기

4. 애플페이 (Apply Pay) - 앱에 적용하기


처리해야하는 전체 플로우 

1단계: Apple Developer 인프라 설정

Apple Pay 결제 데이터의 암호화 키체인을 구성하는 단계

  • Merchant ID (판매자 식별자) 생성: 우리 앱이 Apple Pay 시스템에서 결제를 요청할 수 있는 고유한 상점 ID(merchant.com.domain...)를 등록하는 과정
  • Payment Processing Certificate (결제 처리 인증서) 생성: 사용자가 페이스 ID 등으로 인증하면 Apple 서버는 결제 정보를 암호화. 이때 암호화에 사용되는 공개키(Public Key)를 Apple에 등록하고, 이를 복호화할 수 있는 개인키(Private Key) 쌍을 만드는 과정

2단계: 결제 대행사(PG) 연동 및 환경 설정

Apple Pay 결제 데이터를 복호화하고 실제 원화(KRW) 결제 승인을 처리할 PG사 연동 단계

  • PG사 선정 및 계약: 토스페이먼츠, 포트원, NHN KCP, KG이니시스 등 Apple Pay 지원 국내 PG사 선택 및 가맹 계약 진행
  • 인증서 업로드: 1단계에서 생성한 Payment Processing Certificate(.cer 파일)를 PG사 상점 관리자 콘솔에 등록
  • 💡 등록 이유: Apple 서버가 암호화하여 앱으로 전송한 결제 데이터(Token)를 PG사가 복호화할 수 있도록 권한을 위임하는 작업

3단계: Xcode 프로젝트 개발 환경 설정

생성한 Merchant ID를 Xcode 프로젝트와 동기화하여 앱에 Apple Pay 권한을 부여하는 단계

  • Apple Pay Capability 추가: Xcode 프로젝트의 Signing & Capabilities 탭에서 + Capability 버튼을 통해 Apple Pay 기능 추가
  • Merchant ID 매핑: 추가된 Apple Pay 섹션의 새로고침(🔄) 버튼을 클릭하여 생성해 둔 ID를 동기화하고 해당 체크박스 선택
    • 완료 시 프로젝트 내 [프로젝트명].entitlements 파일이 자동 생성/업데이트되며 Apple Pay 권한이 명시됨

4단계: 앱 내 결제 로직 구현 (코드 작성)

사용자 결제 버튼 클릭부터 Apple Pay 시트 인증 및 최종 결제 완료까지의 클라이언트 코드 구현 단계 (PassKit 프레임워크 활용)

  • PG사 iOS SDK 설치: SPM 또는 CocoaPods를 통해 선택한 PG사의 최신 iOS SDK를 프로젝트에 추가
  • Apple Pay 전용 버튼 배치: Apple 디자인 가이드라인을 준수하는 내장 이니셜라이저 기반의 PKPaymentButton을 UI에 배치
  • 결제 요청서(PKPaymentRequest) 정의: Merchant ID, 국가 코드(KR), 통화 코드(KRW), 지원 카드 브랜드 목록 지정 및 결제 금액 목록(PKPaymentSummaryItem) 구성 (배열의 마지막 아이템이 최종 결제 총액)
  • 결제 시트 표시 및 델리게이트 구현: PKPaymentAuthorizationController를 통해 화면 하단에 Apple Pay 결제 시트 노출 및 사용자 인증 처리
  • 토큰 추출 및 PG사 전달: didAuthorizePayment 콜백 메서드로 전달된 PKPayment 객체에서 암호화된 결제 데이터(payment.token.paymentData)를 추출하여 PG사 결제 승인 API로 전송
  • 결제 결과 처리: PG사 서버의 최종 결제 승인 결과에 따라 Apple Pay 시트에 성공/실패 애니메이션을 표시하고 시트 종료(dismiss)
Comments