Rapid Lodging API 및 3DS 2.0을 이용한 테스트
API에서 지원하는 구체적인 시나리오를 통해 SCA 구현을 테스트해 보세요
Rapid Lodging API를 테스트하려면 HTTP 요청에 ‘ test ’라는 HTTP 헤더를 추가하고, 해당 API에서 지원하는 값 중 하나를 사용하여 지원되는 시나리오를 테스트하십시오.
강화된 고객 인증(SCA) 예약 흐름 내에서, Rapid API 에서 반환되는 테스트 응답을 사용하여 3D-Secure(3DS) 커넥터 라이브러리 메서드를 테스트할 수도 있습니다.
결제 등록
다음 테스트 헤더 값은 API 응답과 다른 HTTP 응답 코드에서 상이한 encoded_init_config 값을 산출합니다. encoded_init_config는 JavaScript 라이브러리의 initSession 호출에 전달하여 3DS 커넥터 라이브러리 내의 다양한 테스트 케이스를 실행할 수 있습니다.
| 테스트 헤더 값 | HTTP 코드 및 응답 | initSession 테스트 사례 |
|---|---|---|
| 표준형 | 201 – 표준 응답 | SUCCESS |
init_skip | 201 – 응답 없음 encoded_init_config | 지원되지 않음 |
init_fail | 201 – 표준 응답 | FAILED |
init_timeout | 201 – 표준 응답 | TIMEOUT |
internal_server_error | 500 – 내부 서버 오류 | — |
internal_server_error | 503 - 서버를 사용할 수 없음 | — |
참고: 3DS 커넥터 라이브러리( init_skip) 내의 테스트 케이스에 대해서는 encoded_init_config 를 사용하여, 해당 테스트 케이스를 initSession 로 전달하고 SKIPPED 상태의 statusCode 를 강제 적용할 수 있습니다.
예약 생성
Rapid Lodging API의 ‘ non-SCA ’ 예약 흐름에 대한 테스트 요청에 정의된 테스트 헤더 외에도, SCA 워크플로우에 대해 추가적인 테스트 헤더 값이 지원됩니다.
테스트 헤더 값에 따라 서로 다른 encodedChallengeConfig 값이 산출되며, 이 값들을 JavaScript 라이브러리의 챌린지 호출에 전달하여 다양한 테스트 케이스를 실행할 수 있습니다.
| 테스트 헤더 값 | HTTP 코드 및 응답 | initSession 테스트 사례 |
|---|---|---|
complete_payment_session | 201 – Response with complete payment session link | SUCCESS without user iframe Interaction |
complete_payment_session_show | 201 – Response with complete payment session link | SUCCESS/FAILED with user iframe interaction |
complete_payment_session_fail | 201 – Response with complete payment session link | FAILED without user iframe interaction |
complete_payment_session_timeout | 201 – Response with complete payment session link | TIMEOUT |
complete_payment_session_error | 201 – Response with complete payment session link | ERROR |
Rapid Lodging API의 ‘ non-SCA ’ 예약 흐름에 대한 테스트 요청에 정의된 테스트 헤더 외에도, SCA 워크플로우에 대해 추가적인 테스트 헤더 값이 지원됩니다.
테스트 헤더 값에 따라 서로 다른 encodedChallengeConfig 값이 산출되며, 이 값들을 JavaScript 라이브러리의 챌린지 호출에 전달하여 다양한 테스트 케이스를 실행할 수 있습니다.
| 테스트 헤더 값 | HTTP 코드 및 응답 | initSession 테스트 사례 |
|---|---|---|
complete_payment_session | 201 – Response with complete payment session link | SUCCESS without user iframe Interaction |
complete_payment_session_show | 201 – Response with complete payment session link | SUCCESS/FAILED with user iframe interaction |
complete_payment_session_fail | 201 – Response with complete payment session link | FAILED without user iframe interaction |
complete_payment_session_timeout | 201 – Response with complete payment session link | TIMEOUT |
complete_payment_session_error | 201 – Response with complete payment session link | ERROR |
결제 세션 완료
테스트 헤더 값에 따라 결제 완료 및 예약 확인 과정에서 발생할 수 있는 다양한 오류 사례가 나타납니다.
| 테스트 헤더 값 | HTTP 코드 및 응답 |
|---|---|
payment_declined | 400 - Payment declined response |
price_mismatch | 409 - Price mismatch response |
rooms_unavailable | 410 - Rooms unavailable response |
3DS Connector 라이브러리 및 iframe
특정 매개변수 값이 지원되는 메서드 응답과 일치해야 외부 종속성 없이 3DS Connector를 테스트할 수 있습니다. 이 동작은 iframe이 테스트 샌드박스 URL로 로드된 경우에만 지원됩니다.
세션 초기화
initSessionResponse statusCode에서 지원하는 값은 initSessionRequest encoded_init_config 을 변경하여 테스트할 수 있습니다.
| statusCode 값 | encodedInitConfig 값 테스트 |
|---|---|
| SUCCESS | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d |
| FAILED | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJGQUlMRUQifV0= |
| TIMEOUT | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJUSU1FT1VUIn1d |
| SKIPPED | 현재 지원되지 않습니다. |
참고: encoded_init_config 값은 결제 등록 API의 지원되는 테스트 헤더를 사용하여 생성할 수도 있습니다.
챌린지
challengeResponse statusCode에서 지원하는 값은 challengeRequest encoded_challenge_config 를 변경하여 테스트할 수 있습니다.
| statusCode 값 | encoded_Challenge_config 값 테스트 | 설명 |
|---|---|---|
| SUCCESS | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0 | 사용자 iframe 상호 작용 없음 |
| SUCCESS/FAILED | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNIT1cifV0 | 사용자 iframe 상호 작용 없음 |
| FAILED | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkZBSUxFRCJ9XQ | 사용자 iframe 상호 작용 없음 |
| TIMEOUT | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlRJTUVPVVQifV0 | |
| ERROR | W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIkVSUk9SIn1d |
encoded_init_config값은 Booking API의 SCA 흐름에서 지원되는 테스트 헤더를 사용하여 생성할 수도 있습니다.
참고: iframe에 입력된 사용자 정보를 바탕으로 챌린지 상태 코드 값이 SUCCESS 또는 FAILED인지 확인할 때, 챌린지 메서드의 응답은 iframe 내의 시뮬레이션된 인증 인터페이스가 완료될 때까지 대기합니다.
3DS iframe의 UI 예:

사용 예
이 예제는 사용자가 iframe과 상호작용할 필요 없이, 미리 정의된 매개변수 값을 사용하여 3DS 인증에 대한 라이브러리를 테스트하는 방법을 보여줍니다.
var c = new PayThreeDSConnector.ThreeDSConnector('threedsiframe', 'https://static.pay.expedia.com'); // change to match the 3DS iframe ID
c.setup({ referenceId: '1000' })
.then((setupResponse) => {
console.log('Setup Output: ', setupResponse);
return c.initSession({
paymentSessionId: 1,
encodedInitConfig: 'W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94SW5pdE91dHB1dENvbmZpZyI6ICJTVUNDRVNTIn1d',
}); // SUCCESS
})
.then((initResponse) => {
console.log('InitSession Output: ', initResponse);
$('#threedsIframeModal').modal(); // replace with code to show the modal containing the 3DS iframe
return c.challenge({
paymentSessionId: 1,
encodedChallengeConfig:
'W3sicHJvdmlkZXJJZCI6IDAsICJzYW5kYm94Q2hhbGxlbmdlT3V0cHV0Q29uZmlnIjogIlNVQ0NFU1MifV0=',
}); // SUCCESS
})
.then((challengeResponse) => {
console.log('Challenge Output: ', challengeResponse);
})
.finally(() => {
$('#threedsIframeModal').modal('hide'); // replace with code to hide the modal containing the 3DS iframe
});3DS 인증 및 후불 결제
pay-later 의 모델과 예약할 경우, 익스피디아는 카드에서 요금을 청구하지 않습니다. 대신, 해당 업무를 처리하도록 공급업체에 넘깁니다. 판매자는 예약 전에 이 정보를 사용하여 카드 유효성을 확인할 수 있습니다. 여행객은 도착 시 직접 결제해야 합니다.
하지만 때로는 계획이 변경되기도 하는데, 이 경우 판매자가 ‘ no-show ’ 수수료를 부과할 수 있습니다. 이러한 결제 건은 여행자가 현장에 없는 상태에서 카드 결제가 이루어지기 때문에 SCA 규정의 적용을 받을 수 있습니다.
거래에 차질이 발생할 경우, 결 제가 실패하거나, 청구 내역이 non-compliant.
공급업체와의 관계를 유지하고 파트너사에 지속적으로 서비스를 제공하기 위해, Expedia Group 은 규정 준수를 위한 선택적 방안을 제시합니다. Expedia Group 에서 공급업체를 대신하여 인증 절차를 수행해 드릴 수 있습니다. 이를 통해 공급업체들은 자사의 사업을 보호할 수 있으며, ‘ Rapid API ’가 계속해서 다양한 선택지를 제공할 수 있게 됩니다.
Rapid Lodging API에서는 이 정보가 숙박 시설 콘텐츠 파일 및 숙박 시설 콘텐츠 내의 ‘ payment_registration_recommended=true ’ 플래그 형태로 제공되며, 이를 통해 프로젝트에 숙박 시설가 포함될 가능성이 있는 경우 이를 식별하는 데 도움이 될 수 있습니다.
통합에 미칠 수 있는 영향
보안 인증이 필요한 가맹점을 제공하고자 한다면, 예약 절차에서 3DS를 지원해야 합니다. 3DS를 지원하지 않는 경우, card-issuing 은행 측에서 해당 거래에 인증이 필요하다고 판단하면 이러한 옵션의 예약이 실패할 수 있습니다.
no-show 수수료가 부과될 경우, Rapid API 이 등록 판매자로 표시됩니다. 카드 청구서에 표시되는 결제 내역의 명칭은 숙박 시설가 아닌 귀사의 정책에 따라 결정됩니다. 이 텍스트를 사용자 지정하려면 Rapid 파트너 지원 팀에 문의해 주세요.
카드 브랜드의 요구 사항 및 ‘ Rapid API ’ 출시 절차를 준수하기 위해, 다음의 경우 ‘Accepted Payments’ API를 사용하여 check-out 페이지에 ‘ processing_country ’를 표시하십시오. no-show. 이는 ‘ Rapid API ’가 등록 판매자로 지정된 모든 거래에 필수이며, 3DS가 사용되고 ‘ no-show ’가 발생할 경우 해당 절차가 진행될 수 있습니다.
통합으로 인한 영향을 완화하는 방법
Rapid API 연동 기능이 예약 절차에서 보안 인증을 지원하지 않는 경우, 관련 규정을 준수하지 않는 리스팅을 보유한 판매자를 제외함으로써 예약 실패 위험을 줄일 수 있습니다. Rapid Partner Support에 문의하여 가용성 API 응답에서 해당 요금이 제외되도록 하십시오.
대리인 도구를 사용할 경우, 관련 규정에 따라 해당 거래는 SCA 적용 대상에서 제외됩니다. 이를 표시하려면 가용성 API의 sales_channel 필드를 사용하십시오.
오류 처리
예약 생성 API 및 결제 세션 완료 API를 사용하면 예약 및 결제 거래를 확정할 수 있습니다.
재정 손실을 방지하고 고객 운영 문제를 피하려면 통합 시 다음 지침을 고려해야 합니다.
| 소스 | 기능 | 추천 시간 제한 설정 | 오류 복구 절차 | 필요한 조치 |
|---|---|---|---|---|
| Rapid API | 결제 등록 토큰을 위한 사전 예약 요금 확인 | 10초 | 다시 시도하거나 다른 숙박 시설, 객실 또는 요금 선택 | - |
| JavaScript | 3DS Connector 설정 | 10초 | 동일한 요청 재시도 | - |
| Rapid API | 결제 세션 등록 | 10초 | "Expect: 100-continue" 과정을 생략하고 동일한 요청을 다시 시도합니다. | - |
| JavaScript | 결제 세션 시작 | 10초 | 동일한 요청 재시도 | - |
| Rapid API | 예약 생성 | 90초 | 동일한 요청 재시도 | 모든 오류에 대해: 다음을 사용하여 예약 정보를 조회합니다. affiliate_reference_id |
| JavaScript | 인증 챌린지 표시 | 10초 | 동일한 요청 재시도 | - |
| JavaScript | challenge.statusCode 대기 | 180~1,200초 | 결제 세션 완료 요청 | - |
| Rapid API | 결제 세션 완료 | 90초 | 동일한 요청 재시도 | 모든 오류에 대해: 다음을 사용하여 예약 정보를 조회합니다. affiliate_reference_id |
| Rapid API | 모든 오류에 대해: 다음을 사용하여 예약을 조회합니다. affiliate_reference_id | 30초 | 동일한 요청 재시도 | 모든 오류의 경우: API 응답 코드 404 또는 200으로 예약의 최종 상태를 확인하려면 재시도 전에 90초 대기 |