백엔드 API 통해 구매 수행
이벤트 구매를 수신하고 플레이어의 권한을 트래킹하는 자체 백엔드를 구현합니다.
읽는 시간 2분최근 업데이트: 10일 전
게임에서 서버 권한 권한을 사용하는 경우 다음을 수행하는 백엔드 시스템을 구현합니다.
- Webhook 이벤트(JWT) 확인
- 이벤트 파스.
- 시스템의 자격 또는 인벤토리를 이벤트 유형에 따라 업데이트합니다.
- 주문을 완료된 것으로 표시합니다.
- 이벤트 응답 반환
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
Webhook 이벤트 셰이프
Unity IAP는 지원되는 모든 결제 제공업체의 이벤트를 이 일관된 포맷으로 정규화합니다. 다음 예를 참고하십시오.Webhook 이벤트의 다음 필드를 참조하십시오.{ "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 }}
이벤트 유형
Unity IAP는 다음과 같은 웹후크 이벤트 타입을 전송합니다.order.paid
플레이어가 구매를 성공적으로 완료하면 Unity IAP가order.paidorder.updated
Unity IAP는 주문이 업데이트될 때마다order.updated- 완료된 것으로 표시되는 순서입니다.
- 처리 중인 환불입니다.
- 기타 순서 수정.
data.totalrefundedAmountMicrosorder.revoked
주문 상태가revokedorder.revokedAPI 통해 실행된 주문 표시
백엔드에서 권한을 부여한 후 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 엔드포인트가 비2xx