จัดการการสมัครใช้บริการและการซื้อครั้งเดียว

คุณอาจต้องดำเนินการจัดการการสมัครใช้บริการหรือการซื้อแบบครั้งเดียวเพื่อดำเนินธุรกิจในแต่ละวัน เช่น ฝ่ายบริการลูกค้าอาจต้องคืนเงินเต็มจำนวนหรือบางส่วนให้แก่ผู้ใช้ หรือคุณอาจต้องเพิกถอนสิทธิ์ในบางกรณี คุณสามารถจัดการคำสั่งซื้อจาก Play Console หรือหากต้องการจัดการคำสั่งซื้อจากระบบของคุณเอง ให้ใช้ Google Play Developer API

ยกเลิกการสมัครใช้บริการ

ผู้ใช้หรือนักพัฒนาแอปสามารถเริ่มยกเลิกการสมัครใช้บริการได้

การยกเลิกที่ผู้ใช้เป็นผู้เริ่ม

ผู้ใช้ยกเลิกการสมัครใช้บริการ Google Play ได้ทุกเมื่อโดยใช้ Play Store คุณต้องระบุตัวเลือกให้ผู้ใช้ยกเลิกการสมัครใช้บริการในแอปและเว็บไซต์ด้วย (หากมี)

วิธีง่ายที่สุดในการช่วยให้ผู้ใช้ยกเลิกด้วยความสมัครใจคือการระบุ Deep Link ในแอปไปยัง Play Store เพื่อให้ผู้ใช้ดูและจัดการการสมัครใช้บริการได้

การยกเลิกที่นักพัฒนาแอปเป็นผู้เริ่ม

ในฐานะนักพัฒนาแอป คุณอาจต้องเรียกให้เกิดการยกเลิกจากแบ็กเอนด์ด้วย purchases.subscriptions.cancel API ช่วยให้คุณยกเลิกการซื้อการสมัครใช้บริการได้ เช่น คุณอาจใช้วิธีนี้เพื่อปิดบริการเดิม การยกเลิกการสมัครใช้บริการจะไม่เป็นการคืนเงิน และผู้ใช้จะยังคงเข้าถึงได้จนถึงวันสิ้นสุดช่วงเวลาที่เรียกเก็บเงินปัจจุบัน

วิธีนี้ช่วยให้คุณระบุการยกเลิกประเภทต่อไปนี้ในพารามิเตอร์เนื้อหาคำขอ cancellationType ได้

  • USER_REQUESTED_STOP_RENEWALS: ยกเลิกการสมัครใช้บริการราวกับว่าผู้ใช้ยกเลิกจาก Play Store การชำระเงินแบบผ่อนชำระจะยังคงดำเนินต่อไปตามระยะเวลาผูกมัดที่เหลืออยู่ ผู้ใช้สามารถกู้คืนการสมัครใช้บริการจาก Play Store ได้ก่อนที่การสมัครใช้บริการจะหมดอายุ หรือสมัครใช้บริการอีกครั้งหลังจากหมดอายุแล้วหากเปิดใช้สำหรับแพ็กเกจเริ่มต้น

  • DEVELOPER_REQUESTED_STOP_PAYMENTS: ยกเลิกการสมัครใช้บริการและป้องกันไม่ให้มีการชำระเงินเพิ่มเติม ผู้ใช้จะกู้คืนหรือสมัครใช้บริการอีกครั้งจาก Play Store ไม่ได้ แต่คุณสามารถอนุญาตให้ผู้ใช้สมัครใช้บริการอีกครั้งได้ภายในแอป

อนุญาตให้ผู้ใช้กู้คืนการสมัครใช้บริการที่ยังไม่หมดอายุ

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

หากต้องการระบุว่าผู้ใช้สามารถกู้คืนการยกเลิกได้ ให้ส่งคําขอ POST ไปยัง purchases.subscriptions.cancel API และตั้งค่าพารามิเตอร์คําขอ cancellationType เป็นค่า USER_REQUESTED_STOP_RENEWAL

ตัวอย่าง

  • โทเค็นการซื้อของการสมัครใช้บริการ 1a2b3c4d5e6f7g8h9i0j
  • ชื่อแพ็กเกจแอปพลิเคชัน com.your.app
  • รหัสการสมัครใช้บริการ your-subscription-product

คำขอ HTTP POST

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptions/your-subscription-product/tokens/1a2b3c4d5e6f7g8h9i0j:cancel

เนื้อหาของคำขอ

{
  "cancellationType": "USER_REQUESTED_STOP_RENEWAL"
}

อนุญาตให้ผู้ใช้สมัครใช้บริการที่หมดอายุแล้วอีกครั้ง

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

อนุญาตให้ผู้ใช้สมัครใช้บริการอีกครั้งได้เฉพาะในแอปพลิเคชันของคุณ

หากคุณตั้งค่าพารามิเตอร์ cancellationType เป็น DEVELOPER_REQUESTED_STOP _PAYMENTS หรือไม่ได้ตั้งค่าพารามิเตอร์ cancellationType ผู้ใช้จะกู้คืนการสมัครใช้บริการจากศูนย์การสมัครใช้บริการของ Play ไม่ได้ อย่างไรก็ตาม ผู้ใช้สามารถลงชื่อสมัครใช้บริการอีกครั้งผ่านแอปของคุณได้หากจำเป็น

การดำเนินการนี้จะทริกเกอร์SUBSCRIPTION_CANCELEDการแจ้งเตือนแบบเรียลไทม์สำหรับนักพัฒนาแอป จัดการการยกเลิกเหล่านี้ตามที่อธิบายไว้ในการยกเลิก

เลื่อนการเรียกเก็บเงิน

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

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

ตัวอย่างวิธีใช้การเรียกเก็บเงินที่เลื่อนเวลาการชำระเงินมีดังนี้

  • ให้สิทธิ์เข้าถึงแบบไม่มีค่าใช้จ่ายแก่ผู้ใช้เป็นข้อเสนอพิเศษ เช่น ให้สิทธิ์ทดลองใช้ฟรี 1 สัปดาห์แก่สมาชิกเดิมที่ตอบแบบสํารวจความคิดเห็น
  • ให้สิทธิ์เข้าถึงแบบไม่มีค่าใช้จ่ายแก่ลูกค้าเพื่อเป็นการดูแลลูกค้า เช่น หลังจากการหยุดทำงานเป็นเวลานานซึ่งอาจส่งผลต่อความสามารถในการใช้บริการของคุณ

การเรียกเก็บเงินสามารถเลื่อนได้ตั้งแต่ 1 วันไปจนถึง 1 ปีต่อการเรียก API 1 ครั้ง หากต้องการเลื่อนเวลาสิ้นสุดการให้สิทธิ์ออกไปอีก ให้เรียกใช้ API อีกครั้งก่อนวันที่หมดอายุใหม่

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

ตัวอย่าง

  1. บริการสตรีมมิง FitnessGoals ต้องการจัดโปรโมชันเพื่อกระตุ้นให้ออกกำลังกายเป็นประจำในเดือนกุมภาพันธ์

  2. บริษัทจึงตัดสินใจมอบบริการเพิ่มอีก 1 เดือนแก่ผู้สมัครใช้บริการทุกคนที่ออกกำลังกายด้วย FitnessGoals อย่างน้อย 10 ครั้งในเดือนกุมภาพันธ์

  3. จากนั้นจะติดตามผลลัพธ์ของภารกิจ และในวันที่ 1 มีนาคม ทางบริษัทจะเรียกใช้ subscriptions.defer API สําหรับการซื้อการสมัครใช้บริการที่ใช้งานอยู่ทั้งหมดของผู้ใช้ที่ผ่านภารกิจในเดือนกุมภาพันธ์

  4. ผู้ใช้เหล่านี้จะได้รับสิทธิประโยชน์จากวิดีโอออกกำลังกายแบบปกติเพิ่มอีก 1 เดือนโดยไม่มีค่าใช้จ่าย และผู้ใช้จะบอกเพื่อนๆ ทุกคนว่า FitnessGoals ช่วยดูแลสุขภาพให้พวกเขาได้อย่างไร

ออกเงินคืนและเพิกถอน

มีหลายสถานการณ์ที่คุณอาจต้องการคืนเงินหรือเพิกถอนสิทธิ์เข้าถึงการสมัครใช้บริการหรือการซื้อแบบครั้งเดียว

คืนเงินเต็มจำนวนสำหรับคำสั่งซื้อตามรหัสคำสั่งซื้อ

orders.refund API จะช่วยให้คุณคืนเงินเต็มจำนวนสำหรับคำสั่งซื้อใดก็ได้ภายใน 3 ปีหลังจากซื้อ เมธอด orders.refund จะได้รับพารามิเตอร์การเพิกถอนซึ่งระบุว่าควรเพิกถอนสิทธิ์เข้าถึงหรือไม่ นอกเหนือจากการคืนเงิน

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

ตัวอย่าง

  1. แอปอีสปอร์ต Football-Not-Soccer ตัดสินใจที่จะจับฉลากแจกเสื้อเวอร์ชวลฟรีให้กับผู้ใช้ทุกคนที่ซื้อชุดแข่งใหม่ของทีมภายใน 24 ชั่วโมงแรก เพื่อฉลองการเริ่มต้นการแข่งขันฟุตบอลโลกครั้งใหม่

  2. Football-Not-Soccer ใช้ orders.refund API โดยไม่ส่งพารามิเตอร์เพิกถอนเพื่อคืนเงินค่าซื้อเสื้อให้กับผู้ชนะ

เพิกถอนและคืนเงินสำหรับการสมัครใช้บริการด้วยโทเค็นการซื้อ

ในบางกรณี คุณอาจต้องเพิกถอนสิทธิ์เข้าถึงการสมัครใช้บริการของผู้ใช้และคืนเงิน Play Billing มีวิธีการเพิกถอน ซึ่งรวมถึงการคืนเงินเต็มจํานวนและการคืนเงินตามสัดส่วนผ่าน subscriptionsv2.revoke API เมื่อใช้ปลายทางนี้ คุณสามารถระบุ revocationContext เพื่อกำหนดวิธีคำนวณเงินคืน

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

ตัวอย่าง

  • ซื้อด้วยโทเค็นการซื้อ 1a2b3c4d5e6f7g8h9i0j
  • แอปพลิเคชันที่มีชื่อแพ็กเกจ com.your.app
  • เจตนาในการคืนเงินตามสัดส่วน

คำขอ HTTP POST

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptionsv2/tokens/1a2b3c4d5e6f7g8h9i0j:revoke

เนื้อหาของคำขอ

{
  "revocationContext": {
    "proratedRefund": {}
  }
}

การคืนเงินเต็มจำนวน

หากต้องการสิ้นสุดการสมัครใช้บริการและคืนเงินเต็มจำนวนของช่วงเวลาที่เรียกเก็บเงินปัจจุบัน ให้คืนเงินเต็มจำนวน ใช้ฟังก์ชัน purchases.subscriptionsv2.revoke และตั้งค่า "fullRefund": {} เป็นประเภทการคืนเงิน

ตัวอย่าง

  1. Maria มีการสมัครใช้บริการแพ็กเกจรายเดือนแบบต่ออายุใหม่อัตโนมัติ 30 วันสำหรับสตรีมมิง SuperMovies Maria พบปัญหาทางเทคนิคที่ทำให้เข้าถึงเนื้อหาไม่ได้ เธอติดต่อฝ่ายบริการลูกค้าในวันที่ 3 ของรอบการเรียกเก็บเงิน โดยระบุว่าเธอไม่เคยได้รับสิทธิ์เข้าถึงการสมัครใช้บริการ

  2. ฝ่ายบริการลูกค้าค้นหารายละเอียดการซื้อการสมัครใช้บริการของ Maria ในระบบและโทรหา purchases.subscriptionsv2.revoke เพื่อขอเงินคืนเต็มจำนวน

  3. ฝ่ายบริการลูกค้าแจ้งว่า Maria ควรได้รับเงินคืนเต็มจำนวนจากค่าสมัครใช้บริการและเธอไม่ได้สมัครใช้บริการแพ็กเกจนั้นอีกต่อไป

การคืนเงินตามสัดส่วน

หากต้องการสิ้นสุดการสมัครใช้บริการและคืนเงินบางส่วนสำหรับระยะเวลาการมีสิทธิ์ที่เหลืออยู่ ให้คืนเงินตามสัดส่วน ใช้ฟังก์ชัน purchases.subscriptionsv2.revoke และตั้งค่า "proratedRefund": {} เป็นประเภทการคืนเงิน

ตัวอย่าง

  1. Maria มีการสมัครใช้บริการแพ็กเกจรายเดือนแบบต่ออายุใหม่อัตโนมัติ 30 วันสำหรับสตรีมมิง SuperMovies เธอใช้บริการมาอย่างมีความสุขมาระยะหนึ่งแล้ว Maria ติดต่อฝ่ายบริการลูกค้าในวันที่ 15 ของรอบการเรียกเก็บเงินเพื่อแจ้งว่าเธอจะย้ายไปต่างประเทศและจะใช้บริการไม่ได้อีกต่อไปนับจากวันถัดไปแล้ว

  2. ฝ่ายบริการลูกค้าค้นหารายละเอียดการซื้อการสมัครใช้บริการของ Maria ในระบบและโทรหา purchases.subscriptionsv2.revoke เพื่อขอเงินคืนตามสัดส่วน

  3. ฝ่ายบริการลูกค้าแจ้งว่า Maria ควรได้รับเงินคืนประมาณ 50% ของค่าสมัครใช้บริการ และสิทธิ์เข้าถึงบริการจะสิ้นสุดลงทันที