Stripe app for Salesforce Platform AgnosticInvocable Example
This guide provides code examples that show you how to create Stripe customers and PaymentIntents directly within Salesforce.
The examples here use custom Apex classes to enable generic, agnostic calls to Stripe’s RESTful API. Use these examples if you want to establish a layer of abstraction between your Salesforce platform and the Stripe API for added flexibility and management capabilities.
Create a customer in Stripe
Use the Accounts v2 API to represent customers
The Accounts v2 API is generally available for Connect users, and in public preview for other Stripe users. If you’re part of the Accounts v2 preview, you need to specify a preview version in your code.
To join the Accounts v2 preview, go to Account previews and features in your Dashboard and enable Reusable payment methods for Global Payouts.
For most use cases, we recommend modeling your customers as customer-configured Account objects instead of using Customer objects.
The following code example creates a Stripe Customer with a name, email, and metadata set.
// Step 1: Create an instance of the stripeGC.RawInvocableParameters class. This class is used to set the parameters for the Stripe API call.
stripeGC.RawInvocableParameters parameters = new stripeGC.RawInvocableParameters();
// Step 2: Set the HTTP method to 'POST' as you are creating a new customer.
parameters.method = 'POST';
// Step 3: Set the endpoint to '/v1/customers'. This is the Stripe API endpoint for creating a new customer.
parameters.endpoint = '/v1/customers';
//Step 4: Set the Stripe Account ID from Salesforce and set it to the accountId field of the parameters object.
parameters.accountId = 'a028B0000029RhlQAE';
//Step 5: Set the request body with the customer details.
List<String> postCustomerParameters = new List<String>{
'email=' + 'customerEmail@example.com',
'name=' + 'Tim Smith',
'metadata[AccountId]=' + 'abc123'
};
parameters.requestBody = String.join(postCustomerParameters, '&');
//Step 6: Add the parameters object to a list and call the callStripeEndpoint method of the stripeGC.AgnosticInvocable class.
List<stripeGC.RawInvocableParameters> paramsCollection = new List<stripeGC.RawInvocableParameters>{
parameters
};
List<String> results = stripeGC.AgnosticInvocable.callStripeEndpoint(paramsCollection);
//Step 7: The callStripeEndpoint method will return a list of strings. If the customer was created successfully, the first string in the list will be the ID of the new customer.
System.debug(results[0]);
Create a PaymentIntent
This code example creates a paymentIntent in Stripe.
public class stripePayment {
@AuraEnabled(cacheable=true)
public static String paymentIntent(String StripeAccountID, String amount, String stripecurrency, String orderID, String onBehalfOf, String customerId) {
// Create Call for invocable
stripeGC.RawInvocableParameters parameters = new stripeGC.RawInvocableParameters();
// Add HTTP Method
parameters.method = 'POST';
// Add endpoint
parameters.endpoint = '/v1/payment_intents';
// Get the Stripe Account ID from Salesforce
// This assumes you already have the Stripe Account ID and will pass it in as a parameter
// Alternately, you could use a SOQL query to obtain the Stripe Account ID as per previous examples
parameters.accountId = StripeAccountID;
parameters.connectAccount = onBehalfOf;
// Prepare the request body
List<String> postPaymentIntentParameters = new List<String>{
'amount=' + amount, // Pass in the amount to be charged for this PaymentIntent in the minimum currency unit (for example, cents for USD)
'currency=' + stripecurrency, // Pass in the currency for this PaymentIntent (for example, 'usd' for USD)
'customer=' + customerId, // Pass in customer to PaymentIntent
'automatic_payment_methods[enabled]=true', //Turning on automatic payment methods
'metadata[order_id]=' + orderID
};
parameters.requestBody = String.join(postPaymentIntentParameters, '&');
List<stripeGC.RawInvocableParameters> paramsCollection = new List<stripeGC.RawInvocableParameters>{ parameters };
List<String> results = stripeGC.AgnosticInvocable.callStripeEndpoint(paramsCollection);
return (results != null && results.size() > 0) ? results[0] : null;
}
}
