Skip to main content

Example Use Cases

API Required

  1. Create Purchase API
  2. Charge Token API

Two fields that are easy to mix up

A Purchase exposes two differently-named fields, and they answer opposite questions:
  • is_recurring_token — “is this Purchase valid to be USED AS a recurring token?” true only when a recurring token was actually saved for this Purchase. When it is true, this Purchase’s id may be passed as the recurring_token in POST /purchases/{id}/charge/ to bill the same payment method (same card) again.
  • recurring_token — “was this Purchase PAID USING a recurring token?” Holds the id of the token Purchase that paid this one, or null when it was paid with a newly entered card.
Rules that follow from this:
  • A paid Purchase does not automatically carry a usable token. A token is saved only when the payment was enrolled for it — force_recurring: true on a hosted checkout, or remember_card=on with direct_post — and only once the card is validated/paid. Never assume id is chargeable just because the Purchase is paid.
  • A Purchase paid by a token has recurring_token set and is_recurring_token: false: it was billed with an existing token, so it does not become a new token itself.
  • The very first Purchase in a subscription is the reverse: it has is_recurring_token: true (it can be charged later) and a null recurring_token (nothing paid it but the customer’s card).
  • Charging a Purchase that was never enrolled returns invalid_recurring_token (see Errors). Do not retry; re-prompt the buyer for a new card.

Example Cases

  1. Subscription With Free Trial
  2. Subscription With Registration Fee

1) Subscription With Free Trial

Alan subscribes to a gym membership with a free trial and a monthly subscription of RM 5.00.
  1. Create a registration fee using the Purchases API
    - get checkout_url from the response body to be used as a payment link
    - get id from the response body to be used as a token
    Note: Alan’s card must be validated in order for the token to be usable. Confirm this by checking that the Purchase’s is_recurring_token is true after the payment completes - a paid Purchase is not automatically a usable token.
  1. Create a monthly subscription using the Purchases API
    - get id from the response body to be used as a payment link
  1. Charge subscription fee id with registration fee id using Charge token API
    Example API : …/purchases/monthly_subscription_fee_id/charge/

2) Subscription With Registration Fee

Alan subscribes to a gym membership with a registration fee of RM 20.00 and a monthly subscription of RM 5.00.
  1. Create a registration fee using the Purchases API
    - get checkout_url from the response body to be used as a payment link
    - get id from the response body to be used as a token
    Note: Alan’s registration fee must be paid in order for the token to be usable. Confirm by checking that the Purchase’s is_recurring_token is true - not merely that status is paid.
  1. Create a monthly subscription using the Purchases API
    - get id from the response body to be used as a payment link
  1. Charge subscription fee id with registration fee id using Charge token API
    Example API : …/purchases/monthly_subscription_fee_id/charge/

Testing Integration

It’s possible to test-drive all checkouts using a test Purchase. To test a successful payment, you can use the following card numbers:
  • 4444 3333 2222 1111 - non-3D Secure card
  • 5555 5555 5555 4444 - 3D Secure card
For both cards, please use:
  • any cardholder name
  • any expiry no earlier than the current month/year
  • CVC = 123
To test a failed payment, please change the CVC or expiration date. When using a 3D Secure enrolled card in S2S checkout, an incorrect CVC will trigger an authorization failure on the S2S callback step (after the customer returns from test ACS). Using a wrong expiry date emulates data validation failure and results in immediate error before that step.

FAQ

Frequently asked questions regarding subscriptions.
  1. Does CHIP handle the automatic renewal of subscriptions?
    No, CHIP does not handle automatic renewal. What CHIP offers is the ability to save and charge a customer’s saved card. The automatic renewal logic must be implemented on the merchant’s side, for example using a cron job or other scheduling mechanism.
  2. What happens if I accidentally charge the customer’s card twice?
    Once the payment link is paid, any subsequent payment attempt will be blocked. As a result, the likelihood of a double charge issue is extremely low.
  3. What is the token tied to?
    The token is tied to brand_id.
  4. How is the token referenced?
    The token uses customer_email as a reference.
  5. Where can I see my customer’s tokens?
    You can list the tokens for a customer using the List Token API.
  6. How do I delete the token?
    You can delete a token using the Delete Token API.