Bug: Customer shown as inactive, even though there is still previous validity left (initialBillDate in the future)

nikolas's Avatar

nikolas

22 Nov, 2011 08:20 PM

After migrating our customers with initialBillDate in the future. These customers still had some time left on their subscription form our old system (some even 10 months) which had to be honored of course.
Then some of them did try to enter their PayPal details, they were redirected to PayPal but for some reason did not approve or the approval token timed out (after 3 hours if I'm correct).
Afterwards their subscription is reported as INACTIVE, which is of course wrong since they still have validity left. Remember we are still before the initialBillDate.

Here is the sample case to be able to reproduce (product code 'dev'):

  1. Create customer with initialBillDatein the future (e.g. March 31st, 2012) for a paid subscription (e.g. "VIP - 12 months"), but with no payment method attached (for example when migrating from other system)
  2. Now we have a valid customer. If you switch to the Customer Update Page, the subscription is reported active and valid until the earlier supplied initialBillDate.
    Message shown: "You are currently subscribed to the VIP - 12 months plan ..... Your next invoice is scheduled to be billed on March 31st, 2012."

  3. Now click the "Update Subscription" button and get redirected to PayPal

  4. Click cancel approval

  5. We are now redirected back to the Customer CancelPagepage, forget this one and switch to the Customer Update Page

  6. Here you can now see that the subscription is now reported as ìnactive which is incorrect, since we are still before the initialBillDate

This seems like a bug and currently we are getting complaints from multiple customers about this!
Please fix it!

  1. Support Staff 1 Posted by Marc Guyer on 25 Nov, 2011 09:20 PM

    Marc Guyer's Avatar

    Hi Nikolas -- This is not a bug. However, I can see that some changes could improve the functionality in this case. This is a bit of an edge case -- when a customer isn't yet "required" to have a payment method but begins to add one and does not complete the process. If the customer were to complete the process, their account would be active. Even after aborting the process, they can still activate their account by adding a payment method.

  2. 2 Posted by nikolas on 25 Nov, 2011 09:33 PM

    nikolas's Avatar

    Hi Marc,

    it's not just when a customer does not complete adding a payment method, this also happens when he flat out cancels his account (which would usually mean he would not be billed again).

    Is it really an edge case? This affects everybody that migrates existing customers (with remaining validity) into cheddar.
    The customers flat out loose they validity if they either cancel their "subscription" or don't complete the add payment method process, this can't be right.
    In both cases the result should be that they are still active customers until the InitialBillDate.

    And the only way to solve this is either to add a payment method (which the customer might not want todo, since he does not want to continue after the initialBillDate) or to recreate the customer and tell him to keep his hands off the cancelation / add payment method button.

    None of these methods are really solutions. I think this behavior is wrong and needs to be fixed.

  3. Support Staff 3 Posted by Marc Guyer on 25 Nov, 2011 10:38 PM

    Marc Guyer's Avatar

    it's not just when a customer does not complete adding a payment method, this also happens when he flat out cancels his account (which would usually mean he would not be billed again).

    Correct.

    Is it really an edge case? This affects everybody that migrates existing customers (with remaining validity) into cheddar. The customers flat out loose they validity if they either cancel their "subscription" or don't complete the add payment method process, this can't be right. In both cases the result should be that they are still active customers until the InitialBillDate.

    In my opinion, yes. Further, in both situations (direct cancelation and "passive" cancelation by not completing the paypal workflow), you will never be paid by the customer. If they intend to pay you, then they would have completed (or will complete) the workflow. In both cases, I think reenabling an account without customer interaction is wrong. There is a significant difference between a customer who has canceled and one who has not. The former is worth almost nothing. A customer who is curious enough to begin to add a payment method, then stops, is a customer who has decided not to pay you.

    None of these methods are really solutions.

    I'm not sure what you mean by this.

    I think this behavior is wrong and needs to be fixed.

    CheddarGetter does not ultimately control whether or not your customers have access to your system. CG does provide many tools to make it easier to determine if a customer should have access. Ultimately, it's up to you. For example, many of our clients give access to a customer through the current period even if the customer has canceled. The PHP wrapper getCustomerIsActive method includes an optional parameter to make that particular edge case easier:

    /**
     * Whether or not a customer's subscription is active and in good standing
     *
     * @param $code string your code for the customer - required if more than one customer is in the response
     * @param $remainActiveThroughEndOfPeriod bool Set to true if you'd like the account to remain active until the end of the current payment period rather than inactive at the moment of cancelation
     * @throws CheddarGetter_Response_Exception if the response type is incompatible or if a $code is not provided and the response contains more than one customer
     * @return array
     */
    public function getCustomerIsActive($code = null, $remainActiveThroughEndOfPeriod = false) {
        $subscription = $this->getCustomerSubscription($code);
        if ($subscription['canceledDatetime']) {
            if (strtotime($subscription['canceledDatetime']) <= time()) {
                if ($remainActiveThroughEndOfPeriod) {
                    $invoice = $this->getCustomerInvoice($code);
                    if (strtotime($invoice['billingDatetime']) > time()) {
                        return true;
                    }
                }
                return false;
            }
        }
        return true;
    }
    

    This is necessary if a customer technically has already paid for service yet to be received and you are obligated to continue to provide the service per your terms of use. On the surface, it appears as though this technique or something like it would work for you.

  4. Marc Guyer closed this discussion on 05 Dec, 2011 05:04 PM.

Discussions are closed to public comments.
If you need help with Cheddar please start a new discussion.

Keyboard shortcuts

Generic

? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac

Recent Discussions

28 Mar, 2024 10:45 PM
24 Jan, 2024 08:33 AM
11 Jan, 2024 07:13 AM
30 Nov, 2023 02:07 AM
22 Nov, 2023 08:41 AM