호스티드 체크아웃
결제 검증
접근 권한을 부여하기 전에 백엔드에서 결제 완료를 확인합니다.
결제 검증 응답이 이행 완료의 기준입니다. 브라우저 리디렉션과 팝업 메시지는 의도적으로 신뢰하지 않는 힌트로 취급합니다.
#백엔드에서 검증
GET
/api/v2/checkout-sessions/{sessionId}/verify/세션 생성 시 반환된 서버 전용 검증 키로 인증합니다. 상품 소유자는 판매자 JWT로도 호출할 수 있습니다.
curl https://app.rantan.xyz/api/v2/checkout-sessions/$SESSION_ID/verify/ \
-H "X-Rantan-Checkout-Verification-Key: $CHECKOUT_VERIFICATION_KEY"#검증 응답
세션 상태와 연결된 구매 상태를 함께 반환합니다. 열려 있거나 만료된 세션은 completed=false입니다.
{
"checkout_session_id": "c8a9d48e-68b2-48dd-a754-75635cae71d6",
"client_reference_id": "order_20260730_001",
"product_id": 123,
"purchase_id": "bfaf2aa4-dd86-4356-92db-ae0431806867",
"purchase_status": "completed",
"completed": true,
"buyer_wallet_address": "0x1234...abcd",
"quantity": 1,
"currency": "USDC",
"total_amount": "12.50000000",
"amount_atomic": "12500000",
"completed_at": "2026-07-30T09:04:32Z",
"error_message": "",
"session_status": "completed",
"canceled_at": null,
"expires_at": "2026-07-30T09:30:00Z"
}#이행 완료 체크리스트
- 1완료된 구매 확인
completed가 true이고 purchase_status가 completed인지 확인합니다.
- 2자체 주문과 비교
client_reference_id, product_id, 수량, 통화, 예상 금액을 저장된 주문과 비교합니다.
- 3한 번만 소비
권한 부여나 배송 전에 purchase_id를 고유 제약조건과 함께 저장합니다.
- 4검증 근거 기록
checkout_session_id, purchase_id, completed_at, 검증 금액을 주문에 기록합니다.
#반환 URL 힌트
RANTAN은 설정된 return_url에 rantan_checkout_session_id, rantan_purchase_id, rantan_purchase_status를 추가합니다.
#안전한 재시도
검증은 읽기 전용이므로 재시도할 수 있습니다. purchase_id를 기준으로 판매자 이행 처리를 멱등하게 만들어 반복 콜백이 권한, 배송, 크레딧을 중복 생성하지 않도록 하세요.