Chúng tôi đã thực hiện một khoản hoàn tiền trên chính tài khoản của mình để kiểm tra xem sổ cái có đảo ngược đúng cách hay không. Nó đã đúng. Rồi ai đó đọc phần còn lại của trạng thái tài khoản, và phát hiện thực sự nằm ở đó: gói đăng ký vẫn đang hoạt động, và sẽ tiếp tục hoạt động đến giữa tháng sau.
Tiền được hoàn lại, quyền truy cập vẫn được giữ nguyên. Có thể lặp lại mỗi tháng bởi bất kỳ ai sẵn lòng nhấn Hoàn tiền. Không phải một bài kiểm thử phát hiện ra điều này, vì không có bài kiểm thử nào đặt ra câu hỏi đó.
Kết thúc chu kỳ mà khoản thanh toán đã mua
Trong một lần hoàn tiền toàn phần, chu kỳ mà khoản thanh toán đó đã mở ra giờ đây kết thúc ngay lập tức, và một sự kiện vòng đời được ghi lại để giải thích lý do.
Ngay lập tức — nhưng không phải trở về con số không. Nếu bạn đang ở một gói, nâng cấp lên gói đắt hơn, và khoản thanh toán nâng cấp đó được hoàn lại, bạn sẽ quay lại gói mình đã ở trước đó, không phải bậc miễn phí. Tháng đó bạn đã trả riêng, và nó không được hoàn lại. Lấy luôn cả tháng đó cũng sẽ là nền tảng tự phục vụ chính mình bằng thứ mà khách hàng vẫn đang sở hữu. Chỉ ai không có gói trước đó vẫn còn hiệu lực mới rơi về bậc miễn phí.
Quyền truy cập có hai nửa
Phiên bản đầu tiên của bản sửa này chỉ kết thúc dòng đăng ký rồi dừng lại ở đó. Nhưng điều bạn được phép làm phụ thuộc vào hai thứ: dòng mà ngân sách đọc, và một vai trò được cấp khi thanh toán thành công. Mọi con đường khác kết thúc một gói đăng ký đều thu hồi vai trò đó một cách rõ ràng. Cái này thì không, nên một tài khoản được hoàn tiền lẽ ra đã bị hủy trên giấy tờ trong khi vẫn giữ nguyên quyền của bậc trả phí.
Giờ đây vai trò cũng được thu hồi, và hạ xuống bậc của gói đã được khôi phục, chứ không phải một mức "miễn phí" chung chung — cùng lý lẽ như chính việc khôi phục.
Thông báo cho nhà cung cấp
Trang tài khoản hiển thị Bậc Miễn Phí. Bảng điều khiển của nhà cung cấp thanh toán hiển thị Đang hoạt động, lần thanh toán tiếp theo vào tháng sau. Việc hoàn tiền đã kết thúc mọi thứ ở phía chúng tôi và chưa bao giờ thông báo cho phía kia, nên khách hàng đang xếp hàng để bị tính phí lại cho một gói mà họ đã được hoàn tiền và không thể sử dụng nữa — và không có cách nào để dừng điều đó từ màn hình của chúng tôi, vì hủy đăng ký cần một gói đang hoạt động, mà chúng tôi vừa mới hủy gói của họ.
Một khoản hoàn tiền giờ đây sẽ dừng tự động gia hạn tại nhà cung cấp đã phát hành khoản thanh toán đó. Không phải chấm dứt ngay lập tức: tự động gia hạn dừng lại, nên không có thêm tiền nào di chuyển, và bản ghi riêng của nhà cung cấp sẽ tự kết thúc theo lịch trình của chính nó thay vì bị giật ra ngay dưới một khoản hoàn tiền mà họ vừa xử lý.
Có một ngoại lệ, mà chủ sở hữu đã nhận ra trước khi phát hành. Nếu gói mà bạn được khôi phục về chạy trên cùng một gói đăng ký của nhà cung cấp, việc hủy nó sẽ để lại cho bạn một gói không bao giờ gia hạn và không bao giờ tính phí — hình ảnh phản chiếu chính xác của lỗi mà tính năng này tồn tại để sửa, và cũng âm thầm y như vậy. Trường hợp đó giờ đây được nêu tên rõ ràng và để nguyên không đụng đến.
Chỉ khoản thanh toán mở ra chu kỳ mới có thể kết thúc nó
Một lần nâng cấp giữa tháng ở nhà cung cấp này tính phí một khoản chênh lệch tỷ lệ nhỏ trên dòng hiện có. Hoàn lại khoản phí nhỏ đó lẽ ra sẽ tìm thấy một gói đăng ký, hủy toàn bộ, tìm kiếm một gói trước đó, không tìm thấy gì, và đưa khách hàng rơi về bậc miễn phí — chỉ vì một điều chỉnh giữa tháng. Giờ đây chỉ khoản thanh toán mở ra chu kỳ hiện tại mới có thể kết thúc nó. Mọi thứ sau đó đều là vấn đề tiền bạc, và sổ cái đã trả lời điều đó rồi.
Cả bốn kênh, không chỉ kênh đang hoạt động
Ba trong bốn bộ xử lý thanh toán mà chúng tôi hỗ trợ hiện không có ai sử dụng. Việc thu hồi có thể chỉ được sửa trên kênh đang hoạt động, và điều đó gần như đã xảy ra. Phản đối làm thay đổi điều này là: vào ngày một trong những kênh còn lại được kích hoạt trở lại, lỗ hổng đó sẽ quay trở lại, và đến lúc đó sẽ không ai còn nhớ nó từng tồn tại.
Kho lưu trữ này đã giao hàng cùng một loại bẫy bị lãng quên tới sáu lần. Việc thu hồi giờ đây tồn tại đằng sau một hợp đồng duy nhất mà cả bốn bộ xử lý gọi đến chỉ trong một dòng — để một người bảo trì trong tương lai kích hoạt lại một trong số đó sẽ nhận được nó mà không cần đọc bất cứ điều gì trong số này.