Charge and Store a Card on File with SCA

Applies to: Web Payments SDK | Cards API | Customers API | Strong Customer Authentication

Learn how to add code to your application to charge and store a card on file with Strong Customer Authentication (SCA).

Link to section

Overview

The key benefit of using the CHARGE_AND_STORE intent is to both charge and store a card on file in a single request call, which triggers SCA buyer authentication if needed. You can use the CHARGE_AND_STORE intent if the buyer wants to store the card on file when the seller charges the card for the payment.

With Web Payments SDK integration, your application can charge and store a card on file in the following two payment flows for card-on-file:

  • (Beta) A new default payment flow that involves:
    1. Generating a payment token.
      • During payment tokenization, Square checks the tokenize request to determine if buyer verification is needed based on the buyer's information.
    2. Including the payment token in a Payments API request call to process a payment.
    3. Creating a card-on-file and storing it with a new customer profile and a card object. When you call CreateCard, the source_id is the payment_id from the Payment API payment response object.
  • The existing payment flow that involves:
    1. Generating a payment token.
    2. Generating a verification token after verifying the buyer.
    3. Including both the payment token and verification token in a Payments API request call to process a payment.
    4. Creating a card-on-file and storing it with a new customer profile and a card object. When you call CreateCard, the source_id is the payment_id from the Payment API payment response object.

Important

The new payment flow will replace the existing Web Payments SDK card payment acceptance implementation, and will become the new default card payment flow when Square releases it for general availability.

When Square releases the new payment flow for general availability, Square will deprecate the Payments.verifyBuyer() method that performs buyer verification and generates a verification token. Square will provide a migration guide so that you can update your application to take card payments with the new payment flow.

Square recommends updating your application to use the new default payment flow with the Web Payments SDK. However, during beta, Square will continue to support both payment flows.

Link to section

Card-on-file payment flows

Choose a card-on-file payment flow below to set up your application to charge and store a card-on-file with Web Payments SDK integration.

Link to section

Set up the new payment flow

Before updating your application with the CHARGE_AND_STORE intent, make sure to update your application to support the new payment flow by following the instructions in Take a Card Payment with the Web Payments SDK.

  1. In your application, modify the token and payment objects prior to calling Card.tokenize() and CreatePayment, respectively.

    Along with the card payment method object, the tokenize() method passes the following additional properties:

    • billingContact: the buyer's contact information for billing
    • intent: the transactional intent of the payment

    Important

    Provide as much buyer information as possible for billingContact so that you get more accurate decline rate performance from 3DS authentication.

    The Payment object passes the token object that contains the aforementioned values.

    const token = await tokenize( card, billingContact, intent: CHARGE_AND_STORE ); const payment = createPayment(token);
  2. Declare a ccof object to call CreateCard, which takes the payment_id from the payment object as the parameter.

    const token = await tokenize( card, billingContact, intent: CHARGE_AND_STORE ); const payment = createPayment(token); const ccof = createCard(payment_id);