{"id":15329,"date":"2023-01-09T11:25:06","date_gmt":"2023-01-09T11:25:06","guid":{"rendered":"https:\/\/ecommerce.folio3.com\/blog\/?p=15329"},"modified":"2026-01-27T14:02:28","modified_gmt":"2026-01-27T14:02:28","slug":"stripe-salesforce-commerce-cloud","status":"publish","type":"post","link":"https:\/\/ecommerce.folio3.com\/blog\/stripe-salesforce-commerce-cloud\/","title":{"rendered":"Stripe Salesforce Commerce Cloud: How Is It Done?"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Your customers may spend most of their time following up on invoices. It could be hectic for e-Commerce merchants to keep track of all the information. It is also crucial to use the adaptable method to facilitate payments, gather customer data, and share it with team members.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Many countries are supported by Stripe&#8217;s online payment infrastructure, which allows merchants to accept payments via bank transfers, credit cards, and debit cards from any web browser or mobile device.\u00a0<\/span><\/p>\n<p><b>Stripe Salesforce Commerce Cloud<\/b><span style=\"font-weight: 400;\"> connection securely sending and receiving recurring payments and sophisticated billing statements is possible. With <\/span><b>Salesforce Commerce Cloud implementation<\/b><span style=\"font-weight: 400;\">, businesses can keep a close eye on their data and use it to make wise decisions.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Let\u2019s dive into Salesforce Commerce Cloud Integration with Stripe and how this connection can benefit e-Commerce merchants.<\/span><\/p>\n<h2><b>Benefits of Stripe Salesforce Commerce Cloud Integration<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Comparing Stripe and Salesforce, here are some advantages of Stripe Salesforce Commerce Cloud:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Businesses can now make sales from Salesforce Commerce Cloud and charge them to Stripe accounts simultaneously.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Businesses can automate their monthly payments with Stripe and Salesforce B2B Commerce Integration, and their customer\u2019s information will be recognized automatically.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">It allows for a unified, editable view of all client information and could be a lifesaver for <\/span><b><a href=\"https:\/\/ecommerce.folio3.com\/salesforce-commerce-cloud-migration\/\">Salesforce Commerce Cloud migration<\/a>.<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The integration solution permits your business to access all Stripe payments (bank accounts, credit cards, debit cards.) in <\/span><a href=\"https:\/\/ecommerce.folio3.com\/salesforce-commerce-cloud-development\/\"><b>salesforce commerce cloud development<\/b><\/a><span style=\"font-weight: 400;\"> as your data.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">With Stripe and<\/span><a href=\"https:\/\/ecommerce.folio3.com\/salesforce-b2b-commerce-integration\/\"><b> Salesforce B2B Commerce integration<\/b><\/a><span style=\"font-weight: 400;\">, you can easily manage a subscription and coupon model, making your marketing process more engaging.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Stripe is WebHook-compatible and provides businesses with assistance in implementing real-time solutions.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">With Stripe and Salesforce Commerce Cloud support, businesses can increase revenues and acceptance rates.<\/span><\/li>\n<\/ul>\n<h2><b>Step-by-Step Guide to Stripe Salesforce Commerce Cloud Integration<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">The features and capabilities of Stripe and <\/span><a href=\"https:\/\/ecommerce.folio3.com\/salesforce-commerce-cloud-optimization\/\"><b>Salesforce Commerce Cloud Optimization<\/b><\/a> <span style=\"font-weight: 400;\">are distinct. Therefore, there are numerous strategies for combining them. If the two systems will work together, the integration of <\/span><b>Stripe Salesforce Commerce Cloud <\/b><span style=\"font-weight: 400;\">needs to be smooth.<\/span><\/p>\n<p data-start=\"744\" data-end=\"1019\">According to the <strong><a href=\"https:\/\/ecommerce.folio3.com\/salesforce-commerce-cloud-consultants\/\">Salesforce commerce cloud consultant<\/a><\/strong>, you can connect Stripe with Salesforce Commerce Cloud development using AppExchange apps or third-party applications (APIs), or work with a <a href=\"https:\/\/ecommerce.folio3.com\/shopify-development\/shopify-consulting\/\">Shopify consulting company<\/a> for cross-platform expertise.<\/p>\n<h3><b>Set Up A Business Manager<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Several cartridges are needed for the Stripe Connector for Salesforce B2C Commerce (LINK Cartridge) to function properly. In addition, the cartridges for the controller and SFRA are split up. That\u2019s why one can be installed and used independently of the other.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Connect a Server in UX Studio after importing all three cartridges.<\/span><\/p>\n<h4><b>Site Cartridge Assignment<\/b><\/h4>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">To manage your sites, go to <\/span><b>Administration &gt; Sites &gt; Manage Sites<\/b><span style=\"font-weight: 400;\">.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Select the domain of the storefront where you&#8217;d want to install Stripe integration.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Choose the <\/span><b>Settings <\/b><span style=\"font-weight: 400;\">sub-menu.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The SFRA cartridge path should include\u00a0<\/span><\/li>\n<\/ul>\n<p><i><span style=\"font-weight: 400;\">app_stripe_sfra:int_stripe_sfra:int_stripe_core<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">Follow these instructions again for each online shop you want to connect to your Stripe account.<\/span><\/p>\n<h4><b>Business Manager Cartridge Assignment<\/b><\/h4>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Choose <\/span><b>Administration &gt; Sites &gt; Manage Sites<\/b><span style=\"font-weight: 400;\"> from the menu.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">A menu will appear; select <\/span><b>Business Manager Site<\/b><span style=\"font-weight: 400;\"> and <\/span><b>Manage the Business Manager Site.<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Add the following to the cartridge path<\/span><\/li>\n<\/ul>\n<p><i><span style=\"font-weight: 400;\">int_stripe_core<\/span><\/i><\/p>\n<h4><b>Aiming for a Metadata Import<\/b><\/h4>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Go to the metadata folder of the project and click on the <\/span><b>stripe site template<\/b><span style=\"font-weight: 400;\"> folder.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Go to the <\/span><b>sites folder,<\/b><span style=\"font-weight: 400;\"> and here you can edit the <\/span><b>siteIDHere folder<\/b><span style=\"font-weight: 400;\"> to the <\/span><b>site ID<\/b><span style=\"font-weight: 400;\"> of the store you want.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Incorporate a new folder for each site that will use Stripe.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Go to <\/span><b>Administration &gt; Site Development <\/b><span style=\"font-weight: 400;\">and access the<\/span><b> Site Import &amp; Export.<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Create a zip file containing the stripe site template folder and open it.<\/span><\/li>\n<\/ul>\n<h4><b>Set Up Stripe Styling<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">If necessary, edit package.json from the same folder to reflect the correct location of your SFRA installation&#8217;s starting point.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The SFRA basic cartridge&#8217;s repository and any necessary plugins, libraries, and other LINK cartridges are typically cloned into a root project folder. To avoid updating the <\/span><b>paths.base<\/b><span style=\"font-weight: 400;\"> property, simply clone the Stripe cartridge into that folder as well. In <\/span><b>package.json,<\/b><span style=\"font-weight: 400;\"> modify the <\/span><b>paths.base<\/b><span style=\"font-weight: 400;\"> field with the relative path to the local directory holding the Storefront Reference Architecture repository if you haven&#8217;t already done so after cloning the cartridge there. The standard value of <\/span><b>paths.base<\/b><span style=\"font-weight: 400;\"> is as shown below:<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">&#8220;paths&#8221;:{&#8220;base&#8221;:&#8221;..\/storefront-reference-architecture\/cartridges\/app_storefront_base\/&#8221;}<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">To ensure that <\/span><b>package.json&#8217;<\/b><span style=\"font-weight: 400;\">s SFRA cartridges path is correct, you may run <\/span><b>npm run compile:scss<\/b><span style=\"font-weight: 400;\"> in the Stripe repository&#8217;s root folder.<\/span><\/p>\n<h4><b>Add New Payment Processors.<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">The Stripe cartridge utilizes two separate payment gateways. <\/span><b>STRIPE CREDIT<\/b><span style=\"font-weight: 400;\"> processes credit card transactions, while <\/span><b>STRIPE APM<\/b><span style=\"font-weight: 400;\"> manages local payment options, including giropay and bank transfers.<\/span><\/p>\n<h5><b>Stripe Credit Processor<\/b><\/h5>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">To add a new payment processor, go to <\/span><b>Merchant Tools &gt; Ordering &gt; Payment Processors<\/b><span style=\"font-weight: 400;\"> and <\/span><b>click New<\/b><span style=\"font-weight: 400;\">.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Change the <\/span><b>ID to STRIPE CREDIT<\/b><span style=\"font-weight: 400;\"> in the new window and press Apply.<\/span><\/li>\n<\/ul>\n<h5><b>Stripe APM Processor<\/b><\/h5>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">To add a new payment processor, go to <\/span><b>Merchant Tools &gt; Ordering &gt; Payment Processors<\/b><span style=\"font-weight: 400;\"> and<\/span><b> click New<\/b><span style=\"font-weight: 400;\">.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">In the newly opened window, enter <\/span><b>STRIPE APM <\/b><span style=\"font-weight: 400;\">as the value for the ID property, and then click the <\/span><b>Apply button<\/b><span style=\"font-weight: 400;\">.<\/span><\/li>\n<\/ul>\n<h4><b>Update Payment Modes<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">To add STRIPE CREDIT as a payment processor for your CREDIT CARD payment method, go to<\/span><b> Merchant Tools &gt; Ordering &gt; Payment Methods<\/b><span style=\"font-weight: 400;\">, click the <\/span><b>CREDIT CARD <\/b><span style=\"font-weight: 400;\">payment method, and then click the <\/span><b>STRIPE CREDIT <\/b><span style=\"font-weight: 400;\">from the dropdown arrow next to the CREDIT CARD information section.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Turn on <\/span><b>STRIPE APM METHODS<\/b><span style=\"font-weight: 400;\"> to add Stripe-supported payment methods to automatic payment methods or the <\/span><b>Payment Request Button<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Enabling the <\/span><b>STRIPE PAYMENT REQUEST BTN<\/b><span style=\"font-weight: 400;\"> method will allow you to use the <\/span><b>Stripe Payment Request Button.\u00a0<\/b><\/p>\n<h3><b>Configurations<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Add site-specific values by updating <\/span><b>Merchant Tools &gt; Site Preferences &gt; Custom Site Preferences &gt; Stripe Configurations.<\/b><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Stripe <\/span><a href=\"https:\/\/dashboard.stripe.com\/apikeys\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">secret API key<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Stripe <\/span><a href=\"https:\/\/dashboard.stripe.com\/apikeys\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">publishable API key<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">If the current site uses SFRA, set <\/span><b>SFRA installation<\/b><span style=\"font-weight: 400;\"> to <\/span><b>Yes<\/b><span style=\"font-weight: 400;\">.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Capture Funds on Stripe Charge:<\/b><span style=\"font-weight: 400;\"> This is a <\/span><b>true <\/b><span style=\"font-weight: 400;\">value by default (Yes). Instead of using other payment methods, set this to <\/span><b>false <\/b><span style=\"font-weight: 400;\">(No) to allow payments to be made using Stripe.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stripes Card Element CSS style:<\/b><span style=\"font-weight: 400;\"> Align the button on the card element&#8217;s inherited CSS with the rest of the storefront&#8217;s design. For instance:<\/span><\/li>\n<\/ul>\n<p><i><span style=\"font-weight: 400;\">{&#8220;base&#8221;: {&#8220;fontFamily&#8221;: &#8220;Arial, sans-serif&#8221;,&#8221;fontSize&#8221;: &#8220;14px&#8221;,&#8221;color&#8221;: &#8220;#C1C7CD&#8221;},&#8221;invalid&#8221;: {&#8220;color&#8221;: &#8220;red&#8221; } }).<\/span><\/i><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stripe API URL:<\/b> <i><span style=\"font-weight: 400;\">https:\/\/js.stripe.com\/v3\/<\/span><\/i><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stripe Payment Request Button Style:<\/b><span style=\"font-weight: 400;\"> Choose the constrained CSS styling for the payment request button.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Apple Pay Verification String:<\/b><span style=\"font-weight: 400;\"> Using the Stripe Control Panel, enter the Apple verification code shown there. You&#8217;ll only need to do this once. During setup, the Stripe interface acts as a proxy, exchanging an Apple Pay verification string for a web verification string. If you plan on accepting payments through the Payment Request Button, set this up in the Sandbox first.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Country Code (Stripe Payment Request Button): <\/b><span style=\"font-weight: 400;\">For the Payment Request Button, this is the country code by default (USA, for instance). On a single site that serves multiple countries, you may need to make some changes so that the country code is passed along instead of the site&#8217;s default setting. Read the information on making a payment request.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stripe webhook signing secret:<\/b><span style=\"font-weight: 400;\"> Stripe will prompt you to enter the signing secret for your webhook. Stripe verifies webhook events with a signature and sends the verification to SFCC. SFCC checks the message&#8217;s accuracy against this secret.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stripe Allowed Webhook Statuses:<\/b><span style=\"font-weight: 400;\"> Adjust the webhook&#8217;s allows status configuration.<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/Stripe-Allowed-Webhook-Statuses.png\" \/><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Approved apm Techniques:<\/b><span style=\"font-weight: 400;\"> List of accepted Stripe API payment types: Default:\u00a0<\/span><\/li>\n<\/ul>\n<p><i><span style=\"font-weight: 400;\">{ &#8220;default&#8221;: [ &#8220;p24&#8221;, &#8220;eps&#8221;, &#8220;sepa_debit&#8221;, &#8220;ideal&#8221;, &#8220;sofort&#8221;, &#8220;bitcoin&#8221;, &#8220;alipay&#8221;, &#8220;bancontact&#8221;, &#8220;giropay&#8221; ], &#8220;en_UK&#8221;: [ &#8220;p24&#8221;, &#8220;eps&#8221; ], &#8220;de_AT&#8221;: [ &#8220;sofort&#8221;, &#8220;ideal&#8221; ] }<\/span><\/i><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By updating this box, indicate which supplementary payment options are available in each language version of your site. To learn more, check out the references.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stripe Enabled:<\/b><span style=\"font-weight: 400;\"> Turns the cartridge on or off.<\/span><\/li>\n<\/ul>\n<h3><b>Activate the Apple Pay Domain And the Webhook Endpoint<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Add a new endpoint to your Stripe account using the Stripe-WebHook controller URL, and then subscribe to the following events:<\/span><i><\/i><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">review.opened<\/span><\/i><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">review.closed<\/span><\/i><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">charge.succeeded<\/span><\/i><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">source.canceled<\/span><\/i><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">source.failed<\/span><\/i><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">source.chargeable<\/span><\/i><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">payment_intent.succeeded<\/span><\/i><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><i><span style=\"font-weight: 400;\">payment_intent.payment_failed<\/span><\/i><\/li>\n<\/ul>\n<p><a href=\"https:\/\/stripe.com\/docs\/plugins\/salesforce-commerce-cloud\/implementation-guide#stripe-dashboard-set-up\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Source<\/span><\/a><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/Activate-the-Apple-Pay-Domain.png\" \/><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/Webhook-Endpoint.png\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Make a duplicate of the signing secret and paste it into the Stripe Webhook Signing Secret setting. Set this to the country code associated with your Stripe account.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">For Apple Pay, update <\/span><span style=\"font-weight: 400;\">RedirectURL.js<\/span><span style=\"font-weight: 400;\">:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">server.extend(page);<\/span><\/p>\n<p><span style=\"font-weight: 400;\">server.replace(&#8216;Start&#8217;, function (req, res, next) {<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0const URLRedirectMgr = require(&#8216;dw\/web\/URLRedirectMgr&#8217;);<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\/\/ Intercept the incoming path request<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0if (URLRedirectMgr.getRedirectOrigin() === &#8216;\/.well-known\/apple-developer-merchantid-domain-association&#8217;) {<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.render(&#8216;stripe\/util\/apple&#8217;);<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0return next();<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0}<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0const redirect = URLRedirectMgr.redirect;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0const location = redirect ? redirect.location : null;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0const redirectStatus = redirect ? redirect.getStatus() : null;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0if (!location) {<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.setStatusCode(404);<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.render(&#8216;error\/notFound&#8217;);<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0} else {<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0if (redirectStatus) {<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0res.setRedirectStatus(redirectStatus);<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.redirect(location);<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0}<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0\u00a0return next();<\/span><\/p>\n<p><span style=\"font-weight: 400;\">});<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To verify your domain in the Stripe Dashboard, you&#8217;ll need to provide a temporary alias to one of the sandbox sites. The pseudonym should look like this:<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">{<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0&#8220;__version&#8221;: &#8220;1&#8221;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&#8220;settings&#8221;: {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;http-host&#8221;: &#8220;your.sandbox.domain.demandware.net&#8221;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;https-host&#8221;: &#8220;your.sandbox.domain.demandware.net&#8221;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;default&#8221;: &#8220;true&#8221;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;site-path&#8221;: &#8220;\/&#8221;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0},<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0&#8220;your.sandbox.domain.demandware.net&#8221;: [<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0{<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;locale&#8221;: &#8220;en_GB&#8221;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;if-site-path&#8221;: &#8220;\/&#8221;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0]<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">}<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">The value of the locale must correspond to a locale that is not disabled. If you want to set up a new domain for use with Apple Pay, you can do so from the Stripe dashboard by selecting the appropriate option. Get the verification file by entering the domain name here:<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/entering-the-domain-name.png\" \/><\/p>\n<p><span style=\"font-weight: 400;\">A copy of the file&#8217;s contents should be pasted into the<\/span><b> ApplePay Verification String<\/b><span style=\"font-weight: 400;\"> option.<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/ApplePay-Verification-String.png\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Now press <\/span><b>Add <\/b><span style=\"font-weight: 400;\">button<\/span><span style=\"font-weight: 400;\">:<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/press-Add-button.png\" \/><\/p>\n<h3><b>Update the Storefront Code<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The base LINK cartridge code supports all credit cards accepted by Stripe. The Credit\/Debit Cards list in Business Manager (Merchant Tools &gt; Ordering &gt; Payment Methods &gt; Credit\/Debit Cards) continues to set a limit on the cards that can be used on the storefront.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The Storefront Code needs the following modifications. The examples are built on SFRA version 4.4. The modifications made to the SFRA code are described in the sections that follow.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Many controller endpoints are appends rather than replacements. These are not covered since they ought to function automatically.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Only replaced endpoints require controller changes because you might have already changed that endpoint as part of your integration. Use the base cartridge&#8217;s modifications and incorporate them into your already-replaced controller. You don&#8217;t need to take any action if you haven&#8217;t expanded or replaced these endpoints.<\/span><\/p>\n<h4><b>CheckoutServices.js Controller<\/b><\/h4>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Path: <\/span><i><span style=\"font-weight: 400;\">app_stripe_sfra\/cartridge\/controllers\/CheckoutServices.js<\/span><\/i><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Remove the <\/span><b>SubmitPayment <\/b><span style=\"font-weight: 400;\">endpoint&#8217;s payment instrument validation.<\/span><\/li>\n<\/ul>\n<p><i><span style=\"font-weight: 400;\">if (!paymentMethodID &amp;&amp; currentBasket.totalGrossPrice.value &gt; 0) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0const noPaymentMethod = {};<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0noPaymentMethod[billingData.paymentMethod.htmlName] = Resource.msg(<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&#8216;error.no.selected.payment.method&#8217;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&#8216;payment&#8217;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0null<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0delete billingData.paymentInformation;<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0res.json({<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0form: billingForm,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0fieldErrors: [noPaymentMethod],<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0serverErrors: [],<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0error: true<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0return;<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">}<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\/\/ Validate payment instrument<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">const creditCardPaymentMethod = PaymentMgr.getPaymentMethod(PaymentInstrument.METHOD_CREDIT_CARD);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">const paymentCard = PaymentMgr.getPaymentCard(billingData.paymentInformation.cardType.value);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">const applicablePaymentCards = creditCardPaymentMethod.getApplicablePaymentCards(<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0req.currentCustomer.raw,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0req.geolocation.countryCode,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0null<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">if (!applicablePaymentCards.contains(paymentCard)) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\/\/ Invalid payment instrument<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0const invalidPaymentMethod = Resource.msg(&#8216;error.payment.not.valid&#8217;, &#8216;checkout&#8217;, null);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0delete billingData.paymentInformation;<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0res.json({<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0form: billingForm,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0fieldErrors: [],<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0serverErrors: [invalidPaymentMethod],<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0error: true<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0return;<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">}<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">A code update for the order creation:<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">\/\/ Re-calculate the payments<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">const calculatedPaymentTransactionTotal = COHelpers.calculatePaymentTransaction(currentBasket);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">if (calculatedPaymentTransactionTotal.error) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0res.json({<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0error: true,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0errorMessage: Resource.msg(&#8216;error.technical&#8217;, &#8216;checkout&#8217;, null);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0return next();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">}<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">const stripeCheckoutHelper = require(&#8216;int_stripe_core&#8217;).getCheckoutHelper();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">const order = stripeCheckoutHelper.createOrder(currentBasket);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">if (!order) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0res.json({<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0error: true,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0errorMessage: Resource.msg(&#8216;error.technical&#8217;, &#8216;checkout&#8217;, null);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0return next();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">}<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">Revise the order placement code:<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">var isAPMOrder = stripeCheckoutHelper.isAPMORder(order);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">if (!isAPMOrder) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0var stripePaymentInstrument = stripeCheckoutHelper.getStripePaymentInstrument(order);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0if (stripePaymentInstrument &amp;&amp; order.custom.stripeIsPaymentIntentInReview) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.json({<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0error: false,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0orderID: order.orderNo,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0orderToken: order.orderToken,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0continueUrl: URLUtils.url(&#8216;Order-Confirm&#8217;).toString()<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0return next();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0}<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\/\/ Places the order<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0var placeOrderResult = COHelpers.placeOrder(order, fraudDetectionStatus);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0if(placeOrderResult.error) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0stripeCheckoutHelper.refundCharge(order);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.json({<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0error: true,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0errorMessage: Resource.msg(&#8216;error.technical&#8217;, &#8216;checkout&#8217;, null)<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0const fraudDetectionStatus = hooksHelper(<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&#8216;app.fraud.detection&#8217;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0&#8216;fraudDetection&#8217;,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0currentBasket,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0require(&#8216;*\/cartridge\/scripts\/hooks\/fraudDetection&#8217;).fraudDetection<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0if (fraudDetectionStatus.status === &#8216;fail&#8217;) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0Transaction.wrap(function () {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OrderMgr.failOrder(order);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\/\/ Fraud detection failed<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0req.session.privacyCache.set(&#8216;fraudDetectionStatus&#8217;, true);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.json({<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0error: true,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0cartError: true,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0redirectUrl: URLUtils.url(&#8216;Error-ErrorCode&#8217;, &#8216;err&#8217;, fraudDetectionStatus.errorCode).toString(),<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0errorMessage: Resource.msg(&#8216;error.technical&#8217;, &#8216;checkout&#8217;, null);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0return next();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0}<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0COHelpers.sendConfirmationEmail(order, req.locale.id);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\/\/ Reset usingMultiShip after successful Order placement<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0req.session.privacyCache.set(&#8216;usingMultiShip&#8217;, false);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0res.json({<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0error: false,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0orderID: order.orderNo,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0orderToken: order.orderToken,<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0continueUrl: URLUtils.url(&#8216;Order-Confirm&#8217;).toString()<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0return next();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">}<\/span><\/i><\/p>\n<h4><b>Controller: PaymentInstruments.js<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Path: <\/span><i><span style=\"font-weight: 400;\">app_stripe_sfra\/cartridge\/controllers\/PaymentInstruments.js<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">DeletePayment endpoint should be substituted with the given code:<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">server.replace(&#8216;DeletePayment&#8217;, function(req, res, next) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0var stripeHelper = require (&#8216;int_stripe_core&#8217;).getStripeHelper();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0var wallet = stripeHelper.getStripeWallet(customer);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0var UUID = req.querystring.UUID;<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0wallet.removePaymentInstrument({ custom: { stripeId: UUID }});<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0res.json({\u00a0 UUID: UUID });<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0next();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">});<\/span><\/i><\/p>\n<h4><b>Controller: RedirectURL.js<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Path: <\/span><i><span style=\"font-weight: 400;\">app_stripe_sfra\/cartridge\/controllers\/RedirectURL.js<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400;\">Copy the following code and insert it into the Start function:<\/span><\/p>\n<p><i><span style=\"font-weight: 400;\">server.replace(&#8216;Start&#8217;, function (req, res, next) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0const URLRedirectMgr = require(&#8216;dw\/web\/URLRedirectMgr&#8217;);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\/\/ Intercept the incoming path request<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0if (URLRedirectMgr.getRedirectOrigin() === &#8216;\/.well-known\/apple-developer-merchantid-domain-association&#8217;) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.render(&#8216;stripe\/util\/apple&#8217;);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0return next();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0}<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0const redirect = URLRedirectMgr.redirect;<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0const location = redirect ? redirect.location : null;<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0const redirectStatus = redirect ? redirect.getStatus() : null;<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0if (!location) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.setStatusCode(404);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.render(&#8216;error\/notFound&#8217;);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0} else {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0if (redirectStatus) {<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0res.setRedirectStatus(redirectStatus);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0res.redirect(location);<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0}<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">\u00a0\u00a0return next();<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400;\">});<\/span><\/i><\/p>\n<h3><b>External Interfaces<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">External calls to Stripe services are crucial to Stripe functionality. The service framework is used by all external interfaces to interact with the Stripe API.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Create and utilize a Stripe account are both free. The Stripe Dashboard keeps track of and makes most communications with Stripe services available. We urge you to test and monitor your integration using the Stripe Dashboard. Under Administration &gt; Operations &gt; Services, with a different service for each external call, is where you&#8217;ll find the key setup for integrating the Stripe services:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.addCard<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.authorizePayment<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.createCharge<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.createCustomer<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.deleteCard<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.fetchCustomerCards<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.fetchCustomerSources<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.refundCharge<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.retrieveCustomer<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.service<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">stripe.http.updateCard<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">The credentials and profile information for all these services are shared. The only possible variation is the log name prefix and whether or not the communication log is enabled. Some of the service configurations are listed below:<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/service-configurations.png\" \/><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/service-configurations-2.png\" \/><\/p>\n<h3><b>Stripe Payment Element<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">You can use the Stripe Payment Element with the Stripe cartridge to make purchases.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You may easily take payments from a wide variety of customers by including the Payment Element into your existing user interface.<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/Stripe-Payment-Element.png\" \/><\/p>\n<p><span style=\"font-weight: 400;\">The Payment Element can be activated by navigating to <\/span><b>Business Manager &gt; Merchant Tools &gt; Ordering &gt; Payment Methods<\/b><span style=\"font-weight: 400;\">, then enabling the payment method with <\/span><b>ID STRIPE PAYMENT ELEMENT.<\/b><span style=\"font-weight: 400;\"> You may find a widget listing all accepted payment methods on your Stripe Dashboard under your store&#8217;s <\/span><b>Checkout &gt; Payment section<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Whenever Payment Element is activated in Business Manager, it can be used in place of any other accepted payment type. Rather than utilizing the standard collection of payment gateways, you can turn them all off and replace them with <\/span><b>STRIPE PAYMENT ELEMENT.<\/b><\/p>\n<p><b>Business Manager &gt; Custom Preferences &gt; Stripe Configs<\/b><span style=\"font-weight: 400;\"> is where you&#8217;ll go to enable the saving of payment methods for future use from Stripe Payment Element. Set the option to <\/span><b>&#8220;<\/b><b>Enable Save Payment Method for Future Purchases<\/b><b>&#8220;<\/b><span style=\"font-weight: 400;\"> to <\/span><b>Yes<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Go to the\u00a0 <\/span><b>Business Manager &gt; Payments Methods<\/b><span style=\"font-weight: 400;\"> to show a drop-down menu of previously used payment options; here, you can enable the <\/span><b>CREDIT CARD payment method<\/b><span style=\"font-weight: 400;\">. When<\/span><b> STRIPE PAYMENT ELEMENT<\/b><span style=\"font-weight: 400;\"> is activated, the credit card settings page will display a list of previously stored payment methods (if any).<\/span><\/p>\n<h3><b>Stripe Radar insights display<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The Stripe LINK cartridge&#8217;s Radar insights feature in Business Manager&#8217;s Orders area displays risk insights. <\/span><b>Radar <\/b><span style=\"font-weight: 400;\">is a zero-downtime anti-fraud solution that works in real time. <\/span><b>Radar for Fraud Teams<\/b><span style=\"font-weight: 400;\"> is an optional add-on that provides more customization options and context for protecting against and investigating fraud.<\/span><\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/Stripe-Radar-insights-display.png\" \/><\/p>\n<p><span style=\"font-weight: 400;\">If you want to enable the insight display, go to the <\/span><b>Business Manager &gt; Merchant Tools &gt; Custom Preferences &gt; Stripe&#8217;s configurations<\/b><span style=\"font-weight: 400;\"> and click <\/span><b>yes <\/b><span style=\"font-weight: 400;\">on<\/span><b> Risk Score Data<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><a href=\"https:\/\/ecommerce.folio3.com\/contact-us\/?utm_source=blog&amp;utm_medium=stripe-salesforce-commerce-cloud-blog&amp;utm_campaign=internal-linking\"><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2022\/09\/Salesforce-integrations-1.png\" \/><\/a><\/p>\n<h2><b>Conclusion<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">With the help of <\/span><b>Stripe Salesforce Commerce Cloud<\/b><span style=\"font-weight: 400;\"> integration, businesses can benefit from the streamlined management of their sales and financial information. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">It includes online credit card payments and more.<\/span><a href=\"https:\/\/ecommerce.folio3.com\/salesforce-commerce-cloud-implementation\/\"><b> Salesforce Commerce Cloud implementation<\/b><\/a><span style=\"font-weight: 400;\"> with Stripe provides an instantaneous snapshot of your client&#8217;s financial data for your entire team.<\/span><\/p>\n<p><a href=\"https:\/\/ecommerce.folio3.com\/salesforce-commerce-cloud-support\/\"><b>Salesforce Commerce Cloud support<\/b><\/a><span style=\"font-weight: 400;\"> is a top customer relationship management system, while Stripe is a robust SaaS-based all-in-one payment solution.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Payment processing, subscription administration, on-demand marketplace development, and crowdfunding portal creation are simplified with Stripe and <\/span><a href=\"https:\/\/ecommerce.folio3.com\/salesforce-b2c-commerce\/\"><b>Salesforce B2C Commerce Cloud integration<\/b><\/a><span style=\"font-weight: 400;\">. A <\/span><b>Salesforce Commerce Cloud consultant<\/b><span style=\"font-weight: 400;\"> can help you if you are not a computer person.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Your customers may spend most of their time following up on invoices. It could be hectic for e-Commerce merchants to keep track of all the information. It is also crucial to use the adaptable method to facilitate payments, gather customer data, and share it with team members.\u00a0 Many countries are supported by Stripe&#8217;s online payment<\/p>\n","protected":false},"author":1,"featured_media":15406,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[51],"tags":[56],"class_list":{"0":"post-15329","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-salesforce-commerce-cloud","8":"tag-salesforce-commerce-cloud-integration"},"acf":[],"featured_image_data":{"src":"https:\/\/ecommerce.folio3.com\/blog\/wp-content\/uploads\/2023\/01\/Stripe-Payment-Integration-With-Salesforce-B2C-Commerce.png","alt":"Stripe Salesforce Commerce Cloud","caption":""},"_links":{"self":[{"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/posts\/15329"}],"collection":[{"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/comments?post=15329"}],"version-history":[{"count":0,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/posts\/15329\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/media\/15406"}],"wp:attachment":[{"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/media?parent=15329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/categories?post=15329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ecommerce.folio3.com\/blog\/wp-json\/wp\/v2\/tags?post=15329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}