아아.. “가이드에 있는 에러코드는 아래와 같은데, 여기에는 FAILED 라는 항목이 없습니다.” 질문은 무시해주세요 잠시 착각했습니다!!
그렇다면 추가 질문이 있습니다.
위와 같은 방식으로 FAILED가 발생하면, 토스 내부적으로 그 타이밍에 미결주문으로 처리되어 getPendingOrders에 등록이 되는 방식인가요?
상태조회에서 ORDER_IN_PROGRESS 응답이 오려면 어떤 케이스가 발생해야 하는 걸까요?
제가 계속 질문을 드리는 이유는… QR 결제테스트 도중에 processProductGrant 에서 return false; 를 하였고,
이후 getPendingOrders에 해당 주문이 등록된 것을 확인하였으나
상태조회 API를 사용하면 status 응답이 PAYMENT_COMPLETED로 오고 있어서 그렇습니다.
getPendingOrders 에 있는 주문이거나 processProductGrant 상태가 되면
서버에서 결제상품을 유저에게 지급해야 하는데,
이 때 항상 상태조회 API로 확인 후에 지급을 하려고 하거든요.
이 과정이 없으면 누군가 임의로 orderID를 아무거나 생성하여 서버에 요청하면 서버는 지급할수 밖에 없으니까요
그런데 상태조회에서 어떤 status가 왔을 때 지급해야 하는지 굉장히 혼동되는 상황입니다.
제가 올린 다른 문의 글에서는 비슷한 상황에 ORDER_IN_PROGRESS가 온다고 답변이 있어 더더욱 혼란스럽습니다.
그런데 문제가 있었던 orderID 상품에 대해 환불을 하려고 하는데요.
토스 앱에서 환불하기 메뉴를 들어가봐도 아무것도 나오지 않고
콘솔에서도 결제 내역 / 정산 내역 / 환불 내역 에 아무것도 안나오는데요.
아직 해당 상품이 getPendingOrders에 남아있는데 지급처리가 아직 되지 않아서 그런걸까요?
감사합니다… 자꾸 질문드려서 죄송합니다만 또 이슈가 생겼는데요 (이번에는 기술적인 이슈입니다)
유니티 게임의 경우에는 대부분의 로직을 유니티 단계에서 구현하고
토스 API를 호출해야 되는 시점에서만 Vite프로젝트 내의 tsx파일에서 구현을 할텐데요.
processProductGrant 상황에서 클라이언트가 서버에게 “주문조회 해보고 유저에게 지급해줘!” 라는 명령어를 내릴 때
유니티 단에서 구현한 통신으로 서버에 전송을 하게 됩니다. (저희는 UnityWebRequest를 사용)
이 때, 서버에서 지급이 완료되었다는 응답도 마찬가지로 유니티에서 구현한 통신으로 reponse를 받아야 하는데
토스 결제창이 떠 있는 상황에서는 유니티가 background 상태로 전환되어 있기 때문에 응답을 받지 못합니다.
결국 서버에서는 지급을 하였지만 클라이언트가 응답을 받지 못해 processProductGrant 에서 타임아웃이 발생합니다.
이걸 해결하기 위해서는 결제 시에 서버와의 통신을 유니티가 아닌 vite 프로젝트에서 구현을 할 수 밖에 없는 상황인데요.
좀 난감합니다.
해당 내용에 대해 내부적으로 유니티를 테스트 하실 때 이슈가 되었을 것 같은데, 논의 된 내용이 없으셨을까요?
관련해서 어떻게 해결했는지 도움을 받고 싶습니다.
————————————————————————————————————————-
꼼수로 일단 processProductGrant 에서 return false; 를 해버리고
바로 completeProductGrant로 지급하는 방식으로 우회해 보았습니다만,
processProductGrant 에서 return false를 하는 순간, 결제창에서 환불에 대한 화면으로 전환이 되더군요 ㅠㅠ
그래서 이 꼼수도 사용을 못할 것 같습니다.