상세 컨텐츠

본문 제목

[애플월렛 패스] 참가증, 쿠폰, 티켓같은 패스 서버 API 호출로 생성하기- 구조 작성

iOS 캐기/토이 프로젝트

by Atlas 2024. 8. 12. 18:35

본문

728x90
반응형

시나리오:  저번 포스팅에서 서버를 만들어봤습니다. 이번에는 API 호출을 통해서 패스를 만들어보도록 하겠습니다.

 

2023.11.17 - [iOS 캐기/토이 프로젝트] - [애플월렛 패스] 참가증, 쿠폰, 티켓 같은 패스 만들어 애플월렛에 넣어보기

2024.08.12 - [iOS 캐기/토이 프로젝트] - [애플월렛 패스] 참가증, 쿠폰, 티켓같은 패스 서버 API 호출로 생성하기- 개발환경 세팅

 

 

*Required

https://github.com/twopointone/applepassgenerator

파이썬 라이브러리로 제공 중인 applepassgenerator를 사용하여 구현했습니다. 

 

 

이 코드는 FastAPI 웹 애플리케이션을 사용하여 Apple Wallet에서 사용할 수 있는 디지털 패스(예: 이벤트 티켓)를 생성하는 서버 애플리케이션입니다. 그럼 코드의 각 부분에 대한 설명을 시작하겠습니다.

 

1.  라이브러리 및 모듈 임포트

from applepassgenerator.client import ApplePassGeneratorClient
from fastapi import FastAPI, HTTPException
from fastapi.responses import FileResponse
from applepassgenerator.models import EventTicket
import subprocess
import os
import logging

from cryptography.hazmat.primitives.serialization import pkcs12
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend


- FastAPI: FastAPI는 빠르고 효율적인 웹 프레임워크로, 이 코드는 API 서버를 만드는데 사용됩니다.
- subprocess: 외부 프로그램(예: OpenSSL)을 실행하는 데 사용됩니다.
- os: 파일 경로 및 파일 작업에 사용됩니다.
- logging: 로그를 기록하는 데 사용됩니다.
- cryptography.hazmat: 인증서와 개인 키를 다루는 데 사용됩니다.
- applepassgenerator: Apple Wallet 패스를 생성하는 데 필요한 라이브러리입니다.

2. 애플리케이션 및 설정 파일

app = FastAPI()

CERTIFICATE_P12 = "certificate.p12"
CERTIFICATE_PEM = "certificate.pem"
PRIVATE_KEY_PEM = "privatekey_encrypted.pem"
WWDR_PEM = "WWDR.pem"
WWDR_CER = "WWDR.cer"
CERTIFICATE_PASSWORD = "{#CERTIFICATE_PASSWORD}"
OUTPUT_PASS_NAME = "atlas_demo.pkpass"

LOGO_FILE = "logo.png"
ICON_FILE = "icon.png"
BACKGROUND_FILE = "background.png"
THUMBNAIL_FILE = "thumbnail.png"


- 이 부분은 FastAPI 애플리케이션을 초기화하고, 필요한 파일 경로 및 설정 값을 정의합니다.
- CERTIFICATE_P12: 인증서가 포함된 P12 파일 경로.
- LOGO_FILE, ICON_FILE 등은 패스에 사용될 이미지 파일 경로를 정의합니다.

 

3. 로그 설정

logging.basicConfig(level=logging.DEBUG)


- 이 부분은 로그의 기록 수준을 설정합니다. `DEBUG` 수준으로 설정되어 있어, 자세한 로그를 기록합니다.

 

4. OpenSSL을 사용한 CER -> PEM 변환 함수

def convert_cer_to_pem(cer_path, pem_path):
    ...


- CER 형식의 인증서를 PEM 형식으로 변환하는 함수입니다. OpenSSL을 사용하여 변환합니다.

 

5. P12에서 인증서 및 키 추출 함수

def extract_certificate_and_key(p12_path, cert_out_path, key_out_path, password):
    ...


- P12 파일에서 인증서와 개인 키를 추출하여 PEM 형식으로 저장합니다.

 

6. 패스 생성 엔드포인트

@app.get("/generate_pass")
async def generate_pass():
    ...


- /generate_pass 경로로 접근하면, Apple Wallet 패스를 생성합니다.
- 패스에 표시될 정보(예: `EventTicket`)를 설정하고, Apple Pass에 필요한 데이터를 추가합니다.
- 인증서와 키 파일을 추출하고, 필요한 이미지 파일을 확인한 후, 최종적으로 Apple Pass 파일(`.pkpass`)을 생성합니다.
- 생성된 패스 파일을 클라이언트에게 반환합니다.

 

 

메인 로직은 다음 포스팅에서 확인할 수 있습니다. 

 

 

 

 

 

ref.

 

https://github.com/twopointone/applepassgenerator

 

GitHub - twopointone/applepassgenerator: Python library to generate passes i.e (.pkpass) files compatible with Apple Wallet

Python library to generate passes i.e (.pkpass) files compatible with Apple Wallet - GitHub - twopointone/applepassgenerator: Python library to generate passes i.e (.pkpass) files compatible with ...

github.com

 

 

반응형

관련글 더보기

댓글 영역