백엔드 API 통해 구매 수행
이벤트 구매를 수신하고 플레이어의 권한을 트래킹하는 자체 백엔드를 구현합니다.
읽는 시간 2분최근 업데이트: 한 달 전
게임에서 서버 권한 권한을 사용하는 경우 다음을 수행하는 백엔드 시스템을 구현합니다.
- Webhook 이벤트(JWT) 확인
- 이벤트 파스.
- 시스템의 자격 또는 인벤토리를 이벤트 유형에 따라 업데이트합니다.
- 주문을 완료된 것으로 표시합니다.
- 이벤트 응답 반환
이렇게 하면 시스템과 Unity IAP가 모두 동기화됩니다.
JWT(Webhook Event) 확인
확인을 활성화하기 위해 Unity IAP는 JWT(JSON 웹 토큰)로 웹후크 요청에 서명합니다. 백엔드에서 이 토큰에 대한 다음 정보를 확인하여 이벤트가 유효한지 확인합니다.
- 인증 헤더
- SIGNATURE 비공개 키로 서명됨. 다음을 확인하기 위해 **JWKS(공용 키)**를 가져와 캐시합니다.
https://services.api.unity.com/webhooks/.well-known/jwks.json - 발급자:
https://services.api.unity.com/webhooks/ - 고객 요구 사항(배열): (Unity 프로젝트 ID),
upid(환경 ID)envId - 토큰 만료일: ( 만료일)가 통과되지 않았는지 확인합니다.
exp
JWT를 검증하는 데 사용할 수 있는 대부분의 언어 라이브러리가 있습니다.
Webhook 이벤트 셰이프
Unity IAP는 지원되는 모든 결제 제공업체의 이벤트를 이 일관된 포맷으로 정규화합니다. 다음 예를 참고하십시오.
{ "id": "018d5e5e-5e5e-7e5e-5e5e-5e5e5e5e5e5e", "version": "1.0.0", "eventType": "order.paid", "time": "2024-01-15T14:30:00Z", "projectId": "018d5e5e-1111-7e5e-5e5e-111111111111", "environmentId": "018d5e5e-2222-7e5e-5e5e-222222222222", "dataType": "order", "data": { "id": "018d5e5e-3333-7e5e-5e5e-333333333333", "playerId": "player_12345", "paymentProvider": "stripe", "paymentProviderResourceId": "cs_test_a1b2c3d4e5f6", "url": "https://checkout.stripe.com/pay/cs_test_a1b2c3d4e5f6", "lineItems": [ { "sku": "com.game.coins_100", "productType": "소모품", "price": { "amountMicros": 4990000, "currency": "USD" } } ], "total": { "amountMicros": 4990000, "currency": "USD", "refundedAmountMicros": 0 }, "status": "paid", "customReferenceId": "order_xyz_789", "metadata": { "campaign": "summer_sale", "platform": "iOS" }, "createdAt": "2024-01-15T14:25:00Z", "updatedAt": "2024-01-15T14:30:00Z", "paidAt": "2024-01-15T14:30:00Z", "fulfilledAt": null }}
Webhook 이벤트의 다음 필드를 참조하십시오.
이벤트 유형
Unity IAP는 다음과 같은 웹후크 이벤트 타입을 전송합니다.
order.paid
플레이어가 구매를 성공적으로 완료하면 Unity IAP가 이벤트를 전송합니다. 이 이벤트를 수신하면 플레이어에게 구매한 자격 또는 화폐를 부여하고 주문이 완료된 것으로 표시합니다.
order.paidorder.updated
Unity IAP는 주문이 업데이트될 때마다 이벤트를 전송합니다. 여기에는 다음과 같은 변경 사항이 포함됩니다.
order.updated- 완료된 것으로 표시되는 순서입니다.
- 처리 중인 환불입니다.
- 기타 순서 수정.
data.totalrefundedAmountMicros환불은 개발자가 시작합니다. 예를 들어 결제 제공업체의 대시보드를 통해 플레이어에게 환불을 보낼 수 있습니다.
환불이 발생하면 Unity IAP는 자동으로 권한을 취소하지 않습니다. 환불된 자격을 취소하려는 경우 이 이벤트를 수신하고 자격 시스템에서 처리할 수 있습니다.
order.revoked
주문 상태가 로 변경되면 Unity IAP가 이벤트를 전송합니다. 이 이벤트를 수신하면 플레이어의 원래 구매에 허용된 자격 또는 재화를 취소합니다.
revokedorder.revoked충전은 플레이어가 시작합니다. 예를 들어 플레이어는 신용 카드 회사 또는 은행을 통해 비용에 대해 논쟁할 수 있습니다.
인보이스 충돌이 종료되고 플레이어가 이기면 Unity IAP는 자동으로 주문을 취소하고 이 이벤트를 전송합니다. 환불과 달리, Unity IAP는 과금에 대한 권한을 취소합니다.
API 통해 실행된 주문 표시
백엔드에서 권한을 부여한 후 Orders API 사용하여 순서를 완료된 것으로 표시합니다. 이렇게 하면 타임스탬프가 업데이트되고 주문 상태가 올바르게 추적됩니다.
fulfilledAtAuthentication
이러한 엔드포인트를 호출하려면 다음 방법 중 하나를 사용하여 인증해야 합니다.
- 서비스 계정 Unity Dashboard에서 서비스 계정을 생성하고 이를 사용하여 백엔드 서버를 인증합니다. 자세한 내용은 서비스 계정 인증을 참고하십시오.
- Cloud Code 프로젝트를 대신하여 인증할 수 있는 Cloud Code 스크립트 또는 모듈에서 엔드포인트를 호출합니다. 자세한 내용은 구매를 위해 Cloud Code 모듈 사용을 참고하십시오.
주문 가져오기
주문을 검색하려면 엔드포인트를 호출합니다.
GETGET https://iap.services.api.unity.com/v1/projects/{projectId}/environments/{environmentId}/orders/{orderId}
주문 상태
상태 | 설명 |
|---|---|
| 주문이 생성되었지만 결제가 완료되지 않았습니다. |
| 지급 공급자가 지급을 수령하고 확인했습니다. |
| 주문이 이행되고 플레이어에게 보상이 제공됩니다. |
| 순서 실패。 이는 터미널 상태입니다. |
| 주문이 취소되었습니다. 이는 터미널 상태입니다. |
| 결제 전에 주문이 취소되었습니다. 이는 터미널 상태입니다. |
응답 예시
GETPATCH{ "id": "018d5e5e-3333-7e5e-5e5e-333333333333", "projectId": "018d5e5e-1111-7e5e-5e5e-111111111111", "environmentId": "018d5e5e-2222-7e5e-5e5e-222222222222", "playerId": "player_12345", "paymentProvider": "stripe", "paymentProviderResourceId": "cs_test_12345", "url": "https://checkout.stripe.com/pay/cs_test_12345", "lineItems": [ { "sku": "com.game.coins_100", "productType": "Consumable" } ], "status": "paid", "fulfilledAt": null, "revokedAt": null, "customReferenceId": "order_xyz_789", "metadata": { "campaign": "summer_sale" }, "createdAt": "2024-01-15T14:25:00Z", "updatedAt": "2024-01-15T14:30:00Z"}
주문 업데이트
주문 상태를 업데이트하려면 엔드포인트를 호출합니다.
PATCHPATCH https://iap.services.api.unity.com/v1/projects/{projectId}/environments/{environmentId}/orders/{orderId}
요청 본문
{ "status": "fulfilled"}
HTTP 응답 상태 코드는 IAP 클라이언트 API 문서를 참조하십시오.
이벤트 응답 반환
이벤트 리스폰스를 반환하여 이벤트 처리의 성공 여부를 나타내야 합니다.
- "response": 성공적인 이벤트 처리를 나타냅니다.
- 비응답: 실패를 나타냅니다. Unity IAP는 리플레이 정책에 따라 이벤트를 재생합니다.
2xx
이벤트 리플레이 동작
Webhook 엔드포인트가 비 응답을 반환하면 Unity IAP가 이벤트 전송을 자동으로 재시도합니다. 리플레이된 이벤트가 중복된 자격으로 이어지지 않도록 웹후크 핸들러가 고정된 상태여야 합니다.
2xx다음 단계
이 페이지는 IAP를 사용하여 D2C(Direct-to-Consumer) 결제 제공업체를 설정하는 워크플로의 일부입니다. 이 워크플로를 계속하려면 다음 옵션 중 하나를 선택합니다.