당신의 소비 데이터는 Apple의 환불 결정에 정보를 줄 뿐, 그 결정을 좌우하지 않는다
고객이 Apple에 환불을 요청하면, 당신에게는 소비 데이터를 보낼 12시간이 주어집니다. Apple 자체 문서는 그것을 판결이 아니라 여러 요인 중 하나라고 부릅니다. 당신의 데이터가 실제로 무엇을 움직이는지, DECLINE에도 왜 여전히 환불로 끝날 수 있는지, 그리고 그 한 번의 밀어붙임이 달러로 얼마의 가치가 있는지 살펴봅니다.

핵심 요약
- 고객이 환불을 요청하면 Apple은 당신의 서버에 CONSUMPTION_REQUEST 알림을 보내고, Send Consumption Information 엔드포인트를 통해 소비 데이터로 응답할 12시간을 줍니다. 이 창을 놓치면 Apple은 당신의 의견 없이 결정을 내립니다.
- Apple 자체 표현으로는, App Store는 환불을 결정할 때 여러 요인을 사용하며, 당신이 보내는 소비 정보는 그 결정에 정보를 주기 위해 사용됩니다. 당신의 refundPreference는 그 요인들 중 하나일 뿐이며, 판결이 아닙니다.
- 당신은 refundPreference로 거부 선호, 전액 승인 선호, 또는 비례 승인 선호를 보낼 수 있습니다. Apple은 그것을 저울질합니다. 그래서 팀들은 거부 선호로 표시한 구매가 여전히 환불되는 것을 보게 되며, 이는 문서대로 작동하는 것입니다.
- customerConsented가 true가 아니면 Apple은 당신의 소비 데이터를 거부합니다. 고객이 데이터 공유에 동의하지 않았다면, Apple의 지침은 그 알림에 아예 응답하지 말라는 것이며, 그 동의를 얻을 책임은 오로지 당신에게 있습니다.
- WWDC24 이후 CONSUMPTION_REQUEST는 소모성 상품뿐 아니라 자동 갱신 구독에 대해서도 발생하므로, 동일한 12시간 응답이 이제 예전보다 훨씬 많은 환불에 도달합니다.
- 자동 갱신 구독의 경우 Apple이 소비량을 스스로 계산하고 비례 선호를 금지하므로, 그곳에서 당신의 지렛대는 완전히 소비되었다고 설명할 수 있는 소모성 상품에서보다 얇습니다.
- 그 구매를 제공하기 위해 이미 쓴 돈, 즉 연산, 서드파티 API 호출, 스토리지는 Apple이 환불을 승인하든 안 하든 돌아오지 않습니다. 당신의 소비 응답은 환불을 바꿀 수 있지만, 제공을 위해 이미 지불한 비용은 결코 바꾸지 못합니다.
고객이 환불을 누르면, 1분 안에 당신의 서버는 Apple로부터 CONSUMPTION_REQUEST를 받습니다. 당신에게는 소비 데이터로 답할 12시간이 있고, 그 응답을 거부권으로 읽고 싶어집니다. 거부 선호를 보내고 돈을 지킨다, 하고 말입니다. 그것은 거부권이 아닙니다. Apple 자체 문서는, App Store가 환불 요청을 승인할지 거부할지 판단하는 데 여러 요인을 사용하며, 당신이 제공하는 소비 정보는 그 환불 결정에 정보를 주기 위해 사용된다고 말합니다. 결정하는 것이 아니라, 정보를 줍니다. 이 글은 당신의 소비 데이터가 실제로 무엇을 움직이는지, 거부 선호로 표시한 구매가 왜 여전히 환불될 수 있는지, 그리고 당신이 이미 쓴 돈을 계산에 넣었을 때 이 모든 작업이 얼마의 가치가 있는지 따라갑니다.
Apple은 당신의 소비 데이터로 실제로 무엇을 하는가
Send Consumption Information 엔드포인트는, 환불이 문제가 되는 바로 그 순간에 당신이 Apple에 맥락을 건넬 수 있도록 존재합니다. 그것이 당신에게 결정권을 건네주지는 않습니다. 이 흐름을 올바른 순서로 읽는 것이, 합리적인 기대를 설정하는 것과 문서화된 동작에 대해 버그를 제출하는 것 사이의 차이입니다.
App Store가 결정하고, 당신은 추천한다
Apple은 이 분담에 대해 명확합니다. Send Consumption Information 참조 문서에서 Apple은, App Store가 환불 요청을 승인할지 거부할지 판단하는 데 여러 요인을 사용하며, 당신이 제공하는 소비 정보를 그 환불 결정에 정보를 주기 위해 사용한다고 씁니다. refundPreference 필드 자체에 대해 Apple은, 당신의 환불 선호가 App Store가 환불 결정에 정보를 주기 위해 사용하는 여러 요인 중 하나라고 밝힙니다. 그러므로 당신이 보낼 수 있는 가장 강한 신호, 단호한 거부 선호조차도 당신이 통제하지 못하는 모델로 들어가는 하나의 입력일 뿐입니다. 고객의 이력, 그들이 밝힌 이유, 상품 유형, 그리고 Apple 자체의 사기 신호가 모두 당신의 응답과 나란히 같은 모델 안에 놓입니다.
CONSUMPTION_REQUEST는 이제 소모성 상품뿐 아니라 구독도 포함한다
이것은 한때 소모성 상품에 관한 이야기였습니다. WWDC24 이후, 고객이 소모성 인앱 구매 또는 자동 갱신 구독에 대해 환불을 요청하면 CONSUMPTION_REQUEST 알림이 발생합니다. 이는 대상 범위의 큰 확장입니다. 동일한 12시간 응답이 이제 구독 환불에도 적용되지만, 그곳에서 당신의 지렛대는 다릅니다. Apple이 자동 갱신 상품의 소비량을 스스로 계산하고 당신의 비례 선호를 받아들이지 않기 때문입니다. 응답이 얼마나 세게 밀 수 있는지 결정하기 전에, 모든 요청에서 상품 유형을 읽으십시오.
당신이 보낼 수 있도록 허용된 다섯 가지 입력
Apple이 받아들이는 V2 요청 본문은 작으며, 다섯 개의 필드가 일을 하고 그중 셋이 필수입니다. 각각은 Apple이 저울질하는 입력이지 결과를 강제하는 스위치가 아닙니다. 다음은 응답에 넣을 수 있는 내용과 그것이 Apple에게 알려주는 바입니다.
| 필드 | 필수 | Apple에게 무엇을 알려주는가 |
|---|---|---|
| customerConsented | 예 | 고객이 이 환불 데이터 공유에 동의했는지. true여야 하며 아니면 Apple이 요청을 거부한다. |
| consumptionStatus | 아니오 | 얼마나 사용되었는지: 미신고, 미소비, 부분 소비, 또는 완전 소비. |
| deliveryStatus | 아니오 | 당신의 앱이 정상 작동하는 구매를 제공했는지, 아니면 기록에 남기고 싶은 문제에 부딪혔는지. |
| sampleContentProvided | 아니오 | 구매 전에 무료 샘플, 체험, 또는 기능 설명을 제공했는지. |
| refundPreference | 아니오 | 당신이 추천하는 결과: 거부 선호, 전액 승인 선호, 또는 비례 승인 선호. |
12시간의 창, 그리고 대부분의 팀이 놓치는 동의 관문
두 가지 메커니즘이 당신의 응답이 애초에 셈에 들어가는지를 결정합니다. 하나는 시계입니다. 다른 하나는 선의의 응답 상당수를 문 앞에서 막는 동의 플래그입니다.
12시간 안에 응답하라, 그러지 않으면 순간은 지나간다
Apple의 지시는 분명합니다. CONSUMPTION_REQUEST 알림을 받은 지 12시간 안에 응답하라. 그것이 창의 전부입니다. 환불 요청은 당신의 다음 영업일을 기다리지 않으며, 늦게 도착한 소비 응답은 Apple이 결코 저울질하지 않은 응답입니다. 당신이 이것들을 손으로 답하고 있다면, 이 12시간 시계야말로 주말에, 공휴일에, 당신 시간대의 새벽 3시에 가장 먼저 조용히 무너지는 부분입니다. 응답은 신뢰할 수 있으려면 자동화되어야 합니다. 이 창은 당신의 팀이 언제 깨어 있는지 신경 쓰지 않기 때문입니다.

고객이 동의하지 않으면 당신은 데이터를 보낼 수 없다
이것이 팀들이 걸려 넘어지는 관문입니다. customerConsented 값이 true가 아닌 Send Consumption Information 요청을 Apple은 거부합니다. Apple의 표현으로는, 고객이 동의를 제공했다면 API를 호출하고 소비 데이터를 보내어 응답하라, 그렇지 않다면 CONSUMPTION_REQUEST 알림에 응답하지 말라, 입니다. Apple은 또한 책임을 분명히 당신에게 지웁니다. 고객의 개인 데이터를 공유하기 전에 당신은 고객으로부터 유효한 동의를 얻어야 하며, 개발자인 당신이 그것을 얻는 데 대해 오로지 책임을 진다, 고 합니다. 그러므로 모든 요청에서의 첫 질문은 그들이 얼마나 사용했는가가 아니라, 이 고객이 우리가 Apple에게 알리도록 동의했는가입니다. 동의 없음, 응답 없음, 그리고 환불은 당신 측의 진술을 제외한 모든 것 위에서 결정됩니다.
Apple의 환불 결정을 실제로 움직이는 것
응답이 추천이라면, 정직한 질문은 그것이 얼마나 추천하느냐입니다. 답은, 당신의 데이터는 사람이 망설이는 바로 그 지점에서 가장 중요하고, 결과가 애초에 정말로 의심스럽지 않았던 지점에서 가장 덜 중요하다는 것입니다.
왜 거부 선호를 보내고도 여전히 환불을 보게 되는가
개발자들은 고객이 완전히 소비한 구매에 거부 선호를 보내고도 Apple이 그것을 환불하는 것을 지켜봤다고 보고합니다. 그것은 고장 난 API가 아닙니다. Apple은 여러 요인을 저울질한다고 당신에게 말했으며, 어떤 주어진 요청에서는 그 요인들 중 일부가 완전히 소비된 소모성 상품을 능가할 수 있습니다. 이력이 깨끗한 고객, Apple이 강하다고 취급하는 진술된 이유, 소액 금액, 첫 요청. 당신의 응답은 환불에 맞서 밀었습니다. 다른 입력들이 더 세게 밀었습니다. 교훈은 응답을 멈추라는 것이 아니라, 깨끗한 소모성 상품이 항상 살아남으리라 기대하기를 멈추라는 것입니다. 신호가 진정으로 뒤섞인 곳에서는 부분 소비 상태, 기록된 제공 문제, 그리고 정직한 선호가 아슬아슬한 사례를 당신 쪽으로 기울일 수 있는 입력입니다.
추천은 달러로 얼마의 가치가 있는가
환불은 판매의 가격이 아닙니다. 그것은 판매의 가격에, 당신이 그것을 제공하기 위해 이미 쓴 모든 것을 더한 것이며, 소비 응답이 건드리는 것은 언제나 첫 부분뿐입니다.
요청이 도착할 때쯤이면 돈은 이미 쓰였다
Apple이 환불할지 물을 때쯤이면 고객은 이미 그것을 사용했습니다. 소모성 상품에서 그것은 연산이 돌았고, 서드파티 API 호출이 청구되었고, 이미지나 토큰이나 생성물이 만들어졌고, 스토리지가 기록되었다는 뜻입니다. 그것들은 당신 측의 이미 지불된 비용이며, Apple이 환불을 거부해도 돌아오지 않고, Apple이 환불을 승인하면 두 번 잃습니다. 당신의 소비 응답은 아슬아슬한 사례에서 판매 가격을 되찾을 수 있습니다. 당신이 이미 넘겨준 상품의 비용은 되찾을 수 없습니다. 그것이 완전히 소비된 구매가 환불하기에 비싼 것인 진짜 이유이며, 그것이 얼마나 오래전에 구매되었는지와는 아무 상관이 없습니다.
- 판매 가격: Apple 수수료를 뺀 당신의 순수익으로, 환불이 승인되면 취소된다. 당신의 응답이 영향을 미칠 수 있는 유일한 부분.
- 제공 비용: 연산, API 호출, 스토리지, 그리고 그 구매에 대해 당신이 이미 지급한 모든 것. 결정이 어떻든 사라졌다.
- 인력 시간: 손으로 답하는 모든 환불은 누군가의 하루에서 몇 분이며, 12시간 창은 그 몇 분이 불편한 시간에 떨어짐을 뜻한다.
- 당신이 놓치는 패턴: 거듭거듭 환불하는 고객은 당신이 요청들을 가로질러 소비와 이력을 추적할 때만 보이는 비용이며, 하나하나를 일회성으로 다루면 보이지 않는다.
Google Play는 같은 질문을 어떻게 다루는가
Apple만이 당신에게 의견을 구한 뒤 스스로 결정하는 스토어는 아닙니다. Google Play는 은행 지불 거절에 대해 평행한 흐름을 돌리며, 그 형태는 같습니다. 당신이 증거를 보내고 스토어가 결정합니다. 차이는 시계와, 당신이 보낼 수 있도록 허용된 것에 있습니다.
| 질문 | App Store | Google Play |
|---|---|---|
| 트리거 | CONSUMPTION_REQUEST 알림 | 지불 거절에 대한 PendingRefundReviewNotification |
| 당신의 창 | 12시간 | 24시간 |
| 어떻게 답하는가 | Send Consumption Information | orders.reviewrefund |
| 당신의 추천 | refundPreference: 거부 선호, 전액 승인 선호, 비례 승인 선호 | refundPreference: APPROVE, DECLINE, 또는 NEUTRAL |
| 누가 결정하는가 | App Store | Google Play, 또는 지불 거절 시 은행 |
두 스토어에 걸친 요점은 동일합니다. 당신의 일은 정확한 소비 증거와 정직한 선호를 가지고 창 안에서 답하는 것입니다. 스토어의 일은 결정하는 것입니다. 이 둘을 혼동하는 것이, 응답이 추천일 뿐이라며 창을 무시하거나, 응답을 거부권으로 믿었다가 환불이 그래도 착지할 때 허를 찔리거나 하는 팀이 되는 이유입니다. 둘 다 옳지 않습니다. 매번 답하고, 정확히 답하고, 결과를 당신이 내린 결정이 아니라 당신이 정보를 준 결정으로 다루십시오.
RefundHalt는 Apple이 CONSUMPTION_REQUEST를 보내는 그 순간에 그것을 받아내고, 동의를 확인하고, 소비 상태, 제공 상태, 그리고 증거 기반 환불 선호를 조립하여, 당신의 팀 중 누구도 시계를 지켜보지 않아도 12시간 창 안에서 답합니다. Google Play의 지불 거절 심사에 대해서도 그 24시간 창 안에서 같은 일을 합니다. 당신은 Apple이 당신의 뜻대로 결정하게 만들 수 없습니다. 그러나 당신은 Apple이 당신 측의 진술 없이 결정을 내리는 일이 결코 없도록, 모든 환불에서, 제때에 확실히 할 수 있습니다.
자주 묻는 질문
- Apple에 소비 데이터를 보내면 환불이 멈추나요?
- 그것만으로는 아닙니다. Apple의 문서는 App Store가 환불을 결정하는 데 여러 요인을 사용하며 당신의 소비 데이터가 그 결정에 정보를 주기 위해 사용된다고 말합니다. 거부 선호라는 refundPreference를 포함한 당신의 응답은 Apple이 저울질하는 하나의 입력이므로, 아슬아슬한 사례를 움직일 수 있지만 거부를 보장하지는 않습니다. 특히 고객이 완전히 소비한 구매에서는요.
- CONSUMPTION_REQUEST에 응답하는 데 시간이 얼마나 있나요?
- 12시간입니다. Apple은 CONSUMPTION_REQUEST 알림을 받은 지 12시간 안에 Send Consumption Information 엔드포인트를 통해 응답하라고 말합니다. 창이 지난 뒤 도착하는 응답은 Apple이 결코 저울질하지 않은 응답이며, 그래서 이 응답은 잠들어 있을 수도 있는 사람이 처리하기보다 자동화되어야 합니다.
- 거부 선호를 보냈는데 왜 Apple은 구매를 환불했나요?
- 거부 선호는 명령이 아니라 추천이기 때문입니다. Apple은 당신의 환불 선호가 결정에 정보를 주기 위해 사용하는 여러 요인 중 하나라고 밝힙니다. 어떤 요청에서는 고객의 이력, 그들이 밝힌 이유, 금액, 그리고 Apple 자체의 사기 신호가 당신의 선호를 능가할 수 있으므로, 거부 선호 이후의 환불은 문서대로 작동하는 흐름입니다.
- 소비 데이터를 보내려면 고객 동의가 필요한가요?
- 예. customerConsented가 true가 아니면 Apple은 Send Consumption Information 요청을 거부하며, 그 지침은 고객이 동의하지 않았다면 CONSUMPTION_REQUEST에 아예 응답하지 말아야 한다는 것입니다. Apple은 또한 개발자인 당신이 고객의 데이터를 공유하기 전에 유효한 동의를 얻는 데 대해 오로지 책임을 진다고 밝힙니다.
- 소비 흐름은 구독에도 작동하나요, 아니면 소모성 상품에만 작동하나요?
- 둘 다입니다, WWDC24 이후로요. CONSUMPTION_REQUEST는 이제 소모성 인앱 구매 또는 자동 갱신 구독에 대해 발생합니다. 자동 갱신 구독의 경우 Apple이 소비량을 스스로 계산하고 비례 선호를 받아들이지 않으므로, 당신의 지렛대는 사용량을 직접 설명할 수 있는 소모성 상품에서보다 좁습니다.
출처 및 추가 자료
- Apple Developer: Send Consumption Information (12-hour window, informs refund decisions)
- Apple Developer: ConsumptionRequest (the request body fields)
- Apple Developer: refundPreference (one of a variety of factors)
- Apple Developer: customerConsented (consent is required)
- Apple Developer: notificationType (CONSUMPTION_REQUEST covers subscriptions)
- Google Play Developer API: Method orders.reviewrefund (24-hour chargeback review)
RefundHalt
App Store와 Google Play 환불 자동 처리
계속 읽기
모든 Google Play 구매에 난독화 계정 id를 새겨라, 그렇지 않으면 지불 거절이 추적할 방법 없이 도착한다
Google Play는 구매마다 안정적인 해시 id를 찍을 수 있게 해 주고, 분쟁이 도착하면 그것을 되읽어 줍니다. 설정해 두면 지불 거절 검토가, 사용 내역을 보고해야 하는 바로 그 사용자에게 정확히 연결됩니다. 건너뛰면 24시간의 시계 아래에서 맨 주문 id 하나로 추측하며 맞춰야 합니다.
은행 명세서의 알 수 없는 청구는 지불 거절로 바뀌고, 지불 거절은 환불보다 더 큰 비용이 듭니다
고객이 당신의 앱이 청구한 것을 구별하지 못하면, 그들은 당신이 아니라 은행에 연락하고, 그 분쟁은 지불 거절로 착지합니다. Apple은 모든 것을 apple.com/bill로 표시하며 아무것도 변경하지 못하게 합니다. Google Play는 명세서 표시 이름을 설정할 수 있게 해줍니다. 각각의 비용과 당신이 통제할 수 있는 것을 여기서 설명합니다.