บทความทั้งหมด
เจาะลึกใช้เวลาอ่าน 7 นาที

ทุกคำขอคืนเงินของ Apple มาพร้อมเหตุผลแล้ว และ consumptionRequestReason คือวิธีที่คุณอ่านมัน

ตั้งแต่ WWDC24 ทุก CONSUMPTION_REQUEST ของ Apple จะมี consumptionRequestReason ติดมาด้วย ซึ่งเป็นเหตุผลที่ลูกค้าระบุเองว่าทำไมจึงต้องการคืนเงิน มีอยู่ห้าค่า ตั้งแต่ UNINTENDED_PURCHASE ไปจนถึง LEGAL และแต่ละค่าควรเปลี่ยนสิ่งที่คุณส่งกลับภายในกรอบเวลา 12 ชั่วโมงของคุณ นี่คือวิธีอ่านทุกค่า

สมาร์ตโฟนบนโต๊ะสีเข้มแสดงหน้าจอชำระเงินการสมัครสมาชิกอยู่ข้างป้ายกระดาษเปล่า สื่อถึงเหตุผลคำขอคืนเงินของ Apple ที่ตอนนี้มาพร้อมทุก consumption request

ประเด็นสำคัญ

  • ตั้งแต่ App Store Server Notifications เวอร์ชัน 2.11 ที่ประกาศใน WWDC24 ทุกการแจ้งเตือน CONSUMPTION_REQUEST จะมี consumptionRequestReason ซึ่งเป็นสตริงที่ระบุว่าทำไมลูกค้าจึงขอคืนเงิน
  • มีอยู่ห้าค่าพอดี ได้แก่ UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL และ OTHER โดย Apple ส่งมาหนึ่งค่าต่อหนึ่งคำขอ
  • เหตุผลไม่ได้ตัดสินการคืนเงิน มันคือบริบทที่คุณใช้เลือก refundPreference และข้อมูลการใช้งานของคุณก่อนที่กรอบเวลา 12 ชั่วโมงจะปิดลง
  • ตอนนี้ CONSUMPTION_REQUEST เกิดขึ้นกับการสมัครสมาชิกแบบต่ออายุอัตโนมัติด้วย ไม่ใช่แค่สินค้าแบบใช้แล้วหมดไป ดังนั้น consumptionRequestReason จึงเข้าถึงการคืนเงินของคุณได้มากกว่าเดิมมากเมื่อเทียบกับก่อน WWDC24
  • เหตุผล FULFILLMENT_ISSUE เป็นสัญญาณว่าการส่งมอบของคุณเองอาจล้มเหลว การโต้แย้งมันจะเผากรอบเวลาทิ้งและเชื้อเชิญให้เกิด chargeback ในภายหลัง การอนุมัติมักเป็นคำตอบที่ถูกกว่า
  • คุณตอบกลับด้วยการเรียก Send Consumption Information ภายใน 12 ชั่วโมง โดยตั้ง customerConsented เป็น true และ refundPreference เป็น GRANT_FULL, GRANT_PRORATED หรือ DECLINE Apple ถือว่าความต้องการของคุณเป็นเพียงข้อมูลนำเข้าหนึ่งอย่าง ไม่ใช่คำสั่ง
  • การคืนเงินยังคงทำให้คุณเสียค่าประมวลผล การเรียก API พื้นที่จัดเก็บ และเงินจ่ายออกที่การซื้อได้ใช้ไปแล้ว ช่องเหตุผลคือวิธีที่คุณทุ่มการปกป้องเฉพาะกับเคสที่คุ้มค่าแก่การปกป้อง

Apple เปลี่ยนวิธีที่คำขอคืนเงินมาถึงเซิร์ฟเวอร์ของคุณ และนักพัฒนาจำนวนมากไม่เคยสังเกตเห็น ตั้งแต่การอัปเดต App Store Server Notifications 2.11 ที่ประกาศใน WWDC24 ทุกการแจ้งเตือน CONSUMPTION_REQUEST จะมีช่องที่ชื่อว่า consumptionRequestReason ติดมาด้วย มันคือเหตุผลที่ลูกค้าระบุเองในการขอเงินคืน เป็นสตริงธรรมดาหนึ่งค่า มีค่าที่เป็นไปได้ห้าค่า ส่งมาภายใน payload เดียวกับที่คุณมีเวลาสิบสองชั่วโมงในการตอบอยู่แล้ว

เหตุผลคำขอคืนเงินของ Apple ไม่ได้ตัดสินอะไรด้วยตัวมันเอง สิ่งที่มันทำคือบอกคุณว่าคุณกำลังอยู่ในสถานการณ์ไหนจากห้าสถานการณ์ที่แตกต่างกันมาก เพื่อให้คุณเลิกส่งข้อมูลการใช้งานทั่วไปแบบเดียวกันไปยังทั้งการคืนเงินที่ควรอนุมัติและการคืนเงินที่ควรสู้ นี่คือว่าช่องนี้คืออะไร ค่าที่แน่นอนที่ Apple ส่งได้ แต่ละค่าส่งสัญญาณอะไร และมันควรเปลี่ยนความต้องการและหลักฐานที่คุณส่งกลับอย่างไร

consumptionRequestReason คืออะไรกันแน่

consumptionRequestReason เป็นช่องแบบสตริงในอ็อบเจ็กต์ data ของการแจ้งเตือน CONSUMPTION_REQUEST Apple เพิ่มมันเข้ามาใน App Store Server Notifications เวอร์ชัน 2.11 พร้อมกับการเปลี่ยนแปลงกระบวนการคืนเงินใน WWDC24 ก่อนหน้านั้น คำขอมาถึงพร้อมธุรกรรมที่ลงนามแล้วและไม่มีอะไรบอกถึงแรงจูงใจ คุณตอบแบบมืดบอด ตอนนี้เหตุผลที่ลูกค้าระบุเดินทางมาพร้อมกับคำขอ

อ่านคำว่าระบุให้ดี นี่คือเหตุผลที่ลูกค้าเลือกตอนยื่นเรื่องกับ Apple ไม่ใช่ข้อเท็จจริงที่ Apple ตรวจสอบยืนยันแล้ว UNINTENDED_PURCHASE ไม่ได้พิสูจน์ว่าการซื้อไม่ถูกใช้งาน และ UNSATISFIED_WITH_PURCHASE ไม่ได้พิสูจน์ว่าสินค้าเสีย ค่านี้คือเลนส์ ไม่ใช่คำตัดสิน คุณยังต้องจับคู่มันกับบันทึกการส่งมอบและการใช้งานของคุณเอง

มันเดินทางมาในการแจ้งเตือนที่คุณจัดการอยู่แล้ว

CONSUMPTION_REQUEST เป็นกระบวนการเดียวของ Apple ที่ขอหลักฐานจากนักพัฒนาเลยจริงๆ คู่เทียบฝั่ง Google Play คือการรีวิว chargeback ผ่าน orders.reviewrefund เมื่อมีคำขอมาถึง คุณมีเวลา 12 ชั่วโมงในการตอบด้วยการเรียก Send Consumption Information ซึ่งเป็น PUT ไปยัง endpoint การใช้งานของธุรกรรม ตอนนี้ consumptionRequestReason เป็นส่วนหนึ่งของการแจ้งเตือนเดียวกันนั้น จึงไม่มีอะไรใหม่ให้สมัครรับ ถ้าคุณแยกวิเคราะห์ CONSUMPTION_REQUEST อยู่แล้ว เหตุผลก็เป็นแค่ช่องหนึ่งที่คุณอาจมองข้ามไป

ห้าเหตุผล และแต่ละค่ากำลังบอกอะไรคุณ

Apple ระบุไว้ในเอกสารว่ามีห้าค่าพอดี หนึ่งค่ามาต่อหนึ่งคำขอ นี่คือชุดค่าทั้งหมดและวิธีอ่านแต่ละค่าในทางปฏิบัติ

ค่าสิ่งที่ลูกค้าระบุสิ่งที่มันมักหมายถึงสำหรับคุณ
UNINTENDED_PURCHASEพวกเขาไม่ได้ตั้งใจซื้อมักเป็นการแตะโดยบังเอิญหรือคนในครอบครัว ตรวจสอบการส่งมอบและการใช้งานก่อนตัดสินใจ
FULFILLMENT_ISSUEพวกเขารับหรือใช้งานมันไม่ได้ชี้กลับมาที่การส่งมอบของคุณเอง ตรวจสอบบันทึกก่อนโต้แย้ง
UNSATISFIED_WITH_PURCHASEพวกเขาไม่พอใจกับมันความเสียดายของผู้ซื้อ หลักฐานการใช้งานของคุณมีน้ำหนักมากที่สุดตรงนี้
LEGALพวกเขาอ้างเหตุผลทางกฎหมายให้ถือว่าเป็นการอนุมัติ การโต้แย้งคำขอทางกฎหมายไม่คุ้มกับกรอบเวลา
OTHERเหตุผลใดก็ตามที่ไม่ได้ระบุไว้ข้างต้นไม่มีสัญญาณด้วยตัวมันเอง ให้กลับไปใช้ข้อมูลการส่งมอบและการใช้งานของคุณ

UNINTENDED_PURCHASE คือหมวดการแตะโดยบังเอิญ

นี่คือเหตุผลที่ผู้ปกครองเลือกหลังจากลูกซื้อเหรียญ 10,000 เหรียญ หรือผู้ใหญ่ที่กดยืนยันพลาด มันสัมพันธ์กับการซื้อที่ไม่เคยถูกเปิดหรือใช้งาน นั่นแหละคือเหตุผลที่ข้อมูลของคุณเองสำคัญ ถ้าบันทึกของคุณแสดงว่าสินค้าแบบใช้แล้วหมดไปถูกส่งมอบครบและถูกใช้ไปมาก การอ้างว่าซื้อโดยไม่ตั้งใจกับยอดคงเหลือที่ถูกใช้จนหมดย่อมไม่สอดคล้องกัน และช่องว่างนั้นคุ้มค่าที่จะรายงานผ่าน consumptionPercentage

FULFILLMENT_ISSUE ชี้กลับมาที่คุณ

FULFILLMENT_ISSUE เป็นเหตุผลเดียวที่ส่วนหนึ่งเกี่ยวกับแอปของคุณ ไม่ใช่ลูกค้า มันหมายความว่าพวกเขาบอกว่ารับหรือใช้งานสิ่งที่จ่ายเงินไปไม่ได้ ก่อนจะโต้แย้งโดยอัตโนมัติ ให้ดึงบันทึกการส่งมอบของคุณออกมา ถ้าเซิร์ฟเวอร์ของคุณเองแสดงว่าสิทธิ์ไม่เคยถูกเปิดใช้งาน หรือเครดิตไม่เคยถูกบันทึกเข้ามา ลูกค้าถูก และ DECLINE คือความต้องการที่ผิด การสู้กับความล้มเหลวในการส่งมอบที่เกิดขึ้นจริงเป็นการเสียกรอบเวลาไปเปล่าๆ และอาจผลักลูกค้าไปหาธนาคารของพวกเขา ซึ่ง chargeback มีต้นทุนสูงกว่าการคืนเงินเสียอีก

UNSATISFIED_WITH_PURCHASE คือที่ที่หลักฐานเป็นตัวตัดสิน

นี่คือความเสียดายของผู้ซื้อทั่วไป และเป็นเหตุผลที่ข้อมูลการใช้งานของคุณทำงานหนักที่สุด สินค้าใช้งานได้ ลูกค้าใช้มันไปบางส่วนหรือทั้งหมดและตอนนี้ต้องการเงินคืน consumptionPercentage ที่สูง deliveryStatus ที่ซื่อตรงเป็น DELIVERED และ refundPreference เป็น DECLINE หรือ GRANT_PRORATED คือรูปคดีที่ Apple กำลังขอให้คุณสร้างขึ้น ส่งตัวเลขไป ไม่ใช่ข้อโต้แย้ง

LEGAL และ OTHER

LEGAL หมายความว่าลูกค้าอ้างสิทธิ์ทางกฎหมายหรือทางกำกับดูแล คนที่มีเหตุผลอาจเห็นต่างกันได้ แต่ตามหลักแล้วนี่ไม่ใช่กรอบเวลาสำหรับการฟ้องร้อง จงอนุมัติแล้วไปต่อ OTHER คือช่องรวมทุกอย่างที่ Apple ใช้เมื่อเหตุผลที่ระบุไม่ตรงกับสี่ค่าข้างต้นเลย มันไม่มีสัญญาณด้วยตัวเอง ดังนั้นให้จัดการ OTHER เหมือนกับคำขอที่ไม่มีเหตุผลเลยทุกประการ นำด้วยสถานะการส่งมอบและหลักฐานการใช้งานของคุณ

การ์ดพับเปล่าห้าใบวางเรียงเป็นพัดบนโต๊ะสีเข้มข้างโทรศัพท์ สื่อถึงห้าค่าของ consumptionRequestReason ที่ลูกค้าสามารถส่งได้

เหตุผลเปลี่ยนคำตอบของคุณอย่างไร ทีละช่อง

คุณตอบกลับ CONSUMPTION_REQUEST ด้วยการเรียก Send Consumption Information พร้อม body แบบ ConsumptionRequest เหตุผลควรกำหนดรูปสามช่องใน body นั้น

customerConsented ต้องเป็น true

Apple ยอมรับการส่งข้อมูลเฉพาะเมื่อ customerConsented เป็น true เท่านั้น ซึ่งหมายความว่าลูกค้ายินยอมให้แบ่งปันข้อมูลการใช้งาน ถ้าคุณไม่มีความยินยอมนั้น คุณจะส่งข้อมูลไม่ได้เลย ไม่ว่าเหตุผลจะเป็นอะไร ไม่มีความยินยอม ไม่มีหลักฐาน และคำขอจะถูกตัดสินโดยไม่มีตัวเลขของคุณ

deliveryStatus และ consumptionPercentage คือตัวถือข้อเท็จจริง

deliveryStatus บอกว่าคุณได้ส่งมอบการซื้อที่ใช้งานได้หรือไม่ ถ้ามันเป็นอะไรก็ตามที่ไม่ใช่ DELIVERED Apple กำหนดให้ consumptionPercentage ต้องเป็น 0 เมื่อคุณส่งมอบจริง consumptionPercentage คือจำนวนเต็มในหน่วย milliunits ตั้งแต่ 0 ถึง 100,000 โดย 100,000 หมายความว่าลูกค้าใช้การซื้อทั้งหมดไปแล้ว คู่นี้คือแกนกลางเชิงข้อเท็จจริงของคุณ และเป็นสิ่งที่ควรถือคดี FULFILLMENT_ISSUE หรือ UNSATISFIED_WITH_PURCHASE ไม่ใช่ตัวเหตุผลเอง

refundPreference คือคันโยกหนึ่งเดียวของคุณ

refundPreference คือที่ที่คุณระบุสิ่งที่คุณต้องการ Apple ระบุไว้ในเอกสารสามค่า ได้แก่ GRANT_FULL, GRANT_PRORATED และ DECLINE อ่านเหตุผล ชั่งน้ำหนักมันกับข้อมูลของคุณ แล้วเลือก FULFILLMENT_ISSUE ที่มีการส่งมอบล้มเหลวในบันทึกของคุณเอนไปทาง GRANT_FULL UNSATISFIED_WITH_PURCHASE บนสินค้าที่ถูกใช้จนหมดเอนไปทาง DECLINE หรือ GRANT_PRORATED LEGAL เอนไปทาง GRANT_FULL

การคืนเงินทำให้คุณเสียอะไรจริงๆ

ช่องเหตุผลสำคัญเพราะการคืนเงินแทบไม่เคยเป็นแค่ยอดขายที่หลุดออกจากบัญชีแยกประเภทของคุณ สำหรับสินค้าแบบใช้แล้วหมดไปที่ทำงานจบไปแล้ว คุณได้จ่ายเงินเพื่อทำให้มันสำเร็จ แพ็กเครดิตที่เรียก API การอนุมานแบบเสียเงิน ชุดภาพที่สร้างขึ้นซึ่งเผาเวลา GPU ไฟล์ส่งออกที่จัดเก็บซึ่งกินค่าบิลพื้นที่จัดเก็บของคุณ เงินจ่ายให้ครีเอเตอร์ที่คุณส่งไปแล้ว ต้นทุนเหล่านั้นยังคงถูกใช้ไปเมื่อการซื้อถูกย้อนกลับ ร้านค้าคืนเงินให้ลูกค้า แต่มันไม่ได้คืนค่าประมวลผลของคุณ

นั่นคือเหตุผลว่าทำไมเหตุผลจึงคุ้มค่าแก่การอ่าน สมมติว่าลูกค้าซื้อเครดิต 5,000 เครดิตซึ่งแต่ละเครดิตกระตุ้นการเรียก API แบบเสียเงิน ใช้ไป 4,000 เครดิต แล้วยื่นเรื่องภายใต้ UNSATISFIED_WITH_PURCHASE deliveryStatus ของคุณคือ DELIVERED consumptionPercentage ของคุณคือ 80,000 milliunits และความต้องการแบบ DECLINE หรือ GRANT_PRORATED คือความต่างระหว่างการแบกค่าบิล API เองกับการเรียกคืนมันได้เกือบทั้งหมด ทีนี้พลิกเหตุผลเป็น FULFILLMENT_ISSUE ที่มีบันทึกแสดงว่าเครดิตไม่เคยถูกบันทึกเข้ามา การเดินหมากที่ซื่อตรงและถูกกว่าคือ GRANT_FULL ก่อนที่ลูกค้าจะยกระดับไปหาธนาคารของพวกเขา

การอ่านเหตุผลโดยไม่ตอบสนองเกินเหตุ

กับดักคือการปฏิบัติต่อเหตุผลราวกับเป็นหลักฐาน UNINTENDED_PURCHASE ไม่ใช่คำสารภาพว่าสินค้าไม่ถูกใช้งาน และ LEGAL ก็ไม่ได้เป็นการอ้างสิทธิ์ทางกฎหมายที่แท้จริงเสมอไป เหตุผลช่วยจำกัดขอบเขตของสถานการณ์ บันทึกการส่งมอบและข้อมูลการใช้งานของคุณต่างหากที่คลี่คลายมัน เมื่อทั้งสองสอดคล้องกับลูกค้า จงอนุมัติแต่เนิ่นๆ และในราคาถูก เมื่อทั้งสองขัดแย้งกับลูกค้า ความขัดแย้งนั้น ที่แสดงออกในรูปของ deliveryStatus และ consumptionPercentage คือสิ่งที่ทรงพลังที่สุดที่คุณส่งได้ RefundHalt อ่าน consumptionRequestReason ในทุก CONSUMPTION_REQUEST และจับคู่มันกับข้อมูลการใช้งานจริงของคุณโดยอัตโนมัติ เพื่อให้แต่ละเหตุผลได้รับการตอบสนองที่สมควรภายในกรอบเวลา 12 ชั่วโมง

การเปลี่ยนแปลงนี้เล็กและพลาดสังเกตได้ง่าย แต่มันขยับบทสนทนาเรื่องการคืนเงินมาอยู่ฝ่ายที่เป็นประโยชน์ต่อคุณ ตอนนี้ Apple กำลังบอกคุณว่าเพราะอะไร ก่อนที่คุณจะตอบ จงใช้มันให้เป็นประโยชน์

คำถามที่พบบ่อย

consumptionRequestReason คืออะไร
consumptionRequestReason เป็นช่องแบบสตริงที่ Apple ใส่ไว้ในทุกการแจ้งเตือน CONSUMPTION_REQUEST เพิ่มเข้ามาใน App Store Server Notifications เวอร์ชัน 2.11 ที่ WWDC24 มันระบุเหตุผลของลูกค้าเองในการขอคืนเงิน ให้บริบทแก่คุณก่อนที่จะตอบด้วยข้อมูลการใช้งานภายในกรอบเวลา 12 ชั่วโมง
ค่าที่เป็นไปได้ของ consumptionRequestReason มีอะไรบ้าง
มีห้าค่า ได้แก่ UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL และ OTHER Apple ส่งมาหนึ่งค่าพอดีต่อหนึ่งคำขอคืนเงิน แต่ละค่าชี้ไปยังสถานการณ์ที่ต่างกัน ตั้งแต่การแตะโดยบังเอิญไปจนถึงเหตุผลทางกฎหมายที่ระบุ และแต่ละค่าควรกำหนดรูป refundPreference และข้อมูลการใช้งานที่คุณส่งกลับ
เหตุผลการคืนเงินตัดสินว่าฉันจะได้เก็บเงินไว้หรือไม่
ไม่ consumptionRequestReason คือบริบท ไม่ใช่คำตัดสิน Apple ยังคงเป็นผู้ตัดสินการคืนเงิน โดยชั่งน้ำหนัก refundPreference ของคุณ deliveryStatus และ consumptionPercentage ของคุณ รวมถึงประวัติของลูกค้า เหตุผลบอกคุณว่าควรสร้างรูปคดีแบบไหน ข้อมูลการส่งมอบและการใช้งานของคุณต่างหากที่สร้างมันขึ้นมา
ฉันมีเวลานานแค่ไหนในการตอบ CONSUMPTION_REQUEST
คุณมีเวลา 12 ชั่วโมงนับจากที่ได้รับการแจ้งเตือน CONSUMPTION_REQUEST ในการเรียก Send Consumption Information การเรียกนั้นต้องตั้ง customerConsented เป็น true มิฉะนั้น Apple จะปฏิเสธ พลาดกรอบเวลาไปแล้วการคืนเงินจะถูกตัดสินโดยไม่มีข้อมูลใดๆ ของคุณ
consumptionRequestReason ปรากฏกับการคืนเงินการสมัครสมาชิกด้วยหรือไม่
ใช่ การอัปเดต WWDC24 เดียวกันที่เพิ่ม consumptionRequestReason ยังเริ่มส่ง CONSUMPTION_REQUEST สำหรับการสมัครสมาชิกแบบต่ออายุอัตโนมัติด้วย ไม่ใช่แค่สินค้าแบบใช้แล้วหมดไป สำหรับแอปส่วนใหญ่ นั่นหมายความว่าตอนนี้ช่องเหตุผลเข้าถึงการคืนเงินที่สำคัญที่สุดในเชิงการเงิน

แหล่งข้อมูลและเนื้อหาเพิ่มเติม

RefundHalt

ระบบอัตโนมัติสำหรับการคืนเงินบน App Store และ Google Play

อ่านต่อ

เจาะลึกใช้เวลาอ่าน 8 นาที

การตรวจสอบ chargeback ของ Google Play ให้เวลาคุณ 24 ชั่วโมงในการโต้กลับ นี่คือสิ่งที่ต้องส่ง

เมื่อธนาคารดึงค่าใช้จ่าย Google Play กลับคืน Google จะส่ง PendingRefundReviewNotification มายังเซิร์ฟเวอร์ของคุณและเริ่มนาฬิกานับ 24 ชั่วโมง ตอบกลับผ่าน ReviewRefund API ด้วยความชอบเรื่องการคืนเงินและหลักฐานการใช้งานจริง มิฉะนั้นข้อพิพาทจะถูกตัดสินโดยไม่มีคุณ นี่คือกระบวนการทั้งหมด ทีละฟิลด์

Deep diveใช้เวลาอ่าน 7 นาที

แนบ appAccountToken กับทุกการซื้อบน App Store ไม่เช่นนั้นคุณจะปกป้องการคืนเงินไม่ได้

Apple ส่ง CONSUMPTION_REQUEST ไปยังเซิร์ฟเวอร์ของคุณเมื่อลูกค้าขอคืนเงิน แต่ธุรกรรมไม่เคยบอกว่าพวกเขาเป็นใคร appAccountToken คือ UUID ที่เชื่อมโยงการซื้อกลับไปยังผู้ใช้ของคุณ ตั้งค่ามันแล้วคุณจะตอบ Apple ด้วยข้อมูลจริงได้ ข้ามมันไปแล้วคุณก็ได้แต่เดา

คำขอคืนเงินครั้งต่อไปกำลังมา

ตั้งค่า RefundHalt ได้ในเวลาพอ ๆ กับการอ่านอีเมลฝ่ายช่วยเหลืออีกฉบับเกี่ยวกับการคืนเงินที่คุณไม่มีโอกาสโต้แย้ง