Skip to main content

Configuring FinDock MOTO


FinDock MOTO is a paid add-on feature. Please contact us to get started.


Currently you can accept credit card payments from within Salesforce using the FinDock Payment component and Stripe as the payment processor.


At this time, MOTO payments can only be collected on Contact and not Account. If Person Accounts are enabled in the org, the component also works on Person Account, but not Business Account.


  • The Stripe for FinDock payment extension is configured and the credit card payment method is activated.
  • MOTO is enabled for your Stripe account. This requires some actions in your Stripe Dashboard as well as directly contacting Stripe to request enabling MOTO.

How the FinDock Payment component works

The FinDock Payment component is dynamic based on the payment context - one-time or recurring. It can be used on FinDock objects Installment and Recurring Payment, as well as equivalent NPSP and Fundraising objects.

For one-time payments, the component completes authorization and then charges the payment amount to the credit card. For recurring payments, the component authorizes the credit card but does not initiate a charge. The first payment and future payments are collected through payment schedules with Stripe as processor.

Depending on the component settings, the following records are created and linked to the record where the component was used:

  • A Payment Profile record with the last 4 digits of the credit card number and the expiration date of the card.
  • A Mandate record with the customer Id and payment method Id from Stripe and the Target (Stripe account) the customer and payment method are available. This record is used to collect future payments of recurring charges.

If the component is used on an existing record that already has a linked payment profile and mandate, these are unlinked and replaced by a new payment profile and mandate for the credit card MOTO payment. The payment method and processor are also updated.

Arrange PCI compliance with Stripe

For information about how FinDock supports your PCI compliance, please visit our PCI compliance article.


Becoming PCI compliant and proving you are compliant could involve significant work. We strongly recommend you start this process as early as possible to avoid delays in your project.

To be able to work with credit cards, Stripe requires you to be PCI compliant. The process to be approved for MOTO differs from one processor to the next. So, even if you are PCI compliant with another Payment Service Provider (PSP), you need to go through the process with Stripe. This typically has two phases:

  1. Prove your PCI compliance (e.g. by providing your Attestation of Compliance or Self-Assessment Questionnaire)
  2. Once approved, your PSP enables MOTO for your account

Please contact Stripe for details on how to get MOTO enabled for your account.

Make the component available to Salesforce users

The FinDock Payment component can be exposed to users in two ways:

  • By adding it directly to the record layout for any of the following objects:
    • FinDock Installment
    • NPSP Opportunity
    • FinDock Recurring Payment
    • NPSP Recurring Donation
    • Fundraising Gift Commitment
    • Fundraising Gift Transaction
  • By adding it to a custom workflow built with tooling such as:
    • Salesforce Screen Flows
    • Salesforce Lightning Web Components (LWC)

Adding the Payments Component to a record layout

To add the Payments Component directly to a record layout:

  1. Go to the Lightning App Builder of the record.
  2. In the Components tab on the left hand side, find “FinDock Payment” in the Custom - Managed section.
  3. Drag the FinDock Payment component onto the layout.
  4. Optional: Click the component in the App Builder preview to configure the components settings.
  5. Click Save.

FinDock Payment component on a record layout

Adding to custom workflow

The MOTO component can be added to a custom workflow for Salesforce users to make all the desired actions easy to complete. For instance, the flow could include creating a Contact record first, automatically followed by an Installment/Opportunity record where the component is ready to go.

There are two ways to use the Payment component in a custom workflow:

  • using Salesforce Flow
  • using Salesforce LWC

To use the Payment component in a Salesforce Screen Flow:

  1. Open your Screen Flow (required because user input is needed).
  2. Add a Screen component.
  3. In the Components tab on the left-hand side, find “FinDock Payment” in the Custom section.
  4. Drag the FinDock Payment Component onto the layout.
  5. Optional: Click the component in the App Builder preview to configure the components settings.
  6. Click Save.

FinDock Payment component in a Flow

To use the Payment component in a Salesforce LWC component:

  1. Create a LWC component
  2. Embed the FinDock Payment component in your components .html file. The component requires a Salesforce record id of a supported object to work. See above for supported objects.
<cpm-findock-payment record-id={my-record-id}></cpm-findock-payment>
  1. Depending on your requirements, set the settings of the component. See Component settings below for available settings. For example, you force the component to save the card for one-time payments by setting save_card_one_time="true" as follows:
  1. In your components .js controller, pass the record id (and other variables) to your component variable by - for example - creating a tracked variable.
@track my-record-id

Component settings

SettingDescriptionPossible valuesDefaultAPI name
CVC is requiredSets the CVC input field as required on the component. Entering a CVC decreases the chances of the payment being rejected.True / FalseTruecvc_required
Default TargetThe target (merchant account) used to authorize and collect payments. If no target is set on the given record, the component uses this setting. Please find more details on how targets are used below.All Targets / Accounts for the Processor in use.Null (empty)target
Save card with one-time paymentsIf checked, FinDock also stores a mandate when one-time payments are performed. This mandate can be reused for other one-time and recurring payments. For recurring payments FinDock always stores a mandate to collect payments against in the future.True / FalseFalsesave_card_one_time

Targets and the Payment component


If you have multiple merchant accounts / targets, please take this into account when performing MOTO payments on Installments created through other channels. For instance, make sure to update the Target if the Installment was set up through an online flow and you use a different Target for MOTO payments.

FinDock chooses a target (merchant account) to authorize the card against based on the following logic:

  1. If a target is defined on the one-time or recurring record that is passed to the component or the component is placed on, that target is used.
  2. If no target is set on the record, the Default Target in the component setting or which is passed to the component as a variable is used.
  3. If no target is set on the record or on the component, the default target of the Stripe for FinDock payment extension is used.

No credit card payments may be accepted directly from cardholders through the FinDock Payment component because the component circumvents (by necessity) the required 3DS checks. This is only allowed when the cardholder is not the entity entering the card details.

Re-using credit cards thru the Payment component

If a contact has stored credit cards available in your Salesforce environment, these are automatically shown in a picklist on the component. A credit card from the list can be used, or a new card can be added.

FinDock Payment component with credit card re-use option

The criteria for whether or not a card (a Payment Profile record) is shown in the picklist are:

  • Related Mandate must be active with status Success
  • Target on related Mandate must match target that will be used by component
  • Related Mandate must have a Stripe payment method Id
  • Payment profile must be active
  • Contact on Payment Profile must match contact on record where the Payment Component is open
  • Expiry Month and Year on Payment Profile must not be empty and the combined value must be in the future.

Additional fields from Payment Profile

Because of the visualization of options that can be chosen for re-use, we strongly recommend adding these fields to the Payment Profile layout to aid the selection of the correct card.

Card brandcpm__Brand__cMust use the format that Stripe uses, so "visa" or "mastercard"
Card numbercpm__Credit_Card_Number__cFull length with last 4 digits e.g. XXXX-XXXX-XXXX-4242
Card expirationcpm__Expiration_Date__c and cpm__Expiration_Year__cCredit card expiry month and year


Can I create the record for Recurring Payment / Recurring Donation or Installment / Opportunity from the component? Can I add a campaign or other data to these records through the component?

Yes, but not through to the component itself. You can create a custom workflow through Flow or LWC where these records are created and include the Payments Component to execute the credit card payment collection steps.

How does the FinDock Payment component work with 3DS?

Since it is not the payer (credit card owner) who enters the card details, 3DS is explicitly disabled for MOTO payments. These are so-called “cardholder not present” transactions. This also means that it is explicitly prohibited to have cardholders enter details themselves by exposing the component outside of your private Salesforce environment.

Can I reuse a credit card after it has been authorized through the component?

Yes, a linked payment profile and mandate are stored in Salesforce automatically for recurring payments set up through MOTO. You can reuse those authorization details if you so wish. However, you must ensure through your own processes that the payer has explicitly agreed to further use of those payment details. If you wish to also store a mandate when performing one-time payments through MOTO, please set the Save card with one-time payments setting on your component to True. For more information, see Component settings.

How can I distinguish between MOTO and non-MOTO payments?

There are several ways to distinguish between MOTO and non-MOTO payments, including but not limited to:

  • Setting a value in a custom field when embedding the component in a Flow or LWC component
  • Setting up and using a specific target (merchant account) for MOTO payments.

Can I use this component in Salesforce Experience Cloud?

As long as the person entering the card details is an agent of your organization and not the cardholder, Experience Cloud is behind a login, and your Experience Cloud is covered by your PCI compliance, then yes. To prevent compliance issues, Guest Users are in any case not able to use the component.

Can I just send the credit card details as parameters to the Payments Component in my Flow or LWC?

No, this would violate the scope of our PCI compliance and is therefore prohibited in our implementation.

Can I set the CVC and Cardholder Name to be required for Phone and optional for Mail payments?

Yes, if you use a Screen Flow, you can pass different settings based on a flow decision.

Why do I get Error From Stripe: Sending credit card numbers directly to the Stripe API is generally unsafe. [...]?

To be able to process MOTO payments through Stripe, your account needs allow you to directly handle credit card information. This error indicats your merchant account is not yet fully configured to take MOTO payments. Please contact your Stripe representative and tell them you need to "handle card information directly." They can guide you through the necessary configuration steps.