Handle purchase
Last updated
Was this helpful?
Last updated
Was this helpful?
ก่อนจะไปลงรายละเอียดกันจะอ้างอิงถึงบทความก่อนหน้านี้ก่อน 👉 Products/Subscriptions จะเห็นเรา sku ที่เรา setup ไวที่ google ได้นั้นจะมี 2 แบบ (Product/Subscription) การ handle จะแตกต่างกันนะครับ
เนื่องจาก SKU แบบนี้นั้น payment method ที่ Google แสดงให้ user เลือกใช้ได้นั้นมี 2 แบบด้วยกันคือ
Purchase แบบทราบผลทันที
Pending purchase แบบทราบผลภายหลัง
แบบนี้เนื่องจาก App เราจะทราบผลจากการที่ google เก็บเงินกับ user เลยทันทีดังนั้นแบบนี้เป็น case ที่เราสามารถ handle ได้ง่ายสุดครับ ก็ไม่มีอะไรมากหากเราได้รับ callback จาก google แล้วว่า transaction นั้น purchased เราสามารถให้ App เรา call API backend เพื่อ update entitlement ได้เลยทันที ผมสรุปเป็น sequence diagram มาให้เห็นภาพ
กรณีนี้จะมีความยุ่งยากกว่าเยอะครับ เนื่องจาก google จะส่งเป็น QR promptpay กลับมาให้ User แล้วจะ callback transaction กลับมาให้ App เราเป็น status pending หลังจากนั้นก็ขึ้นอยู่กับ User แล้วละว่าเค้าจะไปจ่ายเมื่อไหร่
ดังนั้นเราต้อง handle event ต่างๆ ที่อาจจะเกิดขึ้นได้ เพราะการจ่ายด้วย QR นั้น User จำเป็นต้อง Switch app เพื่อไปเปิด App ธนาคารในการจ่าย มีโอกาสที่จ่ายแล้วจะไม่กลับมาที่ App เราทันทีเลยก็ได้ หรือ Kill App เราทิ้งไป หรืออาจจะไม่เอาไปจ่ายเลยก็ได้
ลองดู sequence diagram เพื่อความเข้าใจมากขึ้น
NOTE
ในกรณีนี้หากรายการยังค้างเป็น pending ไวอยู่ google จะไม่อนุญาตให้ซื้อ SKU เดิมซ้ำไปได้นะครับ ต้องรอจนกว่า User จะจ่ายหรือ User ไป Cancel รายการออก หรือรอให้มันถึงเวลา Expired ไปเอง ผมไม่รู้เวลาที่แน่นอนนะครับ เวลาที่ใกล้จะหมดเวลา google จะส่ง push notification ไปหา User เองด้วยว่ารายการที่ pending อยู่นั้นนะจะ expired เมื่อไหร่
จาก sequence จะเห็นว่า google จะ notify มาหาที่ Backend เราผ่าน Google Pub/Sub ด้วยนะครับ ทำให้เราสามารถ handle ในเรื่องการ Allow entitlement ให้กับ User ได้ 2 ส่วนเลย
ในเรื่องที่ google notify มาหา Backend เรานั้นผมจะลงรายละเอียดอีกทีในหัวข้อ Realtime Notification อีกทีครับ เพราะมีรายละเอียดที่ต้องเล่าเยอะพอสมควรเลย
สำหรับ SKU แบบนี้นั้น google ไม่อนุญาตให้จ่ายด้วย payment method แบบ pending purchase ได้นะครับ(สบายไป) เนื่องจาก model subscription นั้นมีความต้องการเก็บเงินต่อเนื่อง(Auto Recurring) ใน next bill หากปล่อยให้ User จ่ายด้วย QR promptpay ได้ละก็ next bill จะเก็บเงินยังไงละ แต่เราจะต้องปวดหัวในส่วนที่ Backend เราจะต้อง handle event ต่างๆ ที่จะเกิดขึ้นได้
Event ที่เกิดขึ้นพวกนี้ไม่ได้เกิดจากการที่ User มาทำอะไรบน App เรา แต่เป็น System google ทำงาน Auto แล้ว Tigger มาบอกเรา หรือ User ไปเข้าหน้า Subscription management ของ Google โดยตรง
System ก็อย่างเช่น Renew, Expired
User action ก็อย่างเช่น Canceled หรือ Resubscribe
ดังนั้นเมื่อได้รับ Trigger แล้วเราก็ต้อง Action ให้ถูกตามที่ควรจะเป็น เพื่อให้ User ไม่พบปัญหาใดๆ ครับ ลองดู sequence diagram เพื่อความเข้าใจมากขึ้น
จาก sequence จะเห็นว่าผมแยกเป็น 2 ส่วนใหญ่ๆ คือ First time purchase และ Subscription process และจะเห็นว่าใน Section Subscription process นั้นจะทำให้ Profile ของ User เรานั้นเปลี่ยนไป เมื่อได้รับ Notify ที่ Google ส่งมาบอกเราผ่าน Google Pub/Sub
ในเรื่องที่ google notify มาหา Backend เรานั้นผมจะลงรายละเอียดอีกทีในหัวข้อ Realtime Notification อีกทีครับ เพราะมีรายละเอียดที่ต้องเล่าเยอะพอสมควรเลย
การ Handle Purchase เราควรแยกตามประเภท SKU โดยที่ SKU Product นั้นจะต้องระวังเป็นพิเศษกรณี User เลือกจ่ายด้วย Pending purchase(QR Promptpay) ส่วน SKU Subscription นั้นสิ่งที่ต้อง Handle เยอะเป็นพิเศษเลยคือ Backend ของเราเอง จาก Sequence ทั้ง 3 แบบที่ผมวาดขึ้นมาเป็นตัวอย่างให้ดู จะได้เป็น Architecture แบบคราวๆ ได้ดังนี้ครับ
ก็จบไปอีก 1 หัวข้อใหญ่ๆ ภายใต้หัวข้อ Google In-App นะครับ
Reference