주문 상태 추적 설정하기
사용자에게 아이템을 부여하려면 결제가 성공적으로 완료되었는지 확인해야 합니다.
주문 상태 추적 방법 선택:
프로젝트에 가장 적합한 방법을 선택하여 엑솔라 데이터에 액세스합니다.
서버가 없거나 클라이언트 측에서 구매 처리 로직을 구현하는 경우 사용할 수 있는 방법:
WebSocket API를 사용하여 클라이언트 측에서 주문 상태 가져오기
이 솔루션은 websockets를 사용하여 주문 상태를 가져옵니다. 이때 주문에 대한 자세한 정보는 가져오지 않습니다. 이 메소드는 클라이언트(예: 웹사이트 또는 모바일 애플리케이션)와 엑솔라 서버 사이에 단 하나의 연결만 생성하므로 클라이언트나 서버에 추가 부하가 발생하지 않아 권장됩니다.
다음 단계를 완료해 주세요.
- 엑솔라 웹 소켓 서버와 클라이언트가 주문 상태 메시지를 식별할 수 있도록 연결을 생성합니다.
- javascript
const client = new Centrifuge(
connectionURL,
{
data: {
user_external_id: user_external_id,
auth: auth,
project_id: project_id
}
}
)
connectionURL - wss://ws-store.xsolla.com/connection/websocket
auth - user JWT token
- 주문 상태에 대한 새 메시지를 받으려면
client.on
함수를 사용하여 이벤트를 구독해 주세요.
- javascript
client.on('publication', (ctx) => {
//handle the status
});
- 실제 연결 설정 트리거:
- javascript
client.connect()
- 주문 상태의 변경 사항 기록을 받으려면 API 기록 메소드를 연결합니다.
- javascript
client.on('subscribed', function (ctx) {
client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
resp.publications.forEach((ctx) => {
/handle the status
});
}, function (err) {
//handle the status
});
});
메시지 본문 예시:
- javascript
{
order_id: 59614241,
status: 'new'
}
다음 주문 상태가 가능합니다.
New
- 주문이 생성되었지만 지불되지 않음Paid
- 주문 지불 완료Done
- 주문 전달이 완료됨(모든 영수증 전송 완료, 엑솔라 및 외부 플랫폼 등에서 전달됨)Canceled
- 주문이 취소되었으며 사용자에게 환불이 완료됨
웹소켓 사용 권장 사항:
- 웹소켓을 통한 응답 대기 시간은 최대 5분입니다.
- 결제 인터페이스를 열 때 연결이 설정되어야 합니다.
- 최종 주문 상태가
Canceled
또는Done
중 하나로 수신되면 연결이 중단되어야 합니다. - 웹소켓의 수명이 만료되거나 연결에 문제가 있는 경우 숏폴링을 사용하세요.
쇼트 폴링
상태로 전환한 후 주문 아이템에 대한 자세한 정보를 가져오려면 주문 가져오기 API를 호출하세요.
알림정기 주문 상태 폴(주문 상태 및 주문 정보를 수신하는 간단한 HTTP 요청)을 사용합니다. 요청 사이에 권장되는 지연 시간은 3초입니다.
XsollaCatalog.Purchase
메서드에는 주문 상태를 추적하는 여러 가지 방법이 캡슐화되어 있습니다. 추적 메커니즘은 엔터프라이즈급 Unity용 SDK 문서에 자세히 설명되어 있습니다.
또한 주문 상태 및 콘텐츠를 처리할 수 있으며, 이는 구매 방식의 onSuccess
콜백 함수에 전달됩니다.
SDK 사용 시 다음과 같은 방법으로 주문 상태를 추적할 수 있습니다.
주문 상태 변경 사항 구독
주문 상태 변경 사항을 구독하려면 스토어 라이브러리에서 getOrderStatus
SDK 메소드를 사용하여 메소드에 다음 매개 변수를 전달합니다.
listener
-OrderStatusListener
유형의 리스너 개체.orderId
- 장바구니, 원클릭 구매 또는 인게임 재화 구매 시 받은 매개 변수로서의 주문 ID.
XStore.getOrderStatus 메소드 호출 예시:
- kotlin
XStore.getOrderStatus(object : OrderStatusListener() {
override fun onStatusUpdate(status: OrderResponse.Status) {
if(status == OrderResponse.Status.DONE) {
Log.d("MainActivity", "Success")
}
}
override fun onFailure() {
Log.d("MainActivity", "Failure")
}
}, orderId)
결제 UI를 열 때 XStore.getOrderStatus
메소드를 호출하는 것이 좋습니다.
구매 메소드는 주문 상태를 추적하는 여러 메소드를 캡슐화합니다. 추적은 다음 알고리즘에 따라 수행됩니다.
- 웹 소켓 연결이 설정되었습니다.
- 웹 소켓 연결이 성공적으로 설정되고 주문 상태가
done
또는cancel
로 변경되면 추적이 중지됩니다. 웹 소켓 연결이 실패하거나 응답에 잘못된 데이터가 포함되면 쇼트 폴링을 사용하여 주문 상태를 추적합니다. - 주문 상태 추적은 쇼트 폴링을 계속합니다. 간단한 HTTP 주문 상태 요청은 3초마다 한 번씩 전송됩니다. 주문 상태가
done
또는cancel
로 변경되면 추적이 중지됩니다.
주문 상태 요청
결제 트랜잭션의 현재 상태를 요청하려면 스토어 라이브러리에서 getOrder
메서드를 호출하여 다음 매개 변수를 전달합니다.
orderId
— 아이템 구매 시 수신한 주문 ID.callback
- 주문 정보를 성공적으로 조회하기 위한 콜백입니다. 콜백을 구현할 경우GetStatusCallback
인터페이스를 사용하고onSuccess
및onError
메소드를 구현합니다.callback
- 주문 정보를 성공적으로 조회하기 위한 콜백입니다. 콜백을 구현할 경우GetStatusCallback
인터페이스를 사용하고onSuccess
및onError
메소드를 구현합니다.
주문 상태 정보는 onSuccess
메소드에 InvoicesDataResponse
유형의 개체로 전달됩니다. 이 개체에는 InvoiceData
개체의 배열이 포함됩니다. 각 InvoiceData
개체는 주문 처리의 특정 단계에 해당하며 이 단계의 상태를 포함합니다.
예를 들어, 사용자가 처음에 주문할 때 잘못된 데이터를 입력한 경우 InvoicesDataResponse.CANCELED
상태의 개체가 InvoiceData
목록에 나타납니다. 그런 다음 사용자가 데이터를 수정하고 주문에 대한 결제를 성공적으로 완료하면 배열에 새 InvoiceData
개체가 나타나며 상태는 이제 InvoicesDataResponse.Status.DONE
입니다.
최종 결제 상태로 (InvoicesDataResponse.Status.DONE
또는 InvoicesDataResponse.Status.ERROR
)를 수신하면 상태 추적이 중지됩니다.
예시:
- kotlin
XPayments.getStatus(<token>, <isSandbox>, object : GetStatusCallback {
override fun onSuccess(data: InvoicesDataResponse?) {
Log.d(TAG, "onSuccess is fired. Result data = $data")
}
override fun onError(throwable: Throwable?, errorMessage: String?) {
Log.d(TAG, "onError is fired. ErrorMessage = $errorMessage")
}
})
CheckPendingOrder
SDK 메서드를 사용하여 주문 상태를 추적할 수 있습니다. 메서드에 다음 매개 변수를 전달합니다.
AccessToken
— 아이템 구매 시 수신한 결제 토큰.OrderId
— 아이템 구매 시 수신한 주문 ID.SuccessCallback
— 성공적인 결제 콜백.ErrorCallback
— 요청 오류 콜백.bIsUserInvolvedToPayment
— 사용자가 결제 과정에 참여했는지 여부를 확인합니다. 실제 화폐로 구매하려면true
를 전달하고, 무료 아이템 구매 및 인게임 재화로 구매하려면false
를 전달합니다.
추적 메커니즘은 Unreal Engine용 엔터프라이즈급 SDK 문서에 자세히 설명되어 있습니다.
주문의 상태와 내용을 요청하려면 CheckOrder
SDK 메서드를 호출하여 다음 매개 변수를 전달합니다.
생성된 주문의 상태를 추적하고 유효성을 검사하려면 애플리케이션의 서버 측에서 웹훅 처리를 구성해야 합니다.
인게임 스토어를 제대로 운영하려면 메인 웹훅 처리를 구현해야 합니다:
웹훅 | 알림 유형 | 설명 |
---|---|---|
사용자 유효성 검사 | user_validation | 사용자가 게임에 등록되어 있는지 확인하기 위해 결제를 처리하는 여러 단계에서 전송됩니다. |
결제 | payment | 주문이 결제되면 전송되며 결제 데이터 및 거래 세부 정보가 포함됩니다. |
주문 결제 성공 | order_paid | 결제 웹훅이 성공적으로 처리되었을 때 전송되며 여기에는 구매한 아이템 및 거래 ID에 대한 정보를 포함되어 있습니다. 사용자에게 아이템을 추가할 때 웹훅 데이터를 사용할 수 있습니다. |
환불 | refund | 주문이 취소되면 전송되며 취소된 결제 데이터 및 거래 세부 정보가 포함됩니다. |
주문 취소 | order_canceled | 환불 웹훅이 성공적으로 처리되었을 때 전송되며, 구매 아이템에 대한 정보와 취소된 거래의 ID가 포함되어 있습니다. 웹훅의 데이터를 사용하여 구매한 아이템을 제거합니다. |
웹훅의 전체 목록과 웹훅 작업에 대한 일반적인 정보는 웹훅 문서를 참조해 주세요.
웹훅 전송 설정
엑솔라 측에서 웹훅 구성 방법:
- 프로젝트를 관리자 페이지에서 엽니다.
- 사이드 메뉴에서 프로젝트 설정을 클릭하고 웹훅 세션으로 이동합니다.
- 웹훅 URL 필드에서 엑솔라가 웹훅을 전송하는 URL을 지정합니다.
- 웹훅 사용을 클릭합니다.
웹훅 리스너 추가
웹훅 수신기는 지정된 URL 주소에서 들어오는 웹훅을 수신하고 서명을 생성한 후 엑솔라 웹훅 서버로 응답을 전송할 수 있는 프로그램 코드입니다.
서명 생성
웹훅을 수신할 때는 데이터 전송의 보안을 보장해야 합니다. 이를 위해서는 웹훅 데이터에서 서명을 생성하고 생성된 서명이 HTTP 요청 헤더에 전송된 서명과 일치하는지 확인해야 합니다.
서명 생성 방법:
- 요청 본문과 프로젝트의 비밀 키의 JSON을 연결합니다.
- 첫 번째 단계에서 구한 문자열에 SHA-1 암호화 해시 함수를 적용합니다.
웹훅으로 응답 보내기
웹훅 수신을 확인하려면 서버가 다음을 반환해야 합니다.
- 성공적인 응답의 경우
200
,201
또는204
HTTP 코드 - 지정된 사용자를 찾을 수 없거나 잘못된 서명이 전달된 경우 문제 설명이 포함된
400
HTTP 코드
서버에 일시적인 문제가 발생한 경우 웹훅 핸들러가 5xx
코드를 반환할 수도 있습니다.
주문 결제 성공 및 주문 취소 웹훅에 대한 응답을 받지 못했거나 5xx
코드가 포함된 응답을 받은 경우, 다음 일정에 따라 웹훅이 다시 전송됩니다.
- 5분 간격으로 2번
- 15분 간격으로 7번
- 60분 간격으로 10번
웹훅 전송은 처음 시도 후 12시간 이내에 최대 20번까지 시도할 수 있습니다.
결제 웹훅에 대한 응답이 수신되지 않았거나 5xx
코드가 포함된 응답이 수신된 경우 웹훅도 증가된 시간 간격으로 재전송됩니다. 12시간 동안 최대 12번 시도할 수 있습니다.
사용자 유효성 검사 웹훅에 대한 응답이 수신되지 않았거나 400
또는 5xx
코드가 포함된 응답이 수신된 경우 사용자 유효성 검사 웹훅이 재전송되지 않습니다.
이 경우 사용자에게 오류가 표시되며 결제와 주문 결제 성공 웹훅은 전송되지 않습니다.
오자 또는 기타 텍스트 오류를 찾으셨나요? 텍스트를 선택하고 컨트롤+엔터를 누르세요.