# 결제 문의

**URL:** <https://techchat-apps-in-toss.toss.im/t/topic/606>\
**Category:** 개발\
**Created:** [10월 1, 2025, 1:33오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606 "2025-10-01T01:33:16Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![kimybzz](https://yyz1.discourse-cdn.com/flex007/user_avatar/techchat-apps-in-toss.toss.im/kimybzz/32/917_2.png) [@kimybzz](https://techchat-apps-in-toss.toss.im/u/kimybzz)\
**Post date:** [10월 1, 2025, 1:33오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606/1 "2025-10-01T01:33:16Z")

</div>

1. createOneTimePurchaseOrder 호출 시, SuccessEvent와 processProductGrant가 호출되는 시점이 어떻게 되는지 궁금합니다. 예상으로는 결제만 완료되어 SuccessEvent가 먼저 호출되고, 지급 확인까지 완료되는 시점에 processProductGrant가 호출될 것으로 보여지는데 맞나요?
2. processProductGrant에서 뭘 해야하는지 이해가 잘 안됩니다. `3. 결제 상태 조회하기` 를 통해 파트너사에서 유저에게 아이템 지급까지 완료한 이후 return true를 하라는걸까요?
3. processProductGrant에서 return false 혹은 return true 시에 각각 내부적으로 어떻게 처리되는지 궁금합니다.
4. `3. 결제 상태 조회하기 `가이드를 보면 특정 orderID에 대해서만 조회가 가능한 것으로 보이는데요. 혹시 공지사항에 있는 복원 함수(10월 21일 제공)는 모든 미지급 결제 항목이 조회 가능한 스펙인걸까요?

---

<div class="post-metadata">

**Author:** ![seonjeong](https://yyz1.discourse-cdn.com/flex007/user_avatar/techchat-apps-in-toss.toss.im/seonjeong/32/594_2.png) [@seonjeong](https://techchat-apps-in-toss.toss.im/u/seonjeong)\
**Post date:** [10월 1, 2025, 2:14오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606/2 "2025-10-01T02:14:08Z")

</div>

@kimybzz 님 안녕하세요

1. createOneTimePurchaseOrder 호출 후 사용자가 구글/애플 결제 창에서 인증 완료 후 결제가 완료되면 앱인토스에서 구글/애플과 영수증을 확인하여 검증 작업을 진행합니다. 결제가 성공하면 파트너사의 상품 지급 로직을 수행하고 성공이 되면 Success Event 를 전달드려요.
2. processProductGrant에는 상품 지급 로직을 구현해주시면 됩니다.
3. return true 에는 유저에게 상품을 지급해주시면 됩니다.
4. 결제 상태 조회 API는 헤더값에 특정 유저 키를 입력하고 request 파라미터로 특정 orderId 를 입력해주셔야 합니다. 10월 21일에 제공될 복원 함수에는 모든 미지급 항목이 내려가는지는 추가 확인 후 말씀드릴게요.

개발 가이드 flow에 알아보기 쉽게 작성을 해두었는데 혹시 도움이 되실까요? 부족한 부분이 있다면 말씀해주세요.

> **[앱인토스 개발자센터](https://developers-apps-in-toss.toss.im/iap/develop.html#)**
>
> 앱인토스 개발자센터

---

<div class="post-metadata">

**Author:** ![kimybzz](https://yyz1.discourse-cdn.com/flex007/user_avatar/techchat-apps-in-toss.toss.im/kimybzz/32/917_2.png) [@kimybzz](https://techchat-apps-in-toss.toss.im/u/kimybzz)\
**Post date:** [10월 1, 2025, 2:39오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606/3 "2025-10-01T02:39:02Z")

</div>

**가이드를 여러번 보았지만 processProductGrant와 SuccessEvent의 역할이 정확히 어떻게 구분되어 있는지 이해가 잘 되지 않아서 문의드렸습니다.**

댓글주신 내용으로 보면

먼저 결제 성공 시 processProductGrant가 호출되고,

여기에서 파트너사에서 결제상태 조회 API 사용 및 유저에게 지급까지 완료한 이후 return true; 처리를 하면

토스 내부적으로 해당 아이템의 지급이 완료되었다고 기록함과 동시에 Success Event가 호출된다 라고 이해하면 되는걸까요?

---

<div class="post-metadata">

**Author:** ![seonjeong](https://yyz1.discourse-cdn.com/flex007/user_avatar/techchat-apps-in-toss.toss.im/seonjeong/32/594_2.png) [@seonjeong](https://techchat-apps-in-toss.toss.im/u/seonjeong)\
**Post date:** [10월 1, 2025, 2:49오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606/4 "2025-10-01T02:49:02Z")

</div>

결제 성공 시 processProductGrant 가 호출되고 아이템 지급 후 정상적으로 return true가 오면 success event 를 전달드립니다. return true가 올 때 앱인토스 내부적으로 해당 아이템의 지급이 완료되었다고 기록하고 success event를 전달드립니다.

해당 orderId를 상태조회 API 호출 시에 `PAYMENT_COMPLETED` 로 return해드려요.

SDK 1.1.3 이상에서 결제와 상품 지급이 모두 완료된 경우 return하고 있습니다.

혹시 예제 소스 보시면 이해하시기 편하실까요?

> **[앱인토스 개발자센터](https://developers-apps-in-toss.toss.im/bedrock/reference/framework/%EC%9D%B8%EC%95%B1%20%EA%B2%B0%EC%A0%9C/createOneTimePurchaseOrder.html#%E1%84%90%E1%85%B3%E1%86%A8%E1%84%8C%E1%85%A5%E1%86%BC-%E1%84%8B%E1%85%B5%E1%86%AB%E1%84%8B%E1%85%A2%E1%86%B8%E1%84%80%E1%85%A7%E1%86%AF%E1%84%8C%E1%85%A6-%E1%84%8C%E1%85%AE%E1%84%86%E1%85%AE%E1%86%AB%E1%84%89%E1%85%A5-%E1%84%91%E1%85%A6%E1%84%8B%E1%85%B5%E1%84%8C%E1%85%B5%E1%84%85%E1%85%A9-%E1%84%8B%E1%85%B5%E1%84%83%E1%85%A9%E1%86%BC%E1%84%92%E1%85%A1%E1%84%80%E1%85%B5)**
>
> 앱인토스 개발자센터

---

<div class="post-metadata">

**Author:** ![kimybzz](https://yyz1.discourse-cdn.com/flex007/user_avatar/techchat-apps-in-toss.toss.im/kimybzz/32/917_2.png) [@kimybzz](https://techchat-apps-in-toss.toss.im/u/kimybzz)\
**Post date:** [10월 1, 2025, 4:51오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606/5 "2025-10-01T04:51:53Z")

</div>

넵 이해가 되었습니다. 감사합니다.

추가로 궁금한 점이 있는데요.

processProductGrant 내부에서 아래의 케이스에서는 내부적으로 어떻게 처리되는지 궁금합니다.

1. return false; 하는 경우
2. return 하지 않고 무한대기 시

---

<div class="post-metadata">

**Author:** ![seonjeong](https://yyz1.discourse-cdn.com/flex007/user_avatar/techchat-apps-in-toss.toss.im/seonjeong/32/594_2.png) [@seonjeong](https://techchat-apps-in-toss.toss.im/u/seonjeong)\
**Post date:** [10월 1, 2025, 5:15오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606/6 "2025-10-01T05:15:56Z")

</div>

return false 의 경우, errorCode와 orderId 를 내려드립니다.

orderId 기반으로 상태 조회 API 호출 시에는 `FAILED` 로 return해드려요.

return 하지 않을 경우 내부 timeout으로 끊을 것으로 보이는데 추가 확인이 필요합니다.

늦어도 내일 중으로 답변드리겠습니다.

---

<div class="post-metadata">

**Author:** ![seonjeong](https://yyz1.discourse-cdn.com/flex007/user_avatar/techchat-apps-in-toss.toss.im/seonjeong/32/594_2.png) [@seonjeong](https://techchat-apps-in-toss.toss.im/u/seonjeong)\
**Post date:** [10월 1, 2025, 5:22오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606/7 "2025-10-01T05:22:34Z")

</div>

> [@seonjeong](#):
>
> processProductGrant

return 하지 않을 경우 내부 timeout으로 끊고 있는데요.

현재는 Android OS 는 10초 , iOS는 30초로 되어있어 30초로 통일하게 적용할 예정입니다.

---

<div class="post-metadata">

**Author:** ![kimybzz](https://yyz1.discourse-cdn.com/flex007/user_avatar/techchat-apps-in-toss.toss.im/kimybzz/32/917_2.png) [@kimybzz](https://techchat-apps-in-toss.toss.im/u/kimybzz)\
**Post date:** [10월 1, 2025, 6:18오전 UTC](https://techchat-apps-in-toss.toss.im/t/topic/606/8 "2025-10-01T06:18:02Z")

</div>

자세한 답변 감사합니다.

아까 “10월 21일에 제공될 복원 함수에는 모든 미지급 항목이 내려가는지는 추가 확인 후 말씀드릴게요.”

이 부분에 대해서만 확인 부탁 드립니다.
