Mọi khoản hoàn tiền khi nâng cấp gói đăng ký là quyết định của cửa hàng, không phải của bạn, và nó trừ thẳng vào doanh thu của bạn
Khi khách hàng chuyển lên bậc cao hơn, cửa hàng phát hành khoản hoàn tiền nâng cấp gói đăng ký cho những ngày chưa dùng trên gói cũ, và nó tự động làm giảm doanh thu của bạn. Đây là cách hoàn tiền nâng cấp hoạt động trên App Store và Google Play, và lý do Apple giữ số tiền này khỏi máy chủ của bạn.

Điểm chính
- Khoản hoàn tiền nâng cấp gói đăng ký là tự động. Khi khách hàng chuyển lên bậc cao hơn giữa chu kỳ, cửa hàng ghi có hoặc hoàn tiền cho những ngày chưa dùng trên gói cũ mà không hỏi bạn, và số tiền đó trừ vào doanh thu bạn đã ghi nhận.
- Trên App Store, một lần nâng cấp có hiệu lực ngay và Apple hoàn lại phần tiền tính theo tỷ lệ của gói đăng ký ban đầu. Một lần hạ cấp chờ đến ngày gia hạn tiếp theo và không hoàn lại gì cả.
- Apple không gửi số tiền hoàn của lần nâng cấp đến máy chủ của bạn. Giao dịch nâng cấp được đánh dấu isUpgraded, nhưng trường giá vẫn hiển thị giá đầy đủ của bậc mới, nên doanh thu bạn tính từ App Store Server Notifications bị cao hơn thực tế.
- Báo cáo tài chính App Store Connect là nơi duy nhất ghi nhận khoản hoàn tiền nâng cấp theo tỷ lệ. Nhân viên Apple cho biết số tiền này không có sẵn qua App Store Server API, Notifications hay StoreKit.
- Google Play không trả tiền về thẻ khi nâng cấp. Nó ghi có thời gian chưa dùng hoặc thu phần chênh lệch giá, và điều nào xảy ra phụ thuộc vào chế độ thay thế bạn đặt. Mặc định là WITH_TIME_PRORATION.
- Khoản hoàn tiền nâng cấp không phải là yêu cầu hoàn tiền của khách hàng. Không có CONSUMPTION_REQUEST và không có phiên xem xét bồi hoàn, nên không có cửa sổ 12 hours hay 24 hours và không có gì để tranh biện. Bạn đối soát nó, bạn không chống lại nó.
- Chế độ thay thế là một quyết định về doanh thu. WITH_TIME_PRORATION trao cho khách hàng thời gian trả phí tăng thêm mà bạn cung cấp với chi phí của bậc cao hơn, còn CHARGE_PRORATED_PRICE tính phần chênh lệch ngay bây giờ, nên mặc định sai làm rò rỉ biên lợi nhuận từng chút một, mỗi lần một lượt nâng cấp.
Một khách hàng chạm nâng cấp, chuyển từ bậc five dollar của bạn sang bậc ten dollar của bạn, và bạn ghi nhận một khoản bán lớn hơn. Cùng lúc đó cửa hàng làm một việc khác, và bạn không bao giờ thấy nó. Nó trao cho khách hàng đó một khoản hoàn tiền nâng cấp gói đăng ký cho những ngày họ đã trả trên gói cũ, và số tiền đó trừ vào doanh thu của bạn. Không ai hỏi bạn. Trên App Store, bạn thậm chí sẽ không tìm thấy số tiền này trong các sự kiện mà máy chủ của bạn nhận được.
Đây không phải khoản hoàn tiền bạn có thể chống lại. Nó không phải Apple CONSUMPTION_REQUEST và không phải phiên xem xét bồi hoàn của Google Play. Nó là việc tính theo tỷ lệ, được cài sẵn trong cách cả hai cửa hàng cho người dùng đổi gói, và nó tự chạy mỗi khi người đăng ký chuyển lên một bậc. Đây là bản chất thật của một khoản hoàn tiền nâng cấp trên mỗi cửa hàng, lý do Apple giữ số tiền này khỏi máy chủ của bạn, và cái giá phải trả cho một thiết lập Google Play sai.
Khoản hoàn tiền nâng cấp gói đăng ký thực chất là gì
Một khoản hoàn tiền nâng cấp là việc cửa hàng quyết toán cho khoảng thời gian khách hàng đã trả nhưng sẽ không dùng. Nó chẳng liên quan gì đến khiếu nại, tranh chấp, hay chính sách hoàn tiền của bạn. Nó kích hoạt chỉ dựa trên cơ chế của việc đổi gói.
Đây là tính theo tỷ lệ, không phải khiếu nại của khách hàng
Khi một người đăng ký chuyển lên bậc cao hơn giữa kỳ thanh toán, họ đã trả đến hết kỳ đó theo giá cũ. Cửa hàng bù lại cho họ phần chưa dùng. Apple phát hành một khoản hoàn tiền theo tỷ lệ của gói đăng ký ban đầu. Google Play ghi có giá trị chưa dùng vào gói mới. Không cái nào đi qua một luồng mà bạn có thể phản hồi, và không cái nào chờ bạn phê duyệt.
Chỉ nâng cấp mới kích hoạt nó
Hướng của thay đổi quyết định số tiền. Trên App Store, một lần nâng cấp là chuyển sang sản phẩm được xếp hạng cao hơn trong cùng nhóm đăng ký, và chỉ lần chuyển đó mới tức thời và được hoàn tiền. Một lần hạ cấp là chuyển xuống hạng thấp hơn, và nó có hiệu lực ở lần gia hạn tiếp theo mà không hoàn tiền. Một lần chuyển ngang là chuyển giữa các sản phẩm cùng hạng, và thời điểm của nó phụ thuộc vào các thời hạn liên quan. Xếp hạng sản phẩm sai trong App Store Connect và một thay đổi bạn nghĩ là nâng cấp sẽ hành xử như một thứ khác.
| Thay đổi trên App Store | Khi nào có hiệu lực | Điều gì xảy ra với số tiền |
|---|---|---|
| Nâng cấp lên bậc cao hơn | Ngay lập tức | Apple hoàn lại phần tiền theo tỷ lệ của gói đăng ký ban đầu |
| Hạ cấp xuống bậc thấp hơn | Vào ngày gia hạn tiếp theo | Không hoàn tiền, gia hạn với giá thấp hơn |
| Chuyển ngang, cùng thời hạn đã trả trước | Ngay lập tức | Gói đăng ký mới bắt đầu, dịch vụ trả phí tiếp tục |
| Chuyển ngang, thời hạn khác nhau | Vào ngày gia hạn tiếp theo | Không hoàn tiền giữa chu kỳ |
Vì sao App Store giấu khoản hoàn tiền nâng cấp khỏi máy chủ của bạn
Đây là phần làm hỏng việc báo cáo doanh thu. Apple phát hành khoản hoàn tiền nâng cấp, nhưng không bao giờ báo cho máy chủ của bạn biết đã hoàn bao nhiêu.
isUpgraded là tín hiệu duy nhất, và giá thì sai
Giao dịch mới đến với isUpgraded được đặt thành true, cho bạn biết đã có một thay đổi gói. Trường giá trên giao dịch đó vẫn hiển thị giá niêm yết đầy đủ của bậc mới, không phải số tiền Apple đã đòi lại từ bậc cũ. Không một App Store Server Notification nào mang theo con số hoàn tiền. Theo chính lời Apple trên các diễn đàn nhà phát triển, số tiền hoàn theo tỷ lệ không có sẵn qua App Store Server API, Notifications hay StoreKit, và báo cáo App Store Connect là nguồn của bạn cho mọi mục đích kế toán tài chính.
Báo cáo tài chính là bản ghi trung thực duy nhất
Báo cáo tài chính và báo cáo bán hàng App Store Connect ghi nhận khoản hoàn tiền nâng cấp theo tỷ lệ, vì chính các báo cáo đó quyết định số tiền Apple thực sự trả cho bạn. Điều đó khiến chúng trở thành nguồn sự thật cho bất kỳ người đăng ký nào từng chuyển lên bậc cao hơn. Hãy dựng kế toán của bạn từ các báo cáo, và coi các sự kiện máy chủ là tín hiệu về quyền sử dụng, không phải doanh thu.

Nó tốn của bạn bao nhiêu, tính bằng tiền
Khoản hoàn tiền nâng cấp không phải lỗi làm tròn. Đó là doanh thu thật, và trên Google Play bạn còn chọn cho đi bao nhiêu thời gian chưa dùng.
Khoản hoàn tiền là doanh thu bạn đã ghi nhận
Lấy một người đăng ký ở bậc 9.99 mỗi tháng của bạn, người nâng cấp lên 19.99 vào day 20 của một 30 day cycle. Khoảng một phần ba tháng chưa dùng, nên Apple hoàn lại khoảng 3.33 trong số 9.99 ban đầu. Bạn không mất toàn bộ khoản bán. Bạn trả lại phần khách hàng đã trả trước và sẽ không dùng. Điều quan trọng là việc trả lại này là tự động và nó rơi vào khoản bán cũ, nên doanh thu bạn đã tính bị co lại sau đó. Nhân điều đó với mỗi người đăng ký chuyển lên bậc cao hơn giữa chu kỳ và đó là một dòng bạn nên nhìn thấy được, không phải một khoảng chênh bạn phát hiện trong lần chi trả.
Trên Google Play, chế độ thay thế là đòn bẩy chi phí thật sự
Google Play không trả tiền về thẻ khi nâng cấp. Nó quyết toán thời gian chưa dùng theo một trong vài cách, và bạn chọn cách nào bằng cách truyền một chế độ thay thế khi khởi chạy luồng mua. Lựa chọn đó quyết định bạn trao cho khách hàng thời gian trả phí hay tính cho họ phần chênh lệch. Google khuyến nghị CHARGE_PRORATED_PRICE cho nâng cấp và DEFERRED cho hạ cấp, nhưng mặc định của thư viện là WITH_TIME_PRORATION, nên một luồng bạn chưa bao giờ cấu hình lại lặng lẽ ghi có thời gian.
| Chế độ thay thế Google Play | Khi nào có hiệu lực | Điều gì xảy ra với thời gian chưa dùng |
|---|---|---|
| WITH_TIME_PRORATION (mặc định) | Ngay lập tức | Được ghi có thành thời gian thêm trên gói mới, ngày thanh toán tiếp theo bị đẩy lùi |
| CHARGE_PRORATED_PRICE (chỉ nâng cấp) | Ngay lập tức | Phần chênh lệch giá cho kỳ còn lại được thu ngay, ngày thanh toán không đổi |
| WITHOUT_PRORATION | Ngay lập tức | Không quyết toán gì lúc này, giá mới bắt đầu ở lần gia hạn tiếp theo |
| CHARGE_FULL_PRICE | Ngay lập tức | Giá đầy đủ của gói mới được thu ngay, giá trị còn lại được chuyển tiếp hoặc tính theo tỷ lệ |
| DEFERRED | Vào lần gia hạn tiếp theo | Gói hiện tại chạy đến khi hết hạn, rồi gói mới bắt đầu |
Cách để hoàn tiền nâng cấp không làm sổ sách của bạn bất ngờ
Bạn không thể tắt việc tính theo tỷ lệ, và bạn cũng sẽ không muốn thế, vì đó chính là điều khiến việc đổi gói công bằng với khách hàng. Điều bạn có thể làm là nhìn thấy nó, định giá nó, và giữ nó tách khỏi những khoản hoàn tiền mà bạn thực sự có thể tranh biện.
Đối soát các lần nâng cấp Apple với báo cáo tài chính
Vì số tiền hoàn không bao giờ đến được máy chủ của bạn, báo cáo tài chính và báo cáo bán hàng App Store Connect là nơi duy nhất một khoản hoàn tiền nâng cấp theo tỷ lệ xuất hiện. Đối soát doanh thu người đăng ký với các báo cáo đó mỗi kỳ, và đừng tính doanh thu từ một tổng cộng dồn của Server Notifications. Cờ isUpgraded cho bạn biết đã có thay đổi. Báo cáo cho bạn biết nó tốn bao nhiêu.
Chọn chế độ thay thế Google Play một cách có chủ đích
Hãy truyền một chế độ thay thế cho mỗi lần đổi gói một cách có chủ đích. Dùng CHARGE_PRORATED_PRICE khi bạn muốn thu phần chênh lệch giá ngay trong một lần nâng cấp. Chỉ để nguyên WITH_TIME_PRORATION khi bạn thực sự muốn cho khách hàng phần thời gian còn dư. Dùng DEFERRED cho hạ cấp để bạn giữ doanh thu hiện tại đến khi hết kỳ hạn. Mặc định là một quyết định, và mặc định sai cho đi biên lợi nhuận từng chút một, mỗi lần một lượt nâng cấp.
Giữ khoản hoàn tiền nâng cấp tách khỏi những khoản hoàn tiền bạn có thể tranh biện
Một khoản hoàn tiền nâng cấp là tự động và chung cuộc theo thiết kế. Nó không phải một khách hàng đòi lại tiền của mình. Những khoản hoàn tiền bạn thực sự có thể tác động là những khoản do khách hàng khởi tạo, khi Apple gửi một CONSUMPTION_REQUEST và cho bạn 12 hours để phản hồi, và khi Google Play mở một phiên xem xét bồi hoàn qua orders.reviewrefund với cửa sổ 24 hours. Hãy gắn nhãn dữ liệu của bạn sao cho hai loại này không bao giờ lẫn vào nhau. Một dòng bạn đối soát. Dòng kia bạn trả lời, khi đồng hồ đang chạy.
Tóm lại
Khi một khách hàng nâng cấp gói đăng ký, cửa hàng tự động quyết toán thời gian chưa dùng thay cho họ. Apple hoàn lại phần tiền theo tỷ lệ của gói cũ ngay lập tức và không bao giờ gửi con số đó đến máy chủ của bạn, nên báo cáo tài chính App Store Connect là bản ghi chính xác duy nhất. Google Play ghi có thời gian hoặc thu phần chênh lệch tùy theo chế độ thay thế bạn đặt, và mặc định trao cho khách hàng thời gian trả phí mà bạn cung cấp bằng chi phí của mình. Không cái nào trong số đó đi qua một CONSUMPTION_REQUEST hay một phiên xem xét bồi hoàn, nên không có gì để tranh biện. Hãy đối soát khoản hoàn tiền nâng cấp, đặt chế độ Google Play của bạn một cách có chủ đích, và giữ nó tách khỏi những khoản hoàn tiền bạn vẫn có thể chống lại.
Câu hỏi thường gặp
- Một khoản hoàn tiền nâng cấp gói đăng ký có hỏi sự phê duyệt của tôi không?
- Không. Một khoản hoàn tiền nâng cấp gói đăng ký là tự động. Khi một khách hàng chuyển lên bậc cao hơn giữa chu kỳ, cửa hàng tự quyết toán thời gian chưa dùng trên gói cũ, không có yêu cầu gửi đến bạn và không có cửa sổ để phản hồi. Apple hoàn lại phần tiền theo tỷ lệ của gói đăng ký ban đầu, và Google Play ghi có thời gian chưa dùng hoặc thu phần chênh lệch giá tùy theo chế độ thay thế bạn đặt.
- Vì sao doanh thu App Store của tôi không khớp với khoản chi trả sau các lần nâng cấp?
- Vì Apple không gửi số tiền hoàn của lần nâng cấp đến máy chủ của bạn. Giao dịch nâng cấp mang isUpgraded được đặt thành true, nhưng trường giá vẫn hiển thị giá đầy đủ của bậc mới, và không một App Store Server Notification nào bao gồm khoản hoàn tiền. Doanh thu tính từ các sự kiện máy chủ đếm khoản bán mới và bỏ sót khoản hoàn tiền trên gói cũ, nên nó bị cao cho đến khi bạn đối soát với báo cáo tài chính App Store Connect.
- Google Play có trả tiền về thẻ khi một khách hàng nâng cấp không?
- Không. Google Play xử lý thời gian chưa dùng như một khoản ghi có, không phải hoàn tiền mặt. Tùy theo chế độ thay thế, nó hoặc ghi có thời gian còn lại vào gói mới và đẩy lùi ngày thanh toán tiếp theo, hoặc thu phần chênh lệch giá cho kỳ còn lại. Chế độ mặc định là WITH_TIME_PRORATION, vốn ghi có thời gian.
- Tôi có thể tranh biện một khoản hoàn tiền nâng cấp gói đăng ký không?
- Không. Một khoản hoàn tiền nâng cấp không phải là yêu cầu hoàn tiền của khách hàng. Không có CONSUMPTION_REQUEST từ Apple và không có phiên xem xét bồi hoàn từ Google Play, nên không có cửa sổ 12 hours hay 24 hours và không có gì để gửi. Một khoản hoàn tiền nâng cấp thì bạn đối soát. Bạn chỉ tranh biện những khoản hoàn tiền và bồi hoàn do khách hàng khởi tạo.
- Một lần hạ cấp có cho khách hàng một khoản hoàn tiền không?
- Không. Trên App Store, một lần hạ cấp có hiệu lực vào ngày gia hạn tiếp theo và không hoàn lại gì cả, vì khách hàng giữ mức cao hơn cho đến khi kỳ đã trả phí kết thúc. Trên Google Play, cách được khuyến nghị để xử lý một lần hạ cấp là chế độ thay thế DEFERRED, giữ gói hiện tại đến khi hết hạn rồi bắt đầu gói thấp hơn.
- Tôi nên dùng chế độ thay thế Google Play nào cho một lần nâng cấp?
- Google khuyến nghị CHARGE_PRORATED_PRICE cho nâng cấp, vốn thu phần chênh lệch giá cho kỳ còn lại ngay lập tức và giữ nguyên ngày thanh toán. WITH_TIME_PRORATION mặc định thì thay vào đó ghi có thời gian chưa dùng thành dịch vụ thêm ở bậc cao hơn, nên chỉ dùng nó khi bạn có ý định cho đi phần thời gian đó.
Nguồn và tài liệu đọc thêm
- Apple Developer: Auto-renewable subscriptions (upgrade, downgrade, and crossgrade behavior and prorated refunds)
- Apple Developer Forums: Retrieving the prorated refund amount after an upgrade (Apple staff on isUpgraded, the price field, and financial reports as the source)
- Android Developers: BillingFlowParams.SubscriptionUpdateParams.ReplacementMode (all replacement mode constants)
- Android Developers: About subscriptions (proration, default replacement mode, upgrade and downgrade recommendations)
- Google Play Developer API: Method orders.reviewrefund (chargeback review, 24 hours)
- Apple Developer: Send Consumption Information (CONSUMPTION_REQUEST response window)
RefundHalt
Chế độ tự động xử lý hoàn tiền cho App Store và Google Play
Đọc tiếp
Các giao dịch mua trong ứng dụng trái phép do trẻ em thực hiện gần như luôn được hoàn tiền cho phụ huynh, và bạn là người gánh chi phí
Khi một đứa trẻ mua gói xu trên điện thoại của phụ huynh, cả Apple lẫn Google đều hoàn tiền và không bên nào hỏi bạn trước. Các cơ quan quản lý đã tạo ra nó theo cách đó. Đây là cách các khoản hoàn tiền cho giao dịch mua trong ứng dụng trái phép này hoạt động trên từng cửa hàng, khung 15 phút nơi tiền chuyển đi, và một khoản thực sự khiến bạn tốn bao nhiêu.
Bạn chưa bao giờ sở hữu khoản thuế hoàn tiền ứng dụng, nên một lần hoàn tiền chỉ lấy đi phần của bạn, không phải tổng số trên biên nhận
Hoàn tiền một giao dịch trong ứng dụng và biên nhận hiển thị giá cộng thuế được trả lại. Khoản thuế đó chưa bao giờ là tiền của bạn. Apple và Google thu và nộp nó với tư cách merchant of record, rồi đảo ngược nó khi hoàn tiền mà không chạm vào phần của bạn. Đây là chi phí thực sự của một lần hoàn tiền, và một trường hợp thiết lập duy nhất khiến khoản thuế trở thành của bạn.