Booking 서비스의 구매 도메인은 공개 구매 요청 생성, 조회, 결제 처리 기능을 제공합니다. MainPay 결제 게이트웨이와의 연동을 통한 온라인 결제를 지원합니다.
Types
PublicPurchase
공개 구매 요청 객체
type PublicPurchase {
id: ID!
status: String!
datePricesToken: String!
accommodationId: ID!
roomTypeId: ID!
useStartAt: Date!
useExpireAt: Date!
data: String!
}
MainPayPurchaseSignature
MainPay 결제 서명 정보
type MainPayPurchaseSignature {
signature: String!
timestamp: String!
mbrRefNo: String!
mbrNo: String!
aid: String!
pcUrl: String!
mobileUrl: String!
}
Queries
getAccommodationPublicPurchases
숙박시설의 공개 구매 요청 목록을 페이지네이션하여 조회합니다.
GraphQL Signature
query GetAccommodationPublicPurchases(
$accommodationId: ID!
$first: Int
$after: String
$last: Int
$before: String
) {
getAccommodationPublicPurchases(
accommodationId: $accommodationId
first: $first
after: $after
last: $last
before: $before
) {
edges {
cursor
node {
id
status
accommodationId
roomTypeId
useStartAt
useExpireAt
}
}
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
totalCount
}
}
파라미터
앞에서부터 가져올 항목 수 (forward pagination)
뒤에서부터 가져올 항목 수 (backward pagination)
query {
getAccommodationPublicPurchases(
accommodationId: "01HQKS9V8X2N3P4Q5R"
first: 10
) {
edges {
node {
id
status
useStartAt
useExpireAt
}
}
totalCount
}
}
getSinglePublicPurchase
단일 공개 구매 요청을 ID로 조회합니다.
GraphQL Signature
query GetSinglePublicPurchase($id: ID!) {
getSinglePublicPurchase(id: $id) {
id
status
datePricesToken
accommodationId
roomTypeId
useStartAt
useExpireAt
data
}
}
파라미터
getAccommodationPgConfig
숙박시설의 PG(결제 게이트웨이) 설정을 조회합니다.
GraphQL Signature
query GetAccommodationPgConfig($accommodationId: ID!) {
getAccommodationPgConfig(accommodationId: $accommodationId) {
accommodationId
data
}
}
파라미터
Mutations
createPublicPurchaseRequest
새로운 공개 구매 요청을 생성합니다.
GraphQL Signature
mutation CreatePublicPurchaseRequest($input: CreatePublicPurchaseRequestInput!) {
createPublicPurchaseRequest(input: $input) {
id
status
accommodationId
roomTypeId
useStartAt
useExpireAt
}
}
입력 파라미터
input CreatePublicPurchaseRequestInput {
datePricesToken: String!
accommodationId: ID!
roomTypeId: ID!
useStartAt: Date!
useExpireAt: Date!
person: Int!
overSleeps: Int!
request: String
guestName: String!
phone: String!
roomTypeName: String!
couponUsageHash: String
claimedDiscountAmount: Int
}
mutation {
createPublicPurchaseRequest(input: {
datePricesToken: "token_12345"
accommodationId: "01HQKS9V8X2N3P4Q5R"
roomTypeId: "01HQKS9V8X2N3P4Q5S"
useStartAt: "2025-01-15"
useExpireAt: "2025-01-16"
person: 2
overSleeps: 0
guestName: "홍길동"
phone: "01012345678"
roomTypeName: "디럭스 더블"
request: "조용한 방 부탁드립니다"
}) {
id
status
}
}
requestMainpayPurchaseReady
MainPay 결제를 준비하고 결제 서명을 발급합니다.
GraphQL Signature
mutation RequestMainpayPurchaseReady($input: MainPayPurchaseRequest!) {
requestMainpayPurchaseReady(input: $input) {
signature
timestamp
mbrRefNo
mbrNo
aid
pcUrl
mobileUrl
}
}
입력 파라미터
input MainPayPurchaseRequest {
publicPurchaseId: ID!
accommodationId: ID!
amount: Int!
goodsName: String!
name: String!
phone: String!
email: String
redirectionHost: String!
accommodationName: String!
}
결제 페이지로 이동하기 위한 서명 정보를 반환합니다.
resolveMainpayPurchase
MainPay 결제 결과를 확인하고 처리합니다.
GraphQL Signature
mutation ResolveMainpayPurchase($input: MainPayPurchaseResolve!) {
resolveMainpayPurchase(input: $input) {
complete
resultCode
resultMessage
}
}
입력 파라미터
waitPublicPurchaseResolved
구매 요청이 완료될 때까지 대기하고 예약 객체를 반환합니다.
GraphQL Signature
mutation WaitPublicPurchaseResolved($id: ID!) {
waitPublicPurchaseResolved(id: $id) {
id
# Reservation 필드들
}
}
이 mutation은 결제 완료 후 예약이 생성될 때까지 대기하는 폴링 방식으로 동작합니다.
결제 흐름
- 구매 요청 생성:
createPublicPurchaseRequest
- 결제 준비:
requestMainpayPurchaseReady로 결제 URL 획득
- 결제 진행: 반환된 URL로 사용자를 리다이렉션하여 MainPay 결제 진행
- 결제 완료:
resolveMainpayPurchase로 결제 결과 확인
- 예약 확인:
waitPublicPurchaseResolved로 생성된 예약 조회
관련 API