{"id":303207,"date":"2026-05-06T13:29:07","date_gmt":"2026-05-06T13:29:07","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/salesforce-order-sync\/"},"modified":"2026-05-06T13:28:40","modified_gmt":"2026-05-06T13:28:40","slug":"blloyddev-customer-sync-for-salesforce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/blloyddev-customer-sync-for-salesforce\/","author":23485455,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"trunk","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"blloyddev Customer Sync for Salesforce","header_author":"Ben Lloyd","header_description":"Syncs the billing customer from each completed order to a Salesforce Contact via OAuth2 client credentials. Upgrade to Pro for full order sync, line items, Events Calendar support, and a retry queue.","assets_banners_color":"","last_updated":"2026-05-06 13:28:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/blloyddev-customer-sync-for-salesforce\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":15,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2736,1150,16281,9220,1558],"plugin_category":[58],"plugin_contributors":[262028],"plugin_business_model":[],"class_list":["post-303207","plugin","type-plugin","status-publish","hentry","plugin_tags-contacts","plugin_tags-crm","plugin_tags-orders","plugin_tags-salesforce","plugin_tags-sync","plugin_category-user-management","plugin_contributors-blloyddev","plugin_committers-blloyddev"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/blloyddev-customer-sync-for-salesforce.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>blloyddev Customer Sync for Salesforce<\/strong> connects your store directly to Salesforce using the OAuth2 client-credentials flow (Connected App). Every time an order is marked complete, the customer's name, email, and phone are sent to a Salesforce Apex REST endpoint you control.<\/p>\n\n<h4>What's included (free)<\/h4>\n\n<ul>\n<li>Syncs billing customer to Salesforce on order completion<\/li>\n<li>Sends first name, last name, email address, and phone number<\/li>\n<li>OAuth2 client-credentials authentication with token caching<\/li>\n<li>Test-connection button to verify your Salesforce credentials<\/li>\n<li>Clean uninstall \u2014 removes all plugin data on deletion<\/li>\n<\/ul>\n\n<h4>Pro version<\/h4>\n\n<p>The Pro version adds:<\/p>\n\n<ul>\n<li>Full order sync \u2014 order number, date, total, and line items<\/li>\n<li>The Events Calendar support \u2014 per-ticket attendee names, emails, and linked event data<\/li>\n<li>Retry queue \u2014 failed syncs are automatically retried hourly<\/li>\n<li>Manual sync by order ID<\/li>\n<li>Admin notice when orders fail to sync<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.0+<\/li>\n<li>WooCommerce 7.0+<\/li>\n<li>A Salesforce Connected App with OAuth2 client-credentials flow enabled<\/li>\n<li>An Apex REST endpoint in your org to receive the payload<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>blloyddev-customer-sync-for-salesforce<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via <strong>Plugins &gt; Add New<\/strong>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <strong>Settings &gt; Salesforce Sync<\/strong> and enter your Salesforce Instance URL, Client ID, and Client Secret.<\/li>\n<li>Click <strong>Test Salesforce Connection<\/strong> to verify.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20data%20is%20sent%20to%20salesforce%3F\"><h3>What data is sent to Salesforce?<\/h3><\/dt>\n<dd><p>The customer's billing first name, last name, email address, and phone number. No order totals, payment details, or line items are sent in the free version.<\/p><\/dd>\n<dt id=\"what%20does%20the%20payload%20look%20like%3F\"><h3>What does the payload look like?<\/h3><\/dt>\n<dd><p><code>json\n{\n  \"firstName\": \"Jane\",\n  \"lastName\":  \"Smith\",\n  \"email\":     \"jane@example.com\",\n  \"phone\":     \"07700900000\"\n}<\/code><\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20up%20the%20salesforce%20connected%20app%3F\"><h3>How do I set up the Salesforce Connected App?<\/h3><\/dt>\n<dd><ol>\n<li>In Salesforce Setup, go to <strong>App Manager &gt; New Connected App<\/strong>.<\/li>\n<li>Enable <strong>OAuth Settings<\/strong> and add the <code>Full access (full)<\/code> scope (or more restrictive as needed).<\/li>\n<li>Under <strong>OAuth Policies<\/strong>, enable <strong>Client Credentials Flow<\/strong> and assign a Run-As user.<\/li>\n<li>Copy the Consumer Key (Client ID) and Consumer Secret into the plugin settings.<\/li>\n<\/ol><\/dd>\n<dt id=\"what%20happens%20if%20a%20sync%20fails%3F\"><h3>What happens if a sync fails?<\/h3><\/dt>\n<dd><p>The error is written to your server error log when <code>WP_DEBUG_LOG<\/code> is enabled. For automatic retry and an admin UI for failed syncs, upgrade to Pro.<\/p><\/dd>\n<dt id=\"does%20this%20store%20sensitive%20data%3F\"><h3>Does this store sensitive data?<\/h3><\/dt>\n<dd><p>The Client ID and Client Secret are stored in the WordPress options table. The access token is cached as a transient and expires automatically. All plugin data is removed when the plugin is deleted.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Automatically syncs the billing customer from each completed order to a Salesforce Contact via OAuth2 \u2014 no Zapier or WP Fusion required.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/303207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=303207"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/blloyddev"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=303207"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=303207"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=303207"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=303207"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=303207"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=303207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}