FCORE_PAY__Payment_Provider_Account__c that holds one Stripe connection’s configuration) and related order records stay accurate without manual updates.
This guide sets up a webhook for a connected account — the default model, where your org is a connected account under fusionSpan’s platform Stripe account.
Prerequisites
- Commerce (
FCORE_PAY) and the Stripe addon (FCORE_PSTRIPE) are installed in your org. - A
FCORE_PAY__Payment_Provider_Account__crecord exists for your Stripe connection. - You can log into the correct Stripe connected account (not the fusionSpan/fusionCore platform account).
- You have access to Setup in Salesforce.
Set the Permission Set for the Stripe Site Guest User
A Salesforce Site exposes a public URL that Stripe can reach without logging in. The site guest user is the anonymous user that runs requests to that URL. You give that user the permission set group it needs to process the inbound webhook.Open Sites in Setup
Sites in the Quick Find search bar on the left.Click Sites — not All Sites.Register the site domain if prompted

Registering the Salesforce site domain
Confirm the home page
StripeWebhook is assigned as the home page for the site.
Site configuration with StripeWebhook set as the home page
Open the guest user's settings
Assign the permission set group
fusionCore - Stripe Site Guest User to the site guest user, then save.Set Up the Stripe Webhook
You now register your Salesforce site URL with Stripe and tell Stripe which events to send.Log into the connected account
Create the event destination

Stripe Developers menu

Stripe Create Event Destination screen
Copy your Salesforce site URL

Copying the Salesforce site URL
https://example-org.my.salesforce-sites.com/.Build the endpoint URL
/services/apexrest/FCORE_PSTRIPE/Stripe to your site URL. This is the Apex REST endpoint (FCORE_PSTRIPE.StripeWebhookAPI) that receives Stripe’s events.The final endpoint URL resembles:https://example-org.my.salesforce-sites.com/services/apexrest/FCORE_PSTRIPE/StripePaste this into the Endpoint URL field in Stripe. Use the exact URL with no extra slashes or spaces.Subscribe to the required events
charge.refund.updatedpayment_intent.canceledpayment_intent.payment_failedpayment_intent.processingpayment_intent.requires_actionpayment_intent.succeededcustomer.createdcustomer.updatedsetup_intent.canceledsetup_intent.requires_actionsetup_intent.setup_failedsetup_intent.succeededpayment_method.updatedpayment_method.automatically_updatedpayment_method.detached
Stripe_API_Log__c records. Stripe may automatically add payment_method.card_automatically_updated, so you might see 16 entries — that extra one is expected.Add the endpoint

Stripe webhook endpoint with events subscribed
Validate the Payment Provider Account
After the webhook is created, validate the Payment Provider Account to confirm the connection works end to end. Validation checks your keys, signing secret, and payment types, then creates a Stripe test customer. When Stripe sends thecustomer.created or customer.updated event back through the webhook, the validation status flips to Succeeded.
Open the Payment Provider Account
FCORE_PAY__Payment_Provider_Account__c).Click Validate
Confirm the status
FCORE_PAY__Validation_Status__c changes from Pending to Succeeded. Once it reads Succeeded, you are ready to take payments.If there is a problem, the Validation Message field (FCORE_PAY__Validation_Message__c) shows the reason.Limitations and Common Pitfalls
- Validation is asynchronous. Clicking Validate does not set Succeeded on its own. It creates the Stripe test customer and waits for the inbound
customer.createdorcustomer.updatedwebhook to flip the status. If the webhook is misconfigured, validation never completes even when your keys are correct. The customer event is also accepted only if it arrives within roughly 10 seconds, so retry validation rather than waiting on a stale event. - Editing key fields silently resets validation. Changing
FCORE_PAY__External_Id__c,FCORE_PAY__Request_Signature_Secret__c, orStripe_MDT_Prefix__con the account clearsFCORE_PAY__Validation_Status__c. Re-run Validate after any of those edits. - Webhook failures are easy to miss. If the
Stripe-Signatureheader is missing or invalid, the signature does not match a Payment Provider Account’s signing secret, or the request is older than 300 seconds, fusionCore returns HTTP 204 and does nothing. Stripe treats 204 as success and will not retry, so a misconfigured webhook can fail quietly. Check theStripe_API_Log__crecords if events are not arriving. - Events from the wrong org or mode are dropped. Events whose org id does not match your org, or whose live/test mode does not match the account’s mode, are accepted with HTTP 204 and ignored.
- A Secret/Public-key validation error in production often means test mode. If validation fails in production with a key error, the account may need
FCORE_PAY__Force_Test_Mode__cset to true so it uses the sandbox keys. Confirm with the fusionCore team before changing this on a live account. - External Id must be unique. Two Payment Provider Accounts with the same
FCORE_PAY__External_Id__ccause validation to fail with “Multiple Payment Provider Accounts were found with the same External Id.” - Alipay and WeChat Pay are not available on connected accounts. Those methods require the Stripe Direct model. On a connected account, adding them is blocked.

