{"title":"Set up your Composable Storefront with Adyen","category":"default","creationDate":1678958820,"content":"<p>This page guides you through the steps to set up your Salesforce Composable Storefront integration with Adyen.<\/p>\n<div data-component-wrapper=\"in-page-filtering\">\n    <in-page-filtering\n        id=\"composable-storefront\"\n        :in-page-filtering=\"{&quot;guides&quot;:{&quot;composable_storefront&quot;:{&quot;label&quot;:&quot;Salesforce Composable Storefront&quot;,&quot;integrations&quot;:{&quot;package&quot;:{&quot;label&quot;:&quot;package&quot;,&quot;description&quot;:&quot;Use our Composable Storefront package for accepting payments&quot;,&quot;displayVersionDropdown&quot;:true,&quot;visual_content&quot;:null,&quot;visual_images&quot;:null,&quot;external_content&quot;:null,&quot;external_icon&quot;:null,&quot;versions&quot;:{&quot;version-4.2.1&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;7bb056caffab1fc365e0b7d0cccdc70c&quot;},&quot;install-the-cartridge&quot;:{&quot;$ref&quot;:&quot;468c445d2dd046bb32613ca6981a508d&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;246ce195179d24d38dbe99d3a9bd99c2&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;9c5873329bf26fa7c39a117b8644654f&quot;},&quot;configure&quot;:{&quot;$ref&quot;:&quot;d4295c71f63f5cfcf29928b2111aebe8&quot;},&quot;back_button&quot;:{&quot;$ref&quot;:&quot;4f89091c474b0f88d5379f61ebfa0e57&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;c6bce231a5dfe6b56054b896f276ab20&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;4d23cfb6d155ec6d68b6b0e7eb8a8f8d&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;a8e058c950c22cd5ed6508a4f9d09835&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;2ee1774f9a7d31b6896e57ab0c0d356f&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;17b8e4202170267960b427e8b1da3245&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;8c6a0aa80b167d52c5b31cae90203ce2&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;versions&quot;:{&quot;version&quot;:&quot;4.2.1&quot;},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68}},&quot;version-4.2.0&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;7bb056caffab1fc365e0b7d0cccdc70c&quot;},&quot;install-the-cartridge&quot;:{&quot;$ref&quot;:&quot;468c445d2dd046bb32613ca6981a508d&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;246ce195179d24d38dbe99d3a9bd99c2&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;9c5873329bf26fa7c39a117b8644654f&quot;},&quot;configure&quot;:{&quot;$ref&quot;:&quot;d4295c71f63f5cfcf29928b2111aebe8&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;4016da704d8b6838e8f3914135f588c5&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6f1f13f8c323a2d2ff6e05a702354d6f&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;9ba8cdb6494271118dc334f8aefa8b11&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;76eacb082c5ecf70189dc9bab2895713&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;3a05ddf05119a6b0ee260ccf4abef9c3&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;8c6a0aa80b167d52c5b31cae90203ce2&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68},&quot;versions&quot;:{&quot;version&quot;:&quot;4.2.0&quot;}},&quot;version-4.1.1&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;7bb056caffab1fc365e0b7d0cccdc70c&quot;},&quot;install-the-cartridge&quot;:{&quot;$ref&quot;:&quot;468c445d2dd046bb32613ca6981a508d&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;246ce195179d24d38dbe99d3a9bd99c2&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;9c5873329bf26fa7c39a117b8644654f&quot;},&quot;configure&quot;:{&quot;$ref&quot;:&quot;d4295c71f63f5cfcf29928b2111aebe8&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;4016da704d8b6838e8f3914135f588c5&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6f1f13f8c323a2d2ff6e05a702354d6f&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;9ba8cdb6494271118dc334f8aefa8b11&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;76eacb082c5ecf70189dc9bab2895713&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;3a05ddf05119a6b0ee260ccf4abef9c3&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;8c6a0aa80b167d52c5b31cae90203ce2&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68},&quot;versions&quot;:{&quot;version&quot;:&quot;4.1.1&quot;}},&quot;version-4.1.0&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;7bb056caffab1fc365e0b7d0cccdc70c&quot;},&quot;install-the-cartridge&quot;:{&quot;$ref&quot;:&quot;468c445d2dd046bb32613ca6981a508d&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;246ce195179d24d38dbe99d3a9bd99c2&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;9c5873329bf26fa7c39a117b8644654f&quot;},&quot;configure&quot;:{&quot;$ref&quot;:&quot;d4295c71f63f5cfcf29928b2111aebe8&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;4016da704d8b6838e8f3914135f588c5&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6f1f13f8c323a2d2ff6e05a702354d6f&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;9ba8cdb6494271118dc334f8aefa8b11&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;76eacb082c5ecf70189dc9bab2895713&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;3a05ddf05119a6b0ee260ccf4abef9c3&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;8c6a0aa80b167d52c5b31cae90203ce2&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68},&quot;versions&quot;:{&quot;version&quot;:&quot;4.1.0&quot;}},&quot;version-4.0.0&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;7bb056caffab1fc365e0b7d0cccdc70c&quot;},&quot;install-the-cartridge&quot;:{&quot;$ref&quot;:&quot;468c445d2dd046bb32613ca6981a508d&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;246ce195179d24d38dbe99d3a9bd99c2&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;9c5873329bf26fa7c39a117b8644654f&quot;},&quot;configure&quot;:{&quot;$ref&quot;:&quot;d4295c71f63f5cfcf29928b2111aebe8&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;4016da704d8b6838e8f3914135f588c5&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6f1f13f8c323a2d2ff6e05a702354d6f&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;9ba8cdb6494271118dc334f8aefa8b11&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;76eacb082c5ecf70189dc9bab2895713&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;3a05ddf05119a6b0ee260ccf4abef9c3&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;8c6a0aa80b167d52c5b31cae90203ce2&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;versions&quot;:{&quot;version&quot;:&quot;4.0.0&quot;},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68}},&quot;version-3.0.3&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;0835a8426c299e2fbc3ccf46f19a4909&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;b8d861e2d15f6e9de8baf89a1685ed0e&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68},&quot;versions&quot;:{&quot;version&quot;:&quot;3.0.3&quot;}},&quot;version-3.0.2&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;0835a8426c299e2fbc3ccf46f19a4909&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;b8d861e2d15f6e9de8baf89a1685ed0e&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;versions&quot;:{&quot;version&quot;:&quot;3.0.2&quot;},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68}},&quot;version-3.0.1&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;0835a8426c299e2fbc3ccf46f19a4909&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;b8d861e2d15f6e9de8baf89a1685ed0e&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68},&quot;versions&quot;:{&quot;version&quot;:&quot;3.0.1&quot;}},&quot;version-3.0.0&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;0835a8426c299e2fbc3ccf46f19a4909&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;b8d861e2d15f6e9de8baf89a1685ed0e&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;versions&quot;:{&quot;version&quot;:&quot;3.0.0&quot;},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68}},&quot;version-2.0.1&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;1fe503fb592e1c8ed49a4623934b5dc4&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;46e0ebe398cf352e1e8fbac17da29448&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68},&quot;versions&quot;:{&quot;version&quot;:&quot;2.0.1&quot;}},&quot;version-2.0.0&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;1fe503fb592e1c8ed49a4623934b5dc4&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;46e0ebe398cf352e1e8fbac17da29448&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;versions&quot;:{&quot;version&quot;:&quot;2.0.0&quot;},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68}},&quot;version-1.2.0&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;020a42ee5310ff961a54f28dc168cd5a&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;fcf191895964788128f78ca4404e7bbe&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68},&quot;versions&quot;:{&quot;version&quot;:&quot;1.2.0&quot;}},&quot;version-1.1.0&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;020a42ee5310ff961a54f28dc168cd5a&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;fcf191895964788128f78ca4404e7bbe&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68},&quot;versions&quot;:{&quot;version&quot;:&quot;1.1.0&quot;}},&quot;version-1.0.0&quot;:{&quot;sections&quot;:{&quot;before_you_begin&quot;:{&quot;$ref&quot;:&quot;020a42ee5310ff961a54f28dc168cd5a&quot;},&quot;build_pwa_app&quot;:{&quot;$ref&quot;:&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;},&quot;install_package&quot;:{&quot;$ref&quot;:&quot;661090efb161dc3960dd64fcdc700765&quot;},&quot;set_up_locales&quot;:{&quot;$ref&quot;:&quot;07bbf40b8585e6d3a97fead7f707be93&quot;},&quot;generate_api_key&quot;:{&quot;$ref&quot;:&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;},&quot;webhooks&quot;:{&quot;$ref&quot;:&quot;21f8f00eba85a87efe5a33116d274b6a&quot;},&quot;deploy_in_managed_runtime&quot;:{&quot;$ref&quot;:&quot;fcf191895964788128f78ca4404e7bbe&quot;},&quot;import_country_region_list&quot;:{&quot;$ref&quot;:&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;},&quot;migrate_pages&quot;:{&quot;$ref&quot;:&quot;01264a29cbafa3f2efcba7586653df0d&quot;},&quot;test&quot;:{&quot;$ref&quot;:&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;},&quot;next_steps&quot;:{&quot;$ref&quot;:&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;}},&quot;versions&quot;:{&quot;version&quot;:&quot;1.0.0&quot;},&quot;config&quot;:{&quot;published&quot;:true,&quot;visible&quot;:true,&quot;api_version&quot;:68}}},&quot;sections&quot;:[],&quot;components&quot;:{&quot;020a42ee5310ff961a54f28dc168cd5a&quot;:&quot;&lt;h2&gt;Requirements&lt;\\\/h2&gt;\\n&lt;p&gt;Before you begin, take into account the following requirements, limitations, and preparations.&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Requirement&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Integration type&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Use this page to build an integration with our Salesforce Composable Storefront package.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Supported versions&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;ul&gt;&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/help.salesforce.com\\\/s\\\/articleView?id=sf.b2c_pwa_kit_release_notes_archive.htm&amp;amp;type=5\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce PWA Kit&lt;\\\/a&gt; v3.1.1 and later&lt;\\\/li&gt;&lt;li&gt; Node v18 or later&lt;\\\/li&gt;&lt;li&gt; npm v9 or later&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Setup steps&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Before you begin, complete the following steps on the Salesforce side: &lt;ul&gt; &lt;li&gt;Set up a Salesforce sandbox connected to your Salesforce Commerce Cloud (SFCC) instance.&lt;\\\/li&gt; &lt;li&gt;Set up your environments, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-managing-sites-for-dev.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;sites&lt;\\\/a&gt;, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-localization.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;locales and currencies&lt;\\\/a&gt;, and &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-inventory-for-developers.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;product inventories&lt;\\\/a&gt;. &lt;\\\/li&gt; &lt;li&gt;Reach out to your Salesforce account team and enable &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Managed Runtime (MRT)&lt;\\\/a&gt; on your SFCC instance.&lt;\\\/li&gt;&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#change-a-users-role\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Set your MRT permissions to &lt;strong&gt;Admin&lt;\\\/strong&gt;&lt;\\\/a&gt;.&lt;\\\/li&gt;&lt;li&gt;Review the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/configuration-options.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;configuration file&lt;\\\/a&gt; structure of the Salesforce PWA kit.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;&quot;,&quot;8ebb95c7433ebd741bbd2c1c5edbfcdc&quot;:&quot;&lt;h2&gt;Step 1: Build your local PWA app&lt;\\\/h2&gt;\\n&lt;p&gt;To use Adyen as the payment processor for your PWA app, you need to generate a new PWA project.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Initiate the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/SalesforceCommerceCloud\\\/pwa-kit\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce PWA Kit&lt;\\\/a&gt; starter project with the following command:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npx @salesforce\\\\\\\/pwa-kit-create-app\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The command-line interface guides you through the setup. While you set up your project, you are asked to link the generated retail app to a demo sandbox or your own sandbox.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;Only if you link the retail app to your own sandbox, enter the following details at the command prompt when creating the new app:\\n&lt;ul&gt;\\n&lt;li&gt;Sandbox URL&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/slas.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Shopper Login and API Access Service (SLAS)&lt;\\\/a&gt; client ID&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/commerce-api-configuration-values.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Site (storefront) ID&lt;\\\/a&gt;&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/commerce-api-configuration-values.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Organization (Org) ID&lt;\\\/a&gt;&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/commerce-api-configuration-values.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Short code&lt;\\\/a&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;&lt;\\\/li&gt;\\n&lt;li&gt;Launch your retail app with the following command:\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run start\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;661090efb161dc3960dd64fcdc700765&quot;:&quot;&lt;h2 id=\\&quot;install-the-adyen-package-in-your-local-pwa-app\\&quot;&gt;Step 2: Install the Adyen package in your local PWA app&lt;\\\/h2&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the root directory of your PWA app, install the &lt;a href=\\&quot;https:\\\/\\\/www.npmjs.com\\\/package\\\/@adyen\\\/adyen-salesforce-pwa?activeTab=readme\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Adyen Salesforce PWA npm package&lt;\\\/a&gt;:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm install @adyen\\\\\\\/adyen-salesforce-pwa\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your PWA app, adjust the &lt;code&gt;overrides\\\/app\\\/ssr.js&lt;\\\/code&gt; file to import Adyen routes. You must import routes in the following order:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Adyen routes. Add the following line:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;js&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import {registerAdyenEndpoints} from &#039;@adyen\\\\\\\/adyen-salesforce-pwa\\\\\\\/dist\\\\\\\/ssr\\\\\\\/index.js&#039;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Default Salesforce routes.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Custom routes. We recommend you integrate and test the package without &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/customization-guide\\&quot;&gt;customizations&lt;\\\/a&gt; first.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the &lt;code&gt;overrides\\\/app&lt;\\\/code&gt; folder of your Retail React app:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;In &lt;code&gt;routes.jsx&lt;\\\/code&gt;, import the Adyen CSS file:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;jsx&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import &#039;@adyen\\\\\\\/adyen-salesforce-pwa\\\\\\\/dist\\\\\\\/app\\\\\\\/adyen.css&#039;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Override the &lt;code&gt;checkout\\\/index.jsx&lt;\\\/code&gt; file to wrap the Salesforce checkout provider with the Adyen checkout provider, passing the relevant hooks.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;jsx&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import Payment from &#039;.\\\\\\\/partials\\\\\\\/payment&#039;\\\\nimport {AdyenCheckoutProvider} from &#039;@adyen\\\\\\\/adyen-salesforce-pwa&#039;\\\\nimport &#039;@adyen\\\\\\\/adyen-salesforce-pwa\\\\\\\/dist\\\\\\\/app\\\\\\\/adyen.css&#039;\\\\nimport {\\\\n    useAccessToken,\\\\n    useCustomerId,\\\\n    useCustomerType,\\\\n    useShopperBasketsMutation\\\\n} from &#039;@salesforce\\\\\\\/commerce-sdk-react&#039;\\\\nimport useMultiSite from &#039;@salesforce\\\\\\\/retail-react-app\\\\\\\/app\\\\\\\/hooks\\\\\\\/use-multi-site&#039;\\\\nimport useNavigation from &#039;@salesforce\\\\\\\/retail-react-app\\\\\\\/app\\\\\\\/hooks\\\\\\\/use-navigation&#039;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/develop\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/index.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;file in our example package in GitHub&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Override the &lt;code&gt;checkout\\\/partials\\\/payment.jsx&lt;\\\/code&gt; file to render the &lt;code&gt;AdyenCheckout&lt;\\\/code&gt; component from the &lt;code&gt;adyen-salesforce-pwa&lt;\\\/code&gt; package. &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/develop\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/partials\\\/payment.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;See how you can render the component in our GitHub&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Override the &lt;code&gt;checkout\\\/confirmation.jsx&lt;\\\/code&gt; file to wrap the Salesforce checkout confirmation page with the &lt;code&gt;AdyenCheckout&lt;\\\/code&gt; and &lt;code&gt;AdyenCheckoutProvider&lt;\\\/code&gt; from the &lt;code&gt;adyen-salesforce-pwa&lt;\\\/code&gt; package. &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/confirmation.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;See how you can render the components in our GitHub&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Create an error page and register it in &lt;code&gt;routes.jsx&lt;\\\/code&gt; as &lt;code&gt;checkout\\\/error&lt;\\\/code&gt;. See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/develop\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/error\\\/index.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;example error page in our GitHub&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Create a redirect page and register it in &lt;code&gt;routes.jsx&lt;\\\/code&gt; as &lt;code&gt;checkout\\\/redirect&lt;\\\/code&gt;. See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/develop\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/redirect\\\/index.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;example redirect page in our GitHub&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;p&gt;See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/routes.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;&lt;code&gt;routes.jsx&lt;\\\/code&gt;file on our GitHub&lt;\\\/a&gt; to see how you can register pages.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your &lt;code&gt;package.json&lt;\\\/code&gt; file, add the following scripts:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;\\\\\\&quot;upload-env\\\\\\&quot;: \\\\\\&quot;upload-env\\\\\\&quot;,\\\\n\\\\\\&quot;get-env\\\\\\&quot;: \\\\\\&quot;get-env\\\\\\&quot;,\\\\n\\\\\\&quot;start:env\\\\\\&quot;: \\\\\\&quot;include-env -p=npm run start\\\\\\&quot;,\\\\n\\\\\\&quot;push:env\\\\\\&quot;: \\\\\\&quot;include-env -p=npm run push\\\\\\&quot;\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Run the integration:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run start :env\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;07bbf40b8585e6d3a97fead7f707be93&quot;:&quot;&lt;h2&gt;Step 3: Set up locales in your PWA app&lt;\\\/h2&gt;\\n&lt;p&gt;The &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file in the PWA Retail React app contains the locale definitions for your sites. You need to update this file with the locales you want to support in your Salesforce Commerce Cloud site:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the PWA Retail React app package, go to the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Set the following fields:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Field&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;supportedCurrencies&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The array of all currencies for the locales you have set up.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;defaultCurrency&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The default currency for your site.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;defaultLocale&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The default locale for your site.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;supportedLocales&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The array for all locale objects. Each locale object consists of: &lt;ul&gt; &lt;li&gt;&lt;code&gt;id&lt;\\\/code&gt;: the locale ID, for example &lt;strong&gt;en-US&lt;\\\/strong&gt;.&lt;\\\/li&gt; &lt;li&gt; &lt;code&gt;preferredCurrency&lt;\\\/code&gt;: the currency for the locale, for example: &lt;strong&gt;USD&lt;\\\/strong&gt;. &lt;\\\/li&gt; &lt;li&gt; &lt;code&gt;alias&lt;\\\/code&gt; (optional): You can use this attribute if you want to use other string instead of the &lt;code&gt;id&lt;\\\/code&gt;. &lt;\\\/li&gt; &lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/c32b81aedb296896b718cede348740455a3405d0\\\/packages\\\/adyen-retail-react-app\\\/config\\\/sites.js\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;PWA integration with the Adyen package on GitHub&lt;\\\/a&gt; to see an example locale configuration.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file, change the local attribute from &lt;strong&gt;none&lt;\\\/strong&gt; to &lt;strong&gt;query_param&lt;\\\/strong&gt; or &lt;strong&gt;path&lt;\\\/strong&gt; to display the locale in the URL.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Only if you defined the &lt;code&gt;alias&lt;\\\/code&gt; field for locales, in the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file, remove the comment markers for &lt;code&gt;siteAliases&lt;\\\/code&gt;, and provide the aliases for your sites.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;6d0514a8365dfa69bef8f6d62dcf162c&quot;:&quot;&lt;h2&gt;Step 4: Generate an Adyen API Key&lt;\\\/h2&gt;\\n&lt;p&gt;If you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you do not have to generate a new API Key and you can skip this step.&lt;\\\/p&gt;\\n&lt;p&gt;To connect your PWA store to the Adyen APIs, you need to generate an API key in your Adyen Customer Area and &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;add it to the package configuration when you set environment variables&lt;\\\/a&gt; in a later step.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;Log in to your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt; and select your &lt;strong&gt;Company&lt;\\\/strong&gt; account.&lt;\\\/li&gt;\\n&lt;li&gt;Go to &lt;strong&gt;Developers&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;API credentials&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select the &lt;strong&gt;Payments&lt;\\\/strong&gt; or &lt;strong&gt;Platforms&lt;\\\/strong&gt; tab, depending on your integration type.&lt;\\\/li&gt;\\n&lt;li&gt;Select the credential username.&lt;\\\/li&gt;\\n&lt;li&gt;Under &lt;strong&gt;Server settings&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Authentication&lt;\\\/strong&gt; select the &lt;strong&gt;API key&lt;\\\/strong&gt; tab.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Generate API key&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select the copy icon &lt;i class=\\&quot;adl-icon-copy\\&quot;&gt;&lt;\\\/i&gt; and store your API key securely in your system.\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;You cannot copy the API key again after you leave the page.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Save changes&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;21f8f00eba85a87efe5a33116d274b6a&quot;:&quot;&lt;h2 id=\\&quot;set-up-webhooks\\&quot;&gt;Step 5: Set up webhooks in the Adyen Customer Area&lt;\\\/h2&gt;\\n&lt;p&gt;Adyen uses &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\&quot;&gt;webhooks&lt;\\\/a&gt; to inform your Salesforce Commerce Cloud store of payment status changes.&lt;\\\/p&gt;\\n&lt;p&gt;To set up webhooks:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt;, go to &lt;strong&gt;Developers&lt;\\\/strong&gt;\\u00a0&amp;gt;\\u00a0 &lt;strong&gt;Webhooks&lt;\\\/strong&gt;. If you want to configure webhooks for a merchant account, switch to that merchant account.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Select &lt;i class=\\&quot;adl-icon-add\\&quot; role=\\&quot;img\\&quot; aria-label=\\&quot;add icon\\&quot;&gt;&lt;\\\/i&gt; &lt;strong&gt;Webhook&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;From the list of webhooks, next to &lt;strong&gt;Standard webhook&lt;\\\/strong&gt;, select &lt;strong&gt;Add&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;General&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Setting&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Enabled&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Select the toggle to enable or disable the webhook.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Version&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The webhook version.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Description&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your description of the webhook.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Server configuration&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Setting&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your website URL followed by &lt;strong&gt;\\\/api\\\/adyen\\\/webhook&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Method&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;JSON&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Encryption protocol&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;TLSv1.3&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Security&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Setting&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Basic authentication&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Enter your server&#039;s username and password. You need to enter these credentials when &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;setting environment variables&lt;\\\/a&gt; later.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;HMAC Key&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Generate the HMAC Key, copy it, and store it securely in your system. You need to enter the key when &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;setting environment variables&lt;\\\/a&gt; later. &lt;br&gt; Learn more about &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/secure-webhooks\\\/verify-hmac-signatures#enable-hmac-signatures\\&quot;&gt;verifying HMAC signatures&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Events&lt;\\\/strong&gt; settings, select the checkbox for the &lt;strong&gt;OFFER_CLOSED&lt;\\\/strong&gt; &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/webhook-types\\\/#event-codes\\&quot;&gt;event code&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;If the &lt;strong&gt;Additional settings&lt;\\\/strong&gt; section is available, optionally select the additional information you want to receive in this webhook. Some webhook types do not support more than one event code, so this section does not appear.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Select &lt;strong&gt;Save configuration&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;p&gt;The package implements the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Webhooks\\\/1\\\/post\\\/AUTHORISATION\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;AUTHORISATION&lt;\\\/a&gt; webhook by default. If you want to receive webhooks for &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/webhook-types#event-codes\\&quot;&gt;more payment events&lt;\\\/a&gt;, you can &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/customization-guide\\&quot;&gt;customize&lt;\\\/a&gt; your integration after you have successfully &lt;a href=\\&quot;#deploy-to-mrt\\&quot;&gt;deployed your application in MRT&lt;\\\/a&gt; and &lt;a href=\\&quot;#test-your-integration\\&quot;&gt;completed testing&lt;\\\/a&gt; without any customizations.&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;You cannot test Adyen webhooks on localhost.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&quot;,&quot;fcf191895964788128f78ca4404e7bbe&quot;:&quot;&lt;h2 id=\\&quot;deploy-to-mrt\\&quot;&gt;Step 6: Deploy your application in Managed Runtime&lt;\\\/h2&gt;\\n&lt;p&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce&#039;s Managed Runtime (MRT)&lt;\\\/a&gt; provides the infrastructure to deploy, host, and monitor your PWA Kit application.&lt;\\\/p&gt;\\n&lt;p&gt;Managed Runtime only supports applications created from a PWA Kit template and has a separate &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;admin dashboard&lt;\\\/a&gt;. Before you can use MRT and Runtime Admin, Salesforce must enable it for your organization. To enable MRT and Runtime Admin for your organization, reach out to your Salesforce account team.&lt;\\\/p&gt;\\n&lt;p&gt;When building your storefront, keep the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#constraints\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;constraints of MRT environments&lt;\\\/a&gt; in mind.&lt;\\\/p&gt;\\n&lt;h3&gt;1. Create a new project in Managed Runtime&lt;\\\/h3&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#create-a-project\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create a project in Runtime Admin&lt;\\\/a&gt;. Use the following details for your project:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Field&lt;\\\/th&gt;\\n&lt;th&gt;Value&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project Name&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;adyen-salesforce-headless-commerce-pwa&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Project IDs must match the package name in the &lt;code&gt;package.json&lt;\\\/code&gt; file and can not be longer than 20 characters.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Scopes&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;list of scopes&lt;\\\/a&gt; that are used to fetch baskets and create orders.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;h3 id=\\&quot;set-up-the-environment\\&quot;&gt;2. Set up the MRT environment&lt;\\\/h3&gt;\\n&lt;p&gt;Set up an environment to separate your production storefront from other storefronts, such as development or testing storefronts. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;environments in Salesforce docs&lt;\\\/a&gt; to learn more about environments.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;Follow the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;steps to create an environment in Salesforce Docs&lt;\\\/a&gt;.&lt;br \\\/&gt;\\n&lt;strong&gt;Name&lt;\\\/strong&gt;: use your Sandbox Org ID to easily identify an environment that belongs to a sandbox, and to create variables correctly for each environment.&lt;br \\\/&gt;\\n&lt;strong&gt;Region&lt;\\\/strong&gt;: we recommend to set your MRT region to the same region that your Salesforce sandbox uses.\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;Your Composable Storefront integration with Adyen can only have one region connected to one MRT organization, one SFCC site, and one Adyen Customer Area account.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;h3 id=\\&quot;set-environment-variables\\&quot;&gt;3. Set the environment variables&lt;\\\/h3&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Create an &lt;code&gt;.env&lt;\\\/code&gt; file in your Retail React App by doing either of the following:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;Copy the &lt;code&gt;.env.example&lt;\\\/code&gt; file from the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/adyen-retail-react-app\\\/.env.example\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;PWA integration with the Adyen package on GitHub&lt;\\\/a&gt; and rename the file to &lt;code&gt;.env&lt;\\\/code&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Create a new &lt;code&gt;.env&lt;\\\/code&gt; file.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Set the variables in the &lt;code&gt;.env&lt;\\\/code&gt; file. Replace &lt;code&gt;YOUR_SITE_ID&lt;\\\/code&gt; in the variables with your Salesforce Site ID, this value is identical to the value you have for &lt;code&gt;COMMERCE_API_SITE_ID&lt;\\\/code&gt;.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;txt\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;YOUR_SITE_ID_ADYEN_API_KEY=\\\\\\&quot;YOUR_ADYEN_API_KEY\\\\\\&quot;\\\\nYOUR_SITE_ID_ADYEN_MERCHANT_ACCOUNT=\\\\\\&quot;YOUR_ADYEN_MERCHANT_ACCOUNT\\\\\\&quot;\\\\nYOUR_SITE_ID_ADYEN_CLIENT_KEY=\\\\\\&quot;YOUR_ADYEN_CLIENT_KEY\\\\\\&quot;\\\\nYOUR_SITE_ID_SYSTEM_INTEGRATOR_NAME=\\\\\\&quot;YOUR_SYSTEM_INTEGRATOR_COMPANY_NAME\\\\\\&quot;\\\\nYOUR_SITE_ID_ADYEN_ENVIRONMENT=\\\\\\&quot;test\\\\\\&quot;\\\\nYOUR_SITE_ID_ADYEN_WEBHOOK_USER=\\\\\\&quot;YOUR_ADYEN_WEBHOOK_USERNAME\\\\\\&quot;\\\\nYOUR_SITE_ID_ADYEN_WEBHOOK_PASSWORD=\\\\\\&quot;YOUR_ADYEN_WEBHOOK_PASSWORD\\\\\\&quot;\\\\nYOUR_SITE_ID_ADYEN_HMAC_KEY=\\\\\\&quot;YOUR_ADYEN_HMAC_KEY\\\\\\&quot;\\\\nHOST_URL=\\\\\\&quot;http:\\\\\\\/\\\\\\\/localhost:3000\\\\\\&quot;\\\\nCOMMERCE_API_CLIENT_ID=\\\\\\&quot;YOUR_MRT_COMMERCE_API_CLIENT_ID\\\\\\&quot;\\\\nCOMMERCE_API_ORG_ID=\\\\\\&quot;YOUR_MRT_COMMERCE_API_ORG_ID\\\\\\&quot;\\\\nCOMMERCE_API_SHORT_CODE=\\\\\\&quot;YOUR_MRT_COMMERCE_API_SHORT_CODE\\\\\\&quot;\\\\nCOMMERCE_API_SITE_ID=\\\\\\&quot;RefArch\\\\\\&quot;\\\\nCOMMERCE_API_DEFAULT_SITE=\\\\\\&quot;RefArch\\\\\\&quot;\\\\nSCAPI_URL=\\\\\\&quot;*.api.commercecloud.salesforce.com\\\\\\&quot;\\\\nOCAPI_URL=\\\\\\&quot;*-123.sandbox.xx00.dx.commercecloud.salesforce.com\\\\\\&quot;\\\\nENVIRONMENT_ID=\\\\\\&quot;YOUR_MRT_ENVIRONMENT_ID\\\\\\&quot;\\\\nPROJECT_ID=\\\\\\&quot;adyen-salesforce-pwa\\\\\\&quot;\\\\nCOMMERCE_API_CLIENT_ID_PRIVATE=\\\\\\&quot;YOUR_COMMERCE_API_CLIENT_ID\\\\\\&quot;\\\\nCOMMERCE_API_CLIENT_SECRET=\\\\\\&quot;YOUR_COMMERCE_API_CLIENT_SECRET\\\\\\&quot;\\\\nSFCC_REALM_ID=\\\\\\&quot;YOUR_SFCC_REALM_ID\\\\\\&quot;\\\\nSFCC_INSTANCE_ID=\\\\\\&quot;YOUR_SFCC_INSTANCE_ID\\\\\\&quot;\\\\nSFCC_OAUTH_SCOPES=\\\\\\&quot;sfcc.orders sfcc.orders.rw\\\\\\&quot;\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;To obtain your Commerce API client ID and the client secret, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create an API client in Salesforce&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;You need to add your &lt;code&gt;SFCC_OAUTH_SCOPES&lt;\\\/code&gt; in your Salesforce Account Manager &amp;gt; &lt;strong&gt;API Client&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;OpenID Connect&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Allowed Scopes&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When going live, you need to update some variables in the &lt;code&gt;.env&lt;\\\/code&gt; file with values from your &lt;a href=\\&quot;https:\\\/\\\/ca-live.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;live Customer Area&lt;\\\/a&gt;. Check the &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/go-live-checklist\\&quot;&gt;Go-live checklist&lt;\\\/a&gt; to learn about the variables you need to update when going live.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Run the following command to upload the &lt;code&gt;.env&lt;\\\/code&gt; file to MRT:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run upload-env\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;h3 id=\\&quot;deploy-to-MRT\\&quot;&gt;4. Deploy your project to MRT&lt;\\\/h3&gt;\\n&lt;p&gt;To run your application, you must deploy your application to MRT and to the &lt;a href=\\&quot;#set-up-the-environment\\&quot;&gt;environment you have set up&lt;\\\/a&gt;. You also need a Personal MRT API Key.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#save-your-credentials\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;generate a Personal MRT API key in Salesforce Docs&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your Retail React App, save your credentials:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run save-credentials -- --user YOUR_EMAIL --key YOUR_PERSONAL_MRT_API_KEY\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Push your build to MRT:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run push:env\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#deploy-a-bundle\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;deploy the bundle in Salesforce Docs&lt;\\\/a&gt; to the environment you have created.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;f935bc2f53179e4da4dfa9f31923c2d2&quot;:&quot;&lt;h2 id=\\&quot;step-7-optional-import-the-adyen-country-list\\&quot;&gt;Step 7 (Optional): Import the Adyen country\\\/region list&lt;\\\/h2&gt;\\n&lt;p&gt;Salesforce allows you to add your list of countries\\\/regions for shipping. Optionally, you can use our default list.&lt;\\\/p&gt;\\n&lt;p&gt;To use our country\\\/region list, in your PWA Retail React app, import the Adyen &lt;code&gt;countrylist&lt;\\\/code&gt; and export it as &lt;code&gt;SHIPPING_COUNTRY_CODES&lt;\\\/code&gt; in the &lt;code&gt;constants.js&lt;\\\/code&gt; file:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;js&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import {countryList} from &#039;@adyen\\\\\\\/adyen-salesforce-pwa&#039;\\\\n\\\\nexport const SHIPPING_COUNTRY_CODES = countryList&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;&quot;,&quot;01264a29cbafa3f2efcba7586653df0d&quot;:&quot;&lt;h2 id=\\&quot;migrate-pages\\&quot;&gt;Step 8: Migrate pages&lt;\\\/h2&gt;\\n&lt;p&gt;If you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you need to migrate your store pages. If you do not have an SFCC integration with Adyen already, you can skip this step and start &lt;a href=\\&quot;#test-your-integration\\&quot;&gt;testing&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;p&gt;You can perform &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/phased-headless-rollouts.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Phased Headless Rollouts&lt;\\\/a&gt; to migrate your SFRA or SiteGenesis pages in a phased approach.&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;The Adyen package uses version 3.x of the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/retail-react-app.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Retail React App&lt;\\\/a&gt; with &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/upgrade-to-v3.html#template-extensibility\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;template extensibility&lt;\\\/a&gt;. To filter out links to non-PWA kit pages, you can override the &lt;code&gt;overrides\\\/app\\\/routes.jsx&lt;\\\/code&gt; file. Salesforce has &lt;a href=\\&quot;https:\\\/\\\/gist.github.com\\\/shethj\\\/c9d52aa1fe4188c431336438305f8e32\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;sample code on GitHub&lt;\\\/a&gt; that shows how to override.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;If you are migrating the checkout page last, you need to route traffic to your SFRA checkout page from your PWA integration. To learn how to apply routing, refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/phased-headless-rollouts.html#routing\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce Docs&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&quot;,&quot;27b164763ddc65fa5c7f6d7476b30eb9&quot;:&quot;&lt;h2 id=\\&quot;test-your-integration\\&quot;&gt;Testing&lt;\\\/h2&gt;\\n&lt;p&gt;After you have installed and configured the package, use our &lt;a href=\\&quot;\\\/development-resources\\\/test-cards-and-credentials\\\/test-card-numbers\\\/\\&quot;&gt;test cards&lt;\\\/a&gt; to test payments.&lt;\\\/p&gt;\\n&lt;p&gt;Check the status of test payments in your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt; &amp;gt; &lt;strong&gt;Transactions&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Payments&lt;\\\/strong&gt;.&lt;\\\/p&gt;&quot;,&quot;7aa3d05bc6fcc47a510dae31125bce7a&quot;:&quot;&lt;h2 id=\\&quot;next-steps\\&quot;&gt;Next steps&lt;\\\/h2&gt;\\n&lt;div class=\\&quot;next-steps\\&quot; id=\\&quot;next-steps73907\\&quot; &gt;\\n&lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/set-up-payment-methods\\&quot; class=\\&quot;next-steps__step\\&quot; style=\\&quot;width:45%;\\&quot; target=\\&quot;_self\\&quot;&gt;&lt;div class=\\&quot;next-steps__label\\&quot;&gt;required&lt;\\\/div&gt;&lt;div class=\\&quot;next-steps__title\\&quot;&gt;Set up payment methods&lt;\\\/div&gt;&lt;p class=\\&quot;next-steps__body\\&quot;&gt;&lt;p&gt;Set up the payment methods that you want to offer in your Salesforce Composable Storefront.&lt;\\\/p&gt;&lt;\\\/p&gt;&lt;\\\/a&gt;&lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/customization-guide\\&quot; class=\\&quot;next-steps__step\\&quot; style=\\&quot;width:45%;\\&quot; target=\\&quot;_self\\&quot;&gt;&lt;div class=\\&quot;next-steps__title\\&quot;&gt;Customize&lt;\\\/div&gt;&lt;p class=\\&quot;next-steps__body\\&quot;&gt;&lt;p&gt;Check our customization guide to learn how you can modify your integration..&lt;\\\/p&gt;&lt;\\\/p&gt;&lt;\\\/a&gt;&lt;\\\/div&gt;\\n&quot;,&quot;1fe503fb592e1c8ed49a4623934b5dc4&quot;:&quot;&lt;h2&gt;Requirements&lt;\\\/h2&gt;\\n&lt;p&gt;Before you begin, take into account the following requirements, limitations, and preparations.&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Requirement&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Integration type&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Use this page to build an integration with our Salesforce Composable Storefront package.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Supported versions&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;ul&gt;&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/help.salesforce.com\\\/s\\\/articleView?id=sf.b2c_pwa_kit_release_notes_archive.htm&amp;amp;type=5\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce PWA Kit&lt;\\\/a&gt; v2.7.0 and later&lt;\\\/li&gt;&lt;li&gt; Node v18 or later&lt;\\\/li&gt;&lt;li&gt; npm v9 or later&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Setup steps&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Before you begin, complete the following steps on the Salesforce side: &lt;ul&gt; &lt;li&gt;Set up a Salesforce sandbox connected to your Salesforce Commerce Cloud (SFCC) instance.&lt;\\\/li&gt; &lt;li&gt;Set up your environments, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-managing-sites-for-dev.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;sites&lt;\\\/a&gt;, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-localization.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;locales and currencies&lt;\\\/a&gt;, and &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-inventory-for-developers.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;product inventories&lt;\\\/a&gt;. &lt;\\\/li&gt; &lt;li&gt;Reach out to your Salesforce account team and enable &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Managed Runtime (MRT)&lt;\\\/a&gt; on your SFCC instance.&lt;\\\/li&gt;&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#change-a-users-role\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Set your MRT permissions to &lt;strong&gt;Admin&lt;\\\/strong&gt;&lt;\\\/a&gt;.&lt;\\\/li&gt;&lt;li&gt;Review the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/configuration-options.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;configuration file&lt;\\\/a&gt; structure of the Salesforce PWA kit.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;&quot;,&quot;46e0ebe398cf352e1e8fbac17da29448&quot;:&quot;&lt;h2 id=\\&quot;deploy-to-mrt\\&quot;&gt;Step 6: Deploy your application in Managed Runtime&lt;\\\/h2&gt;\\n&lt;p&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce&#039;s Managed Runtime (MRT)&lt;\\\/a&gt; provides the infrastructure to deploy, host, and monitor your PWA Kit application.&lt;\\\/p&gt;\\n&lt;p&gt;Managed Runtime only supports applications created from a PWA Kit template and has a separate &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;admin dashboard&lt;\\\/a&gt;. Before you can use MRT and Runtime Admin, Salesforce must enable it for your organization. To enable MRT and Runtime Admin for your organization, reach out to your Salesforce account team.&lt;\\\/p&gt;\\n&lt;p&gt;When building your storefront, keep the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#constraints\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;constraints of MRT environments&lt;\\\/a&gt; in mind.&lt;\\\/p&gt;\\n&lt;h3&gt;1. Create a new project in Managed Runtime&lt;\\\/h3&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#create-a-project\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create a project in Runtime Admin&lt;\\\/a&gt;. Use the following details for your project:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Field&lt;\\\/th&gt;\\n&lt;th&gt;Value&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project Name&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;adyen-salesforce-headless-commerce-pwa&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Project IDs must match the package name in the &lt;code&gt;package.json&lt;\\\/code&gt; file and can not be longer than 20 characters.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Scopes&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;list of scopes&lt;\\\/a&gt; that are used to fetch baskets and create orders.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;h3 id=\\&quot;set-up-the-environment\\&quot;&gt;2. Set up the MRT environment&lt;\\\/h3&gt;\\n&lt;p&gt;Set up an environment to separate your production storefront from other storefronts, such as development or testing storefronts. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;environments in Salesforce docs&lt;\\\/a&gt; to learn more about environments.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;Follow the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;steps to create an environment in Salesforce Docs&lt;\\\/a&gt;.&lt;br \\\/&gt;\\n&lt;strong&gt;Name&lt;\\\/strong&gt;: use your Sandbox Org ID to easily identify an environment that belongs to a sandbox, and to create variables correctly for each environment.&lt;br \\\/&gt;\\n&lt;strong&gt;Region&lt;\\\/strong&gt;: we recommend to set your MRT region to the same region that your Salesforce sandbox uses.\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;Your Composable Storefront integration with Adyen can only have one region connected to one MRT organization, one SFCC site, and one Adyen Customer Area account.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;h3 id=\\&quot;set-environment-variables\\&quot;&gt;3. Set the environment variables&lt;\\\/h3&gt;\\n&lt;ol&gt;\\n&lt;li&gt;In your MRT environment, navigate to your project by selecting your &lt;strong&gt;Organization&lt;\\\/strong&gt; and &lt;strong&gt;Project&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Environment Variables&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Specify the values for the following variables:&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When a variable contains &lt;strong&gt;YOUR_SITE_ID&lt;\\\/strong&gt;, replace it with the same value as your Commerce API site ID.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Variable&lt;\\\/th&gt;\\n&lt;th&gt;Required&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_API_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen &lt;a href=\\&quot;#step-4-generate-an-adyen-api-key\\&quot;&gt;API key&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_MERCHANT_ACCOUNT&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen merchant account name.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_CLIENT_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen &lt;a href=\\&quot;\\\/development-resources\\\/client-side-authentication\\\/#get-your-client-key\\&quot;&gt;client key&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_ENVIRONMENT&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Use &lt;strong&gt;test&lt;\\\/strong&gt;. When you are ready to accept live payments, change the value to &lt;strong&gt;live&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_WEBHOOK_USER&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The basic authentication username you entered when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_WEBHOOK_PASSWORD&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The basic authentication password you entered when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_HMAC_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The HMAC key you generated when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_LIVE_URL_PREFIX&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Only for Live &lt;br&gt; environment&lt;\\\/td&gt;\\n&lt;td&gt;Your &lt;a href=\\&quot;\\\/development-resources\\\/live-endpoints\\\/#live-url-prefix\\&quot;&gt;live URL prefix&lt;\\\/a&gt; to process live transactions.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_APPLE_DOMAIN_ASSOCIATION&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;If you want to offer Apple Pay as a payment method in the live environment, set to the &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/set-up-payment-methods\\\/#go-live-apple-pay\\&quot;&gt;domain association file value&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_SYSTEM_INTEGRATOR_NAME&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The name of your system integrator.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API client ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_ORG_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API Org ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_SHORT_CODE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API short code.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_SITE_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce site ID, for example, &lt;strong&gt;RefArch&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_DEFAULT_SITE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your default Salesforce site, for example, &lt;strong&gt;RefArch&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SCAPI_URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce Commerce API URL. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/base-url.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; for more information.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;OCAPI_URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Open Commerce API Url. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/references\\\/b2c-commerce-ocapi\\\/urlschema.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; for more information.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;ENVIRONMENT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT environment ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;PROJECT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your project ID, for example, &lt;strong&gt;adyen-salesforce-pwa&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_ID_PRIVATE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce Commerce API client ID. To get your API credentials, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create an API client in Salesforce&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_SECRET&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Commerce API client secret for your &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce API client&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_REALM_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC realm ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_INSTANCE_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC instance ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_OAUTH_SCOPES&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC oauth scopes, for example, &lt;strong&gt;sfcc.orders sfcc.orders.rw&lt;\\\/strong&gt;. You also need to add this in your Salesforce Account Manager &amp;gt; &lt;strong&gt;API Client&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;OpenID Connect&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Allowed Scopes&lt;\\\/strong&gt;. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; to learn more about authorization scopes.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/go-live-checklist\\&quot;&gt;going live&lt;\\\/a&gt;, you need to update some variables you have entered with values from your &lt;a href=\\&quot;https:\\\/\\\/ca-live.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;live Customer Area&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;h3 id=\\&quot;deploy-to-MRT\\&quot;&gt;4. Deploy your project to MRT&lt;\\\/h3&gt;\\n&lt;p&gt;To run your application, you must deploy your application to MRT and to the &lt;a href=\\&quot;#set-up-the-environment\\&quot;&gt;environment you have set up&lt;\\\/a&gt;. You also need a Personal MRT API Key.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#save-your-credentials\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;generate a Personal MRT API key in Salesforce Docs&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your Retail React App, save your credentials:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run save-credentials -- --user YOUR_EMAIL --key YOUR_PERSONAL_MRT_API_KEY\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Push your build to MRT:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run push:env\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#deploy-a-bundle\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;deploy the bundle in Salesforce Docs&lt;\\\/a&gt; to the environment you have created.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;0835a8426c299e2fbc3ccf46f19a4909&quot;:&quot;&lt;h2&gt;Requirements&lt;\\\/h2&gt;\\n&lt;p&gt;Before you begin, take into account the following requirements, limitations, and preparations.&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Requirement&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Integration type&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Use this page to build an integration with our Salesforce Composable Storefront package.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Supported versions&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;ul&gt;&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/help.salesforce.com\\\/s\\\/articleView?id=sf.b2c_pwa_kit_release_notes_archive.htm&amp;amp;type=5\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce PWA Kit&lt;\\\/a&gt; v3.9.0 and later&lt;\\\/li&gt;&lt;li&gt; Node v18 or later&lt;\\\/li&gt;&lt;li&gt; npm v9 or later&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Setup steps&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Before you begin, complete the following steps on the Salesforce side: &lt;ul&gt; &lt;li&gt;Set up a Salesforce sandbox connected to your Salesforce Commerce Cloud (SFCC) instance.&lt;\\\/li&gt; &lt;li&gt;Set up your environments, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-managing-sites-for-dev.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;sites&lt;\\\/a&gt;, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-localization.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;locales and currencies&lt;\\\/a&gt;, and &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-inventory-for-developers.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;product inventories&lt;\\\/a&gt;. &lt;\\\/li&gt; &lt;li&gt;Reach out to your Salesforce account team and enable &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Managed Runtime (MRT)&lt;\\\/a&gt; on your SFCC instance.&lt;\\\/li&gt;&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#change-a-users-role\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Set your MRT permissions to &lt;strong&gt;Admin&lt;\\\/strong&gt;&lt;\\\/a&gt;.&lt;\\\/li&gt;&lt;li&gt;Review the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/configuration-options.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;configuration file&lt;\\\/a&gt; structure of the Salesforce PWA kit.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;&quot;,&quot;b8d861e2d15f6e9de8baf89a1685ed0e&quot;:&quot;&lt;h2 id=\\&quot;deploy-to-mrt\\&quot;&gt;Step 6: Deploy your application in Managed Runtime&lt;\\\/h2&gt;\\n&lt;p&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce&#039;s Managed Runtime (MRT)&lt;\\\/a&gt; provides the infrastructure to deploy, host, and monitor your PWA Kit application.&lt;\\\/p&gt;\\n&lt;p&gt;Managed Runtime only supports applications created from a PWA Kit template and has a separate &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;admin dashboard&lt;\\\/a&gt;. Before you can use MRT and Runtime Admin, Salesforce must enable it for your organization. To enable MRT and Runtime Admin for your organization, reach out to your Salesforce account team.&lt;\\\/p&gt;\\n&lt;p&gt;When building your storefront, keep the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#constraints\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;constraints of MRT environments&lt;\\\/a&gt; in mind.&lt;\\\/p&gt;\\n&lt;h3&gt;1. Create a new project in Managed Runtime&lt;\\\/h3&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#create-a-project\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create a project in Runtime Admin&lt;\\\/a&gt;. Use the following details for your project:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Field&lt;\\\/th&gt;\\n&lt;th&gt;Value&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project Name&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;adyen-salesforce-headless-commerce-pwa&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Project IDs must match the package name in the &lt;code&gt;package.json&lt;\\\/code&gt; file and can not be longer than 20 characters.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Scopes&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;list of scopes&lt;\\\/a&gt; that are used to fetch baskets and create orders.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;h3 id=\\&quot;set-up-the-environment\\&quot;&gt;2. Set up the MRT environment&lt;\\\/h3&gt;\\n&lt;p&gt;Set up an environment to separate your production storefront from other storefronts, such as development or testing storefronts. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;environments in Salesforce docs&lt;\\\/a&gt; to learn more about environments.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;Follow the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;steps to create an environment in Salesforce Docs&lt;\\\/a&gt;.&lt;br \\\/&gt;\\n&lt;strong&gt;Name&lt;\\\/strong&gt;: use your Sandbox Org ID to easily identify an environment that belongs to a sandbox, and to create variables correctly for each environment.&lt;br \\\/&gt;\\n&lt;strong&gt;Region&lt;\\\/strong&gt;: we recommend to set your MRT region to the same region that your Salesforce sandbox uses.\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;Your Composable Storefront integration with Adyen can only have one region connected to one MRT organization, one SFCC site, and one Adyen Customer Area account.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;h3 id=\\&quot;set-environment-variables\\&quot;&gt;3. Set the environment variables&lt;\\\/h3&gt;\\n&lt;ol&gt;\\n&lt;li&gt;In your MRT environment, navigate to your project by selecting your &lt;strong&gt;Organization&lt;\\\/strong&gt; and &lt;strong&gt;Project&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Environment Variables&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Specify the values for the following variables:&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When a variable contains &lt;strong&gt;YOUR_SITE_ID&lt;\\\/strong&gt;, replace it with the same value as your Commerce API site ID.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Variable&lt;\\\/th&gt;\\n&lt;th&gt;Required&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_API_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen &lt;a href=\\&quot;#step-4-generate-an-adyen-api-key\\&quot;&gt;API key&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_MERCHANT_ACCOUNT&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen merchant account name.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_CLIENT_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen &lt;a href=\\&quot;\\\/development-resources\\\/client-side-authentication\\\/#get-your-client-key\\&quot;&gt;client key&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_ENVIRONMENT&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Use &lt;strong&gt;test&lt;\\\/strong&gt;. When you are ready to accept live payments, change the value to &lt;strong&gt;live&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_WEBHOOK_USER&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The basic authentication username you entered when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_WEBHOOK_PASSWORD&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The basic authentication password you entered when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_HMAC_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The HMAC key you generated when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_LIVE_URL_PREFIX&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Only for Live &lt;br&gt; environment&lt;\\\/td&gt;\\n&lt;td&gt;Your &lt;a href=\\&quot;\\\/development-resources\\\/live-endpoints\\\/#live-url-prefix\\&quot;&gt;live URL prefix&lt;\\\/a&gt; to process live transactions.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_APPLE_DOMAIN_ASSOCIATION&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;If you want to offer Apple Pay as a payment method in the live environment, set to the &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/set-up-payment-methods\\\/#go-live-apple-pay\\&quot;&gt;domain association file value&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_NATIVE_3DS&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;For card payments, indicates if &lt;a href=\\&quot;\\\/online-payments\\\/3d-secure#implement-3d-secure-2\\&quot;&gt;native 3D Secure authentication&lt;\\\/a&gt; should be triggered when available, and lets you use the redirect flow to avoid adjusting your &lt;a href=\\&quot;https:\\\/\\\/developer.mozilla.org\\\/en-US\\\/docs\\\/Web\\\/HTTP\\\/Guides\\\/CSP\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Content Security Policy (CSP)&lt;\\\/a&gt; to load the 3D Secure 2 interfaces. Possible values: &lt;ul&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;strong&gt;preferred&lt;\\\/strong&gt;: Use native 3D secure when available. This is the default value.&lt;\\\/li&gt;&lt;li markdown=\\&quot;1\\&quot;&gt;&lt;strong&gt;disabled&lt;\\\/strong&gt;: Use the redirect 3D Secure flow. Make sure that you have &lt;a href=\\&quot;#install-the-adyen-package-in-your-local-pwa-app\\&quot;&gt;set up a redirect page&lt;\\\/a&gt; when using this value.&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_SYSTEM_INTEGRATOR_NAME&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The name of your system integrator.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API client ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_ORG_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API Org ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_SHORT_CODE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API short code.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_SITE_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce site ID, for example, &lt;strong&gt;RefArch&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_DEFAULT_SITE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your default Salesforce site, for example, &lt;strong&gt;RefArch&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SCAPI_URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce Commerce API URL. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/base-url.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; for more information.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;OCAPI_URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Open Commerce API Url. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/references\\\/b2c-commerce-ocapi\\\/urlschema.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; for more information.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;ENVIRONMENT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT environment ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;PROJECT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your project ID, for example, &lt;strong&gt;adyen-salesforce-pwa&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_ID_PRIVATE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce Commerce API client ID. To get your API credentials, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create an API client in Salesforce&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_SECRET&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Commerce API client secret for your &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce API client&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_REALM_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC realm ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_INSTANCE_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC instance ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_OAUTH_SCOPES&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC oauth scopes, for example, &lt;strong&gt;sfcc.orders sfcc.orders.rw&lt;\\\/strong&gt;. You also need to add this in your Salesforce Account Manager &amp;gt; &lt;strong&gt;API Client&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;OpenID Connect&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Allowed Scopes&lt;\\\/strong&gt;. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; to learn more about authorization scopes.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/go-live-checklist\\&quot;&gt;going live&lt;\\\/a&gt;, you need to update some variables you have entered with values from your &lt;a href=\\&quot;https:\\\/\\\/ca-live.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;live Customer Area&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;h3 id=\\&quot;deploy-to-MRT\\&quot;&gt;4. Deploy your project to MRT&lt;\\\/h3&gt;\\n&lt;p&gt;To run your application, you must deploy your application to MRT and to the &lt;a href=\\&quot;#set-up-the-environment\\&quot;&gt;environment you have set up&lt;\\\/a&gt;. You also need a Personal MRT API Key.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#save-your-credentials\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;generate a Personal MRT API key in Salesforce Docs&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your Retail React App, save your credentials:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run save-credentials -- --user YOUR_EMAIL --key YOUR_PERSONAL_MRT_API_KEY\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Push your build to MRT:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run push:env\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#deploy-a-bundle\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;deploy the bundle in Salesforce Docs&lt;\\\/a&gt; to the environment you have created.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;7bb056caffab1fc365e0b7d0cccdc70c&quot;:&quot;&lt;h2&gt;Requirements&lt;\\\/h2&gt;\\n&lt;p&gt;Before you begin, take into account the following requirements, limitations, and preparations.&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Requirement&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Integration type&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Use this page to build an integration with our Salesforce Composable Storefront package.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Supported versions&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;ul&gt;&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/help.salesforce.com\\\/s\\\/articleView?id=sf.b2c_pwa_kit_release_notes_archive.htm&amp;amp;type=5\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce PWA Kit&lt;\\\/a&gt; v3.12.0 and later&lt;\\\/li&gt;&lt;li&gt; Node v22 or later&lt;\\\/li&gt;&lt;li&gt; npm v11 or later&lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Setup steps&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Before you begin, complete the following steps on the Salesforce side: &lt;ul&gt; &lt;li&gt;Set up a Salesforce sandbox connected to your Salesforce Commerce Cloud (SFCC) instance.&lt;\\\/li&gt; &lt;li&gt;Set up your environments, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-managing-sites-for-dev.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;sites&lt;\\\/a&gt;, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-localization.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;locales and currencies&lt;\\\/a&gt;, and &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/guide\\\/b2c-inventory-for-developers.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;product inventories&lt;\\\/a&gt;. &lt;\\\/li&gt; &lt;li&gt; Set up your &lt;a href=\\&quot;https:\\\/\\\/help.salesforce.com\\\/s\\\/articleView?id=cc.b2c_webdav_authentication_and_authorization.htm&amp;amp;type=5\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;WebDAV authentication&lt;\\\/a&gt; credentials.&lt;\\\/li&gt; &lt;li&gt;Reach out to your Salesforce account team and enable &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Managed Runtime (MRT)&lt;\\\/a&gt; on your SFCC instance.&lt;\\\/li&gt;&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#change-a-users-role\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Set your MRT permissions to &lt;strong&gt;Admin&lt;\\\/strong&gt;&lt;\\\/a&gt;.&lt;\\\/li&gt;&lt;li&gt;Review the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/configuration-options.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;configuration file&lt;\\\/a&gt; structure of the Salesforce PWA kit.&lt;\\\/li&gt;&lt;li&gt; Enable &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/extensibility_via_hooks.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customization with Hooks&lt;\\\/a&gt; in Salesforce. &lt;\\\/li&gt;&lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;&quot;,&quot;468c445d2dd046bb32613ca6981a508d&quot;:&quot;&lt;h2 id=\\&quot;install-the-cartridge\\&quot;&gt;Step 1: Install the cartridge and import the metadata&lt;\\\/h2&gt;\\n&lt;p&gt;The npm package for the Composable Storefront integration works together with a cartridge for the Salesforce Commerce Cloud (SFCC) cartridge. The companion cartridge extends your Salesforce Business Manager with additional functionality that lets you use Adyen features that are not supported by the Salesforce B2C Commerce API &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/get-started.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;(SCAPI)&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;The metadata files in the cartridge handle the necessary configurations:\\n&lt;ul&gt;\\n&lt;li&gt;&lt;strong&gt;&lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/tree\\\/main\\\/metadata\\\/site_import\\\/sites\\\/RefArch\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Payment configuration&lt;\\\/a&gt;&lt;\\\/strong&gt;: Defines the Adyen payment processor, enabling card payments and various alternative payment methods.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;strong&gt;&lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/metadata\\\/site_import\\\/meta\\\/system-objecttype-extensions.xml\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;System Object extensions&lt;\\\/a&gt;&lt;\\\/strong&gt;: Extends standard objects like Basket, OrderPaymentInstrument, and PaymentTransaction to store Adyen-specific payment data.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;strong&gt;&lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/metadata\\\/site_import\\\/jobs.xml\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Job schedules&lt;\\\/a&gt;&lt;\\\/strong&gt;: Includes the jobs that processes pending webhooks, and the jobs that clean up the processed webhooks.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;&lt;\\\/li&gt;\\n&lt;li&gt;The cartridge creates custom SCAPI endpoints in the Business Manager to handle payment flows.\\n&lt;ul&gt;\\n&lt;li&gt;&lt;strong&gt;&lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/int_adyen_PWA\\\/cartridge\\\/rest-apis\\\/adyen-notify\\\/schema.yaml\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Notify endpoint&lt;\\\/a&gt;&lt;\\\/strong&gt;: Receives the incoming Adyen webhook data and securely stores it in the Business Manager for later processing by the scheduled job.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;strong&gt;&lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/int_adyen_PWA\\\/cartridge\\\/rest-apis\\\/adyen-shopper-order\\\/schema.yaml\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Create Order endpoint&lt;\\\/a&gt;&lt;\\\/strong&gt;: Creates an order and assigns it an order number, so that the number can be used when making a payment. This is required for gift card payments.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;strong&gt;&lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/int_adyen_PWA\\\/cartridge\\\/rest-apis\\\/adyen-order\\\/schema.yaml\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Get Order endpoint&lt;\\\/a&gt;&lt;\\\/strong&gt;: Retrieves order details for an order when it is created.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;&lt;\\\/li&gt;\\n&lt;li&gt;The cartridge creates a custom SCAPI hook in the Business Manager that automatically generates and manages order numbers to prevent conflicts.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;p&gt;To set up the cartridge:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Download the cartridge from our &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;GitHub repository&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your cartridge&#039;s root directory, create a &lt;code&gt;dw.json&lt;\\\/code&gt; file that includes the information required to establish a server connection and the code version that you want to upload your cartridge to. Read more about &lt;a href=\\&quot;https:\\\/\\\/help.salesforce.com\\\/s\\\/articleView?id=cc.b2c_webdav_authentication_and_authorization.htm&amp;amp;type=5\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;WebDAV authentication&lt;\\\/a&gt; in the Salesforce documentation.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Example dw.json file&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n\\\\\\&quot;hostname\\\\\\&quot;: \\\\\\&quot;YOUR-SANDBOX-HOSTNAME.demandware.net\\\\\\&quot;,\\\\n\\\\\\&quot;username\\\\\\&quot;: \\\\\\&quot;*@example.com\\\\\\&quot;,\\\\n\\\\\\&quot;password\\\\\\&quot;: \\\\\\&quot;YOUR_WEBDAV_ACCESS_KEY\\\\\\&quot;,\\\\n\\\\\\&quot;code-version\\\\\\&quot;: \\\\\\&quot;VERSION_TO_UPLOAD_TO\\\\\\&quot;\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;From your cartridge&#039;s root directory, install Node modules using your command line.&lt;\\\/p&gt;\\n&lt;pre&gt;&lt;code class=\\&quot;language-sh\\&quot;&gt;npm install&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Run the following to generate output that is compatible with JavaScript ES5.&lt;br \\\/&gt;\\nThe source files in the &lt;strong&gt;\\\/src&lt;\\\/strong&gt; directory use modern Javascript ES6+ syntax and modern tooling that Salesforce Commerce Cloud does not natively support.&lt;\\\/p&gt;\\n&lt;pre&gt;&lt;code class=\\&quot;language-sh\\&quot;&gt;npm run build&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;To add new configuration items, import the predefined metadata:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;Open the &lt;strong&gt;adyen-salesforce-headless-commerce-pwa\\\/metadata\\\/site_import\\\/sites\\\/&lt;\\\/strong&gt; folder.&lt;\\\/li&gt;\\n&lt;li&gt;Rename the &lt;strong&gt;yourSiteId&lt;\\\/strong&gt; (RefArch) folder to the ID of your site in your Salesforce Business Manager.&lt;\\\/li&gt;\\n&lt;li&gt;Open the &lt;strong&gt;adyen-salesforce-headless-commerce-pwa\\\/metadata\\\/site_import\\\/jobs.xml&lt;\\\/strong&gt; file.&lt;\\\/li&gt;\\n&lt;li&gt;Rename the &lt;code&gt;site-id&lt;\\\/code&gt; to the ID of your site in your Salesforce Business Manager.&lt;\\\/li&gt;\\n&lt;li&gt;Zip the site_import folder.&lt;\\\/li&gt;\\n&lt;li&gt;In the Business Manager, go to &lt;strong&gt;Administration&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Site Development&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Site Import &amp;amp; Export&lt;\\\/strong&gt; and import the zipped file.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the Business Manager, go to &lt;strong&gt;Administration&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Sites&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Manage Sites&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;[yourSite]&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Settings&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the Cartridges box, enter &lt;strong&gt;int_adyen_PWA&lt;\\\/strong&gt;, to set up the cartridge path. Select &lt;strong&gt;Apply&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;246ce195179d24d38dbe99d3a9bd99c2&quot;:&quot;&lt;h2&gt;Step 2: Build your local PWA app&lt;\\\/h2&gt;\\n&lt;p&gt;To use Adyen as the payment processor for your PWA app, you need to generate a new PWA project.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Initiate the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/SalesforceCommerceCloud\\\/pwa-kit\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce PWA Kit&lt;\\\/a&gt; starter project with the following command:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npx @salesforce\\\\\\\/pwa-kit-create-app\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The command-line interface guides you through the setup. While you set up your project, you are asked to link the generated retail app to a demo sandbox or your own sandbox.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;Only if you link the retail app to your own sandbox, enter the following details at the command prompt when creating the new app:\\n&lt;ul&gt;\\n&lt;li&gt;Sandbox URL&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/slas.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Shopper Login and API Access Service (SLAS)&lt;\\\/a&gt; client ID&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/commerce-api-configuration-values.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Site (storefront) ID&lt;\\\/a&gt;&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/commerce-api-configuration-values.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Organization (Org) ID&lt;\\\/a&gt;&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/commerce-api-configuration-values.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Short code&lt;\\\/a&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;&lt;\\\/li&gt;\\n&lt;li&gt;Launch your retail app with the following command:\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run start\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;9c5873329bf26fa7c39a117b8644654f&quot;:&quot;&lt;h2 id=\\&quot;install-the-adyen-package-in-your-local-pwa-app\\&quot;&gt;Step 3: Install the Adyen package in your local PWA app&lt;\\\/h2&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the root directory of your PWA app, install the &lt;a href=\\&quot;https:\\\/\\\/www.npmjs.com\\\/package\\\/@adyen\\\/adyen-salesforce-pwa?activeTab=readme\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Adyen Salesforce PWA npm package&lt;\\\/a&gt;:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm install @adyen\\\\\\\/adyen-salesforce-pwa\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your PWA app, adjust the &lt;code&gt;overrides\\\/app\\\/ssr.js&lt;\\\/code&gt; file to import Adyen routes. You must import routes in the following order:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Adyen routes. Add the following line:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;js&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import {registerAdyenEndpoints} from &#039;@adyen\\\\\\\/adyen-salesforce-pwa\\\\\\\/dist\\\\\\\/ssr\\\\\\\/index.js&#039;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Default Salesforce routes.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Custom routes. We recommend you integrate and test the package without &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/customization-guide\\&quot;&gt;customizations&lt;\\\/a&gt; first.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the &lt;code&gt;overrides\\\/app&lt;\\\/code&gt; folder of your Retail React app:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Override the &lt;code&gt;checkout\\\/partials\\\/payment.jsx&lt;\\\/code&gt; file to render the &lt;code&gt;AdyenCheckout&lt;\\\/code&gt; component from the &lt;code&gt;adyen-salesforce-pwa&lt;\\\/code&gt; package. In the next step, you need to &lt;a href=\\&quot;#configure\\&quot;&gt;configure&lt;\\\/a&gt; some required properties for the component.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;jsx&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import React, {useEffect, useState} from &#039;react&#039;\\\\nimport {useAccessToken, useCustomerId, useCustomerType} from &#039;@salesforce\\\\\\\/commerce-sdk-react&#039;\\\\nimport {useCurrentBasket} from &#039;@salesforce\\\\\\\/retail-react-app\\\\\\\/app\\\\\\\/hooks\\\\\\\/use-current-basket&#039;\\\\nimport useMultiSite from &#039;@salesforce\\\\\\\/retail-react-app\\\\\\\/app\\\\\\\/hooks\\\\\\\/use-multi-site&#039;\\\\nimport useNavigation from &#039;@salesforce\\\\\\\/retail-react-app\\\\\\\/app\\\\\\\/hooks\\\\\\\/use-navigation&#039;\\\\nimport {useToast} from &#039;@salesforce\\\\\\\/retail-react-app\\\\\\\/app\\\\\\\/hooks\\\\\\\/use-toast&#039;\\\\nimport {AdyenCheckout, pageTypes} from &#039;@adyen\\\\\\\/adyen-salesforce-pwa&#039;\\\\nimport LoadingSpinner from &#039;@salesforce\\\\\\\/retail-react-app\\\\\\\/app\\\\\\\/components\\\\\\\/loading-spinner&#039;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/partials\\\/payment.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;file in our example package on GitHub&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;Override the &lt;code&gt;checkout\\\/confirmation.jsx&lt;\\\/code&gt; file to wrap the Salesforce checkout confirmation page with the &lt;code&gt;AdyenCheckout&lt;\\\/code&gt; and &lt;code&gt;AdyenCheckoutProvider&lt;\\\/code&gt; from the &lt;code&gt;adyen-salesforce-pwa&lt;\\\/code&gt; package. &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/confirmation.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;See how you can render the components in our GitHub&lt;\\\/a&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Create an error page and register it in &lt;code&gt;routes.jsx&lt;\\\/code&gt; as &lt;code&gt;checkout\\\/error&lt;\\\/code&gt;. See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/develop\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/error\\\/index.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;example error page on GitHub&lt;\\\/a&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Create a redirect page and register it in &lt;code&gt;routes.jsx&lt;\\\/code&gt; as &lt;code&gt;checkout\\\/redirect&lt;\\\/code&gt;. See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/develop\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/pages\\\/checkout\\\/redirect\\\/index.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;example redirect page on GitHub&lt;\\\/a&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;p&gt;See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/main\\\/packages\\\/adyen-retail-react-app\\\/overrides\\\/app\\\/routes.jsx\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;&lt;code&gt;routes.jsx&lt;\\\/code&gt;file on GitHub&lt;\\\/a&gt; to see how you can register pages.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your &lt;code&gt;package.json&lt;\\\/code&gt; file, add the following scripts:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;\\\\\\&quot;upload-env\\\\\\&quot;: \\\\\\&quot;upload-env\\\\\\&quot;,\\\\n\\\\\\&quot;get-env\\\\\\&quot;: \\\\\\&quot;get-env\\\\\\&quot;,\\\\n\\\\\\&quot;start:env\\\\\\&quot;: \\\\\\&quot;include-env -p=npm run start\\\\\\&quot;,\\\\n\\\\\\&quot;push:env\\\\\\&quot;: \\\\\\&quot;include-env -p=npm run push\\\\\\&quot;\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Run the integration:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run start :env\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;d4295c71f63f5cfcf29928b2111aebe8&quot;:&quot;&lt;h2 id=\\&quot;configure\\&quot;&gt;Step 4: Configure the checkout component&lt;\\\/h2&gt;\\n&lt;p&gt;The &lt;code&gt;AdyenCheckout&lt;\\\/code&gt; component requires certain properties. You can use optional properties to &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/customization-guide\\&quot;&gt;customize your integration&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;p&gt;On the &lt;code&gt;overrides\\\/app\\\/checkout\\\/partials\\\/payment.jsx page&lt;\\\/code&gt;, where you render the AdyenCheckout component, configure the following properties.&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Property&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;authToken&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The shopper authentication token. This is used for server-side API calls, such as fetching the basket and communicating between Adyen and Salesforce. Get this from the &lt;code&gt;useAccessToken&lt;\\\/code&gt; hook.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;site&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The site configuration object from the &lt;code&gt;useMultiSite&lt;\\\/code&gt; hook. It includes details like site properties and environment variables needed to query endpoints.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;locale&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The locale configuration from the &lt;code&gt;useMultiSite&lt;\\\/code&gt; hook, passed from Salesforce, which provides the locale to the component.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;navigate&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The navigation function from the &lt;code&gt;useNavigation&lt;\\\/code&gt; hook. This function is passed to the component for handling redirection after a payment, for example redirecting to the confirmation page on success, or an error page.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;basket&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The current shopper\\u2019s basket object from the &lt;code&gt;useCurrentBasket&lt;\\\/code&gt; hook. The amount of the basket is used to determine the available payment methods.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;returnUrl&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;URL to where the shopper should be taken back to after a redirection. The URL can contain a maximum of 1024 characters and should include the protocol: &lt;code&gt;http:\\\/\\\/&lt;\\\/code&gt; or &lt;code&gt;https:\\\/\\\/&lt;\\\/code&gt;. You can also include your own additional query parameters, for example, shopper ID or order reference number. &lt;br&gt; If the URL to return to includes non-ASCII characters, like spaces or special letters, URL encode the value. &lt;div class=\\&quot;sc-notice note\\&quot;&gt;&lt;div&gt; The URL must not include personally identifiable information (PII), for example name or email address. &lt;\\\/div&gt;&lt;\\\/div&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;customerId&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The Customer ID for authenticated users. This is used to display saved payment methods.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;isCustomerRegistered&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Whether the shopper is logged-in. When set to &lt;strong&gt;true&lt;\\\/strong&gt;, if the shopper has saved payment methods, they will be displayed at checkout. The default is &lt;strong&gt;false&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;page&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The page of your PWA storefront where you render the available payment methods. Possible values are &lt;strong&gt;checkout&lt;\\\/strong&gt;, &lt;strong&gt;confirmation&lt;\\\/strong&gt;, or &lt;strong&gt;redirect&lt;\\\/strong&gt;. The default is &lt;strong&gt;checkout&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;beforeSubmit&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;A function, or array of functions called before the shopper selects the pay button. Set to &lt;strong&gt;false&lt;\\\/strong&gt; to prevent payment submission.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;afterSubmit&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;A function, or array of functions called after the payment is completed. successful payment. Receives the payment result.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;beforeAdditionalDetails&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;A function, or array of functions called before handling additional actions, when a payment method requires more details. For example, for native 3D secure 2 authentication, or a QR code payment method.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;afterAdditionalDetails&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;A function, or array of functions called after handling additional actions.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;onError&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;A function, or array of functions called when an error occurs.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;onStateChange&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;A function, or array of functions called when the payment component state changes. Receives the state object.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;spinner&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Custom loading spinner component in ReactNode format. It is shown when the component is fetching data, for example when the component makes an API call to get the available payment methods.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;dropinConfiguration&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Includes the additional configuration for Drop-in, and the &lt;code&gt;paymentMethodsConfiguration&lt;\\\/code&gt;. Find all the optional configuration fields in in our &lt;a href=\\&quot;\\\/online-payments\\\/build-your-integration\\\/advanced-flow?platform=Web&amp;amp;integration=Drop-in&amp;amp;version=6.21.0#drop-in-configuration\\&quot;&gt;Weh Drop-in integration guide&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;paymentMethodsConfiguration&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Payment method specific configuration to customize certain payment methods. &lt;a href=\\&quot;\\\/payment-methods\\&quot;&gt;Our payment method guides&lt;\\\/a&gt; show the available configurations for each method.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;translations&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;A map of keys and strings including custom translations. In this object, specify the &lt;code&gt;locale&lt;\\\/code&gt; you want to customize, and add key-value pairs for the text you want to customize. We include UI localizations for some languages. The fields and text are in the files for the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-web\\\/tree\\\/main\\\/packages\\\/server\\\/translations\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;included locales in Drop-in&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;Example AdyenCheckout configuration&#039;\\&quot; :id=\\&quot;&#039;adyencheckout-pwa-configuration&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;&amp;lt;AdyenCheckout\\\\n    authToken={authToken}\\\\n    site={site}\\\\n    locale={locale}\\\\n    navigate={navigate}\\\\n    basket={basket}\\\\n\\\\n    returnUrl={${window.location.origin}\\\\\\\/checkout\\\\\\\/confirmation}\\\\n\\\\n    \\\\\\\/\\\\\\\/ Callbacks to add functions that are called when a specific event happens\\\\n    beforeSubmit={[validateBillingAddress, validateBasket]}\\\\n    afterSubmit={[trackPayment, sendConfirmationEmail]}\\\\n    beforeAdditionalDetails={[log3DSStart]}\\\\n    afterAdditionalDetails={[log3DSComplete]}\\\\n    onError={[logError, showErrorToast]}\\\\n    onStateChange={trackPaymentState}\\\\n\\\\n    \\\\\\\/\\\\\\\/ Additional configuration for Drop-in\\\\n    dropinConfiguration={\\\\n        openFirstPaymentMethod: true,\\\\n        showStoredPaymentMethods: true,\\\\n        instantPaymentTypes: [&#039;applepay&#039;, &#039;googlepay&#039;]\\\\n    }\\\\n    paymentMethodsConfiguration={\\\\n        \\\\\\\/\\\\\\\/ Configurations for payment methods\\\\n        card: {\\\\n            hasHolderName: true,\\\\n            holderNameRequired: true,\\\\n            enableStoreDetails: true\\\\n        }\\\\n    }\\\\n    translations={\\\\n        &#039;en-US&#039;: {\\\\n            &#039;payButton&#039;: &#039;Complete Purchase&#039;\\\\n        }\\\\n    }\\\\n\\\\\\\/&amp;gt;&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;&quot;,&quot;4016da704d8b6838e8f3914135f588c5&quot;:&quot;&lt;h2&gt;Step 5: Set up locales in your PWA app&lt;\\\/h2&gt;\\n&lt;p&gt;The &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file in the PWA Retail React app contains the locale definitions for your sites. You need to update this file with the locales you want to support in your Salesforce Commerce Cloud site:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the PWA Retail React app package, go to the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Set the following fields:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Field&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;supportedCurrencies&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The array of all currencies for the locales you have set up.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;defaultCurrency&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The default currency for your site.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;defaultLocale&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The default locale for your site.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;supportedLocales&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The array for all locale objects. Each locale object consists of: &lt;ul&gt; &lt;li&gt;&lt;code&gt;id&lt;\\\/code&gt;: the locale ID, for example &lt;strong&gt;en-US&lt;\\\/strong&gt;.&lt;\\\/li&gt; &lt;li&gt; &lt;code&gt;preferredCurrency&lt;\\\/code&gt;: the currency for the locale, for example: &lt;strong&gt;USD&lt;\\\/strong&gt;. &lt;\\\/li&gt; &lt;li&gt; &lt;code&gt;alias&lt;\\\/code&gt; (optional): You can use this attribute if you want to use other string instead of the &lt;code&gt;id&lt;\\\/code&gt;. &lt;\\\/li&gt; &lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/c32b81aedb296896b718cede348740455a3405d0\\\/packages\\\/adyen-retail-react-app\\\/config\\\/sites.js\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;PWA integration with the Adyen package on GitHub&lt;\\\/a&gt; to see an example locale configuration.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file, change the local attribute from &lt;strong&gt;none&lt;\\\/strong&gt; to &lt;strong&gt;query_param&lt;\\\/strong&gt; or &lt;strong&gt;path&lt;\\\/strong&gt; to display the locale in the URL.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Only if you defined the &lt;code&gt;alias&lt;\\\/code&gt; field for locales, in the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file, remove the comment markers for &lt;code&gt;siteAliases&lt;\\\/code&gt;, and provide the aliases for your sites.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;6f1f13f8c323a2d2ff6e05a702354d6f&quot;:&quot;&lt;h2&gt;Step 6: Generate an Adyen API Key&lt;\\\/h2&gt;\\n&lt;p&gt;If you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you do not have to generate a new API Key and you can skip this step.&lt;\\\/p&gt;\\n&lt;p&gt;To connect your PWA store to the Adyen APIs, you need to generate an API key in your Adyen Customer Area and &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;add it to the package configuration when you set environment variables&lt;\\\/a&gt; in a later step.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;Log in to your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt; and select your &lt;strong&gt;Company&lt;\\\/strong&gt; account.&lt;\\\/li&gt;\\n&lt;li&gt;Go to &lt;strong&gt;Developers&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;API credentials&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select the &lt;strong&gt;Payments&lt;\\\/strong&gt; or &lt;strong&gt;Platforms&lt;\\\/strong&gt; tab, depending on your integration type.&lt;\\\/li&gt;\\n&lt;li&gt;Select the credential username.&lt;\\\/li&gt;\\n&lt;li&gt;Under &lt;strong&gt;Server settings&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Authentication&lt;\\\/strong&gt; select the &lt;strong&gt;API key&lt;\\\/strong&gt; tab.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Generate API key&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select the copy icon &lt;i class=\\&quot;adl-icon-copy\\&quot;&gt;&lt;\\\/i&gt; and store your API key securely in your system.\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;You cannot copy the API key again after you leave the page.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Save changes&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;9ba8cdb6494271118dc334f8aefa8b11&quot;:&quot;&lt;h2 id=\\&quot;set-up-webhooks\\&quot;&gt;Step 7: Set up webhooks&lt;\\\/h2&gt;\\n&lt;p&gt;Adyen uses &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\&quot;&gt;webhooks&lt;\\\/a&gt; to inform your Salesforce Commerce Cloud store of payment status changes.&lt;\\\/p&gt;\\n&lt;p&gt;In Salesforce Commerce Cloud, webhooks are stored as custom objects that get processed by scheduled jobs. The jobs and custom objects are set by the &lt;code&gt;int_adyen_PWA&lt;\\\/code&gt; cartridge that you installed. You first need to &lt;a href=\\&quot;#set-up-webhooks-in-the-customer-area\\&quot;&gt;set up webhooks in the Adyen Customer Area&lt;\\\/a&gt;, then you can &lt;a href=\\&quot;#configure-jobs\\&quot;&gt;configure the jobs&lt;\\\/a&gt; to process the webhooks in Salesforce.&lt;\\\/p&gt;\\n&lt;h3&gt;Set up webhooks in the Customer Area&lt;\\\/h3&gt;\\n&lt;ol start=\\&quot;2\\&quot;&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt;, go to &lt;strong&gt;Developers&lt;\\\/strong&gt;\\u00a0&amp;gt;\\u00a0 &lt;strong&gt;Webhooks&lt;\\\/strong&gt;. If you want to configure webhooks for a merchant account, switch to that merchant account.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Select &lt;i class=\\&quot;adl-icon-add\\&quot; role=\\&quot;img\\&quot; aria-label=\\&quot;add icon\\&quot;&gt;&lt;\\\/i&gt; &lt;strong&gt;Webhook&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;From the list of webhooks, next to &lt;strong&gt;Standard webhook&lt;\\\/strong&gt;, select &lt;strong&gt;Add&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;General&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Setting&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Enabled&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Select the toggle to enable or disable the webhook.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Version&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The webhook version.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Description&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your description of the webhook.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Server configuration&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Setting&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your website URL followed by &lt;strong&gt;\\\/api\\\/adyen\\\/webhook&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Method&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;JSON&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Encryption protocol&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;TLSv1.3&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Security&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Setting&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Basic authentication&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Enter your server&#039;s username and password. You need to enter these credentials when &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;setting environment variables&lt;\\\/a&gt; later.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;HMAC Key&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Generate the HMAC Key, copy it, and store it securely in your system. You need to enter the key when &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;setting environment variables&lt;\\\/a&gt; later. &lt;br&gt; Learn more about &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/secure-webhooks\\\/verify-hmac-signatures#enable-hmac-signatures\\&quot;&gt;verifying HMAC signatures&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Events&lt;\\\/strong&gt; settings, select the checkbox for the &lt;strong&gt;OFFER_CLOSED&lt;\\\/strong&gt; &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/webhook-types\\\/#event-codes\\&quot;&gt;event code&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;If the &lt;strong&gt;Additional settings&lt;\\\/strong&gt; section is available, optionally select the additional information you want to receive in this webhook. Some webhook types do not support more than one event code, so this section does not appear.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Select &lt;strong&gt;Save configuration&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;p&gt;The package implements the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Webhooks\\\/1\\\/post\\\/AUTHORISATION\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;AUTHORISATION&lt;\\\/a&gt; webhook by default. If you want to receive webhooks for &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/webhook-types#event-codes\\&quot;&gt;more payment events&lt;\\\/a&gt;, you can &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/customization-guide\\&quot;&gt;customize&lt;\\\/a&gt; your integration after you have successfully &lt;a href=\\&quot;#deploy-to-mrt\\&quot;&gt;deployed your application in MRT&lt;\\\/a&gt; and &lt;a href=\\&quot;#test-your-integration\\&quot;&gt;completed testing&lt;\\\/a&gt; without any customizations.&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;You cannot test Adyen webhooks on localhost.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;h3 id=\\&quot;configure-jobs\\&quot;&gt;Configure scheduled jobs in Salesforce&lt;\\\/h3&gt;\\n&lt;p&gt;Webhooks are stored in Salesforce Commerce Cloud as custom object instances to be processed by scheduled jobs.&lt;\\\/p&gt;\\n&lt;p&gt;After the metadata import, a scheduled job with ID Process is added to the Salesforce Business Manager &amp;gt; &lt;strong&gt;Administration&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Operations&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Jobs&lt;\\\/strong&gt;. This scheduled job has two steps that you can check under &lt;strong&gt;Job Steps&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;&lt;strong&gt;Process&lt;\\\/strong&gt; \\u2013 Processes the webhook and updates the payment status of the order.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;strong&gt;Clean&lt;\\\/strong&gt; \\u2013  Deletes the custom object instance, once it has been processed.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;p&gt;To optimize the processing of your instances, we recommend that you set the frequency of this scheduled job to 1 minute:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;Go to the &lt;strong&gt;Schedule and History&lt;\\\/strong&gt; tab for the &lt;strong&gt;Process&lt;\\\/strong&gt; scheduled job.&lt;\\\/li&gt;\\n&lt;li&gt;Set &lt;strong&gt;Trigger&lt;\\\/strong&gt; to &lt;strong&gt;Recurring Interval&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;In the &lt;strong&gt;Run Time&lt;\\\/strong&gt; pane, set &lt;strong&gt;Amount&lt;\\\/strong&gt; to &lt;strong&gt;1&lt;\\\/strong&gt;, and &lt;strong&gt;Interval&lt;\\\/strong&gt; to &lt;strong&gt;Minutes&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;76eacb082c5ecf70189dc9bab2895713&quot;:&quot;&lt;h2 id=\\&quot;deploy-to-mrt\\&quot;&gt;Step 8: Deploy your application in Managed Runtime&lt;\\\/h2&gt;\\n&lt;p&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce&#039;s Managed Runtime (MRT)&lt;\\\/a&gt; provides the infrastructure to deploy, host, and monitor your PWA Kit application.&lt;\\\/p&gt;\\n&lt;p&gt;Managed Runtime only supports applications created from a PWA Kit template and has a separate &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;admin dashboard&lt;\\\/a&gt;. Before you can use MRT and Runtime Admin, Salesforce must enable it for your organization. To enable MRT and Runtime Admin for your organization, reach out to your Salesforce account team.&lt;\\\/p&gt;\\n&lt;p&gt;When building your storefront, keep the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#constraints\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;constraints of MRT environments&lt;\\\/a&gt; in mind.&lt;\\\/p&gt;\\n&lt;h3&gt;1. Create a new project in Managed Runtime&lt;\\\/h3&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#create-a-project\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create a project in Runtime Admin&lt;\\\/a&gt;. Use the following details for your project:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Field&lt;\\\/th&gt;\\n&lt;th&gt;Value&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project Name&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;adyen-salesforce-headless-commerce-pwa&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Project IDs must match the package name in the &lt;code&gt;package.json&lt;\\\/code&gt; file and can not be longer than 20 characters.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Scopes&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;list of scopes&lt;\\\/a&gt; that are used to fetch baskets and create orders.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;h3 id=\\&quot;set-up-the-environment\\&quot;&gt;2. Set up the MRT environment&lt;\\\/h3&gt;\\n&lt;p&gt;Set up an environment to separate your production storefront from other storefronts, such as development or testing storefronts. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;environments in Salesforce docs&lt;\\\/a&gt; to learn more about environments.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;Follow the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;steps to create an environment in Salesforce Docs&lt;\\\/a&gt;.&lt;br \\\/&gt;\\n&lt;strong&gt;Name&lt;\\\/strong&gt;: use your Sandbox Org ID to easily identify an environment that belongs to a sandbox, and to create variables correctly for each environment.&lt;br \\\/&gt;\\n&lt;strong&gt;Region&lt;\\\/strong&gt;: we recommend to set your MRT region to the same region that your Salesforce sandbox uses.\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;Your Composable Storefront integration with Adyen can only have one region connected to one MRT organization, one SFCC site, and one Adyen Customer Area account.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;h3 id=\\&quot;set-environment-variables\\&quot;&gt;3. Set the environment variables&lt;\\\/h3&gt;\\n&lt;ol&gt;\\n&lt;li&gt;In your MRT environment, navigate to your project by selecting your &lt;strong&gt;Organization&lt;\\\/strong&gt; and &lt;strong&gt;Project&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Environment Variables&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Specify the values for the following variables:&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When a variable contains &lt;strong&gt;YOUR_SITE_ID&lt;\\\/strong&gt;, replace it with the same value as your Commerce API site ID.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Variable&lt;\\\/th&gt;\\n&lt;th&gt;Required&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_API_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen &lt;a href=\\&quot;#step-4-generate-an-adyen-api-key\\&quot;&gt;API key&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_MERCHANT_ACCOUNT&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen merchant account name.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_CLIENT_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen &lt;a href=\\&quot;\\\/development-resources\\\/client-side-authentication\\\/#get-your-client-key\\&quot;&gt;client key&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_ENVIRONMENT&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Use &lt;strong&gt;test&lt;\\\/strong&gt;. When you are ready to accept live payments, change the value to &lt;strong&gt;live&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_WEBHOOK_USER&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The basic authentication username you entered when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_WEBHOOK_PASSWORD&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The basic authentication password you entered when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_HMAC_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The HMAC key you generated when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_LIVE_URL_PREFIX&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Only for Live &lt;br&gt; environment&lt;\\\/td&gt;\\n&lt;td&gt;Your &lt;a href=\\&quot;\\\/development-resources\\\/live-endpoints\\\/#live-url-prefix\\&quot;&gt;live URL prefix&lt;\\\/a&gt; to process live transactions.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_APPLE_DOMAIN_ASSOCIATION&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;If you want to offer Apple Pay as a payment method in the live environment, set to the &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/set-up-payment-methods\\\/#go-live-apple-pay\\&quot;&gt;domain association file value&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_SYSTEM_INTEGRATOR_NAME&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The name of your system integrator.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API client ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_ORG_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API Org ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_SHORT_CODE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API short code.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_SITE_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce site ID, for example, &lt;strong&gt;RefArch&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_DEFAULT_SITE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your default Salesforce site, for example, &lt;strong&gt;RefArch&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SCAPI_URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce Commerce API URL. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/base-url.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; for more information.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;OCAPI_URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Open Commerce API Url. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/references\\\/b2c-commerce-ocapi\\\/urlschema.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; for more information.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;ENVIRONMENT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT environment ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;PROJECT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your project ID, for example, &lt;strong&gt;adyen-salesforce-pwa&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_ID_PRIVATE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce Commerce API client ID. To get your API credentials, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create an API client in Salesforce&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_SECRET&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Commerce API client secret for your &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce API client&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_REALM_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC realm ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_INSTANCE_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC instance ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_OAUTH_SCOPES&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The custom Adyen SCAPI scopes, for example, &lt;strong&gt;c_order_rw c_notify_rw&lt;\\\/strong&gt;, and your SFCC oauth scopes, for example, &lt;strong&gt;sfcc.orders sfcc.orders.rw&lt;\\\/strong&gt;. You also need to add this in your Salesforce Account Manager &amp;gt; &lt;strong&gt;API Client&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;OpenID Connect&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Allowed Scopes&lt;\\\/strong&gt;. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; to learn more about authorization scopes.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_GIFT_CARD_EXPIRATION_TIME&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;For partial payments with gift cards, the expiration time after an order is created, in minutes. The default is &lt;strong&gt;30&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/go-live-checklist\\&quot;&gt;going live&lt;\\\/a&gt;, you need to update some variables you have entered with values from your &lt;a href=\\&quot;https:\\\/\\\/ca-live.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;live Customer Area&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;h3 id=\\&quot;deploy-to-MRT\\&quot;&gt;4. Deploy your project to MRT&lt;\\\/h3&gt;\\n&lt;p&gt;To run your application, you must deploy your application to MRT and to the &lt;a href=\\&quot;#set-up-the-environment\\&quot;&gt;environment you have set up&lt;\\\/a&gt;. You also need a Personal MRT API Key.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#save-your-credentials\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;generate a Personal MRT API key in Salesforce Docs&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your Retail React App, save your credentials:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run save-credentials -- --user YOUR_EMAIL --key YOUR_PERSONAL_MRT_API_KEY\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Push your build to MRT:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run push:env\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#deploy-a-bundle\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;deploy the bundle in Salesforce Docs&lt;\\\/a&gt; to the environment you have created.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;3a05ddf05119a6b0ee260ccf4abef9c3&quot;:&quot;&lt;h2 id=\\&quot;step-7-optional-import-the-adyen-country-list\\&quot;&gt;Step 9 (Optional): Import the Adyen country\\\/region list&lt;\\\/h2&gt;\\n&lt;p&gt;Salesforce allows you to add your list of countries\\\/regions for shipping. Optionally, you can use our default list.&lt;\\\/p&gt;\\n&lt;p&gt;To use our country\\\/region list, in your PWA Retail React app, import the Adyen &lt;code&gt;countrylist&lt;\\\/code&gt; and export it as &lt;code&gt;SHIPPING_COUNTRY_CODES&lt;\\\/code&gt; in the &lt;code&gt;constants.js&lt;\\\/code&gt; file:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;js&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import {countryList} from &#039;@adyen\\\\\\\/adyen-salesforce-pwa&#039;\\\\n\\\\nexport const SHIPPING_COUNTRY_CODES = countryList&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;&quot;,&quot;8c6a0aa80b167d52c5b31cae90203ce2&quot;:&quot;&lt;h2 id=\\&quot;migrate-pages\\&quot;&gt;Migrate pages&lt;\\\/h2&gt;\\n&lt;p&gt;If you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you need to migrate your store pages. If you do not have an SFCC integration with Adyen already, you can start &lt;a href=\\&quot;#test-your-integration\\&quot;&gt;testing&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;p&gt;You can perform &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/phased-headless-rollouts.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Phased Headless Rollouts&lt;\\\/a&gt; to migrate your SFRA or SiteGenesis pages in a phased approach.&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;The Adyen package uses version 8 of the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/retail-react-app.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Retail React App&lt;\\\/a&gt; with &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/upgrade-to-v3.html#template-extensibility\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;template extensibility&lt;\\\/a&gt;. To filter out links to non-PWA kit pages, you can override the &lt;code&gt;overrides\\\/app\\\/routes.jsx&lt;\\\/code&gt; file. Salesforce has &lt;a href=\\&quot;https:\\\/\\\/gist.github.com\\\/shethj\\\/c9d52aa1fe4188c431336438305f8e32\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;sample code on GitHub&lt;\\\/a&gt; that shows how to override.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;If you are migrating the checkout page last, you need to route traffic to your SFRA checkout page from your PWA integration. To learn how to apply routing, refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/phased-headless-rollouts.html#routing\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce Docs&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&quot;,&quot;4f89091c474b0f88d5379f61ebfa0e57&quot;:&quot;&lt;h2&gt;Step 5 (Optional): Handle the browser back button&lt;\\\/h2&gt;\\n&lt;p&gt;For a better user experience when shoppers navigate away from a redirect payment page, you can implement the following hooks:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;\\n&lt;p&gt;&lt;code&gt;useHandleBackNavigation&lt;\\\/code&gt;: This hook handles the cleanup when a shopper uses the browser&#039;s back button to navigate from a redirect payment page back to the checkout page, to prevent orphaned orders and ensure proper state management.&lt;br \\\/&gt;\\nThe flow is as follows: The hook detects the navigation change and automatically calls the backend cleanup endpoint. This fails any pending Salesforce orders and recreates the basket. The shopper can return to the checkout later without conflicts.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;&lt;code&gt;useCheckoutErrorRecovery&lt;\\\/code&gt;: This hook detects checkout failures, refetches the basket, and forces a clean remount of the AdyenCheckout component.&lt;br \\\/&gt;\\nThe flow is as follows: When a payment fails, the backend automatically fails the Salesforce order, creates a new basket with the same items, and redirects to &lt;code&gt;\\\/checkout?newBasketId={newBasketId}&lt;\\\/code&gt;. The hook detects the &lt;code&gt;newBasketId&lt;\\\/code&gt; and automatically navigates to &lt;code&gt;\\\/checkout?error=true&lt;\\\/code&gt;, refetches the basket with the newly created basket data, and increments &lt;code&gt;adyenCheckoutKey&lt;\\\/code&gt; to force a clean remount. The shopper sees a clean checkout state with the recreated basket.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;p&gt;Implementing these hooks is recommended. They work with the standard checkout flow as well as the express checkout flow.&lt;\\\/p&gt;\\n&lt;p&gt;To implement these hooks:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Import the hooks.&lt;\\\/p&gt;\\n&lt;pre&gt;&lt;code class=\\&quot;language-js\\&quot;&gt;import {\\n  useHandleBackNavigation,\\n  useCheckoutErrorRecovery\\n} from &#039;@adyen\\\/adyen-salesforce-pwa&#039;&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;To handle the back navigation cleanup, add &lt;code&gt;useHandleBackNavigation&lt;\\\/code&gt; to your checkout page component, specifying the following properties for this hook:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Property&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Type&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;authToken&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;String&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The customer authentication token.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;customerId&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;String&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The ID of the customer.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;basketId&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;String&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The ID of the current basket.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;site&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Object&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The site configuration object.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;navigate&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Function&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The React Router navigate function.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;pre&gt;&lt;code class=\\&quot;language-js\\&quot;&gt;const CheckoutPage = () =&amp;gt; {\\n  const {data: basket, refetch: refetchBasket} = useCurrentBasket()\\n  const customerId = useCustomerId()\\n  const {getTokenWhenReady} = useAccessToken()\\n  const navigate = useNavigation()\\n  const {locale, site} = useMultiSite()\\n  const [authToken, setAuthToken] = useState()\\n\\n  useEffect(() =&amp;gt; {\\n      const getToken = async () =&amp;gt; {\\n          const token = await getTokenWhenReady()\\n          setAuthToken(token)\\n      }\\n      getToken()\\n  }, [])\\n\\n  \\\/\\\/ Handle browser back navigation cleanup\\n  useHandleBackNavigation({\\n      authToken,\\n      customerId,\\n      basketId: basket?.basketId,\\n      site,\\n      navigate\\n  })\\n\\n  \\\/\\\/ ... rest of component\\n}&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;To handle checkout error recovery, add &lt;code&gt;useCheckoutErrorRecovery&lt;\\\/code&gt; to your payment component, specifying the following properties for this hook:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Property&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Type&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: center;\\&quot;&gt;Required&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;refetchBasket&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Function&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The function to refetch the current basket.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;navigate&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Function&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: center;\\&quot;&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The React Router navigate function.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;pre&gt;&lt;code class=\\&quot;language-js\\&quot;&gt;const Payment = () =&amp;gt; {\\n  const {data: basket, refetch: refetchBasket} = useCurrentBasket()\\n  const navigate = useNavigation()\\n\\n  const {adyenCheckoutKey, isRefetchingBasket} = useCheckoutErrorRecovery({\\n      refetchBasket,\\n      navigate\\n  })\\n\\n  return (\\n      &amp;lt;AdyenCheckout\\n          key={adyenCheckoutKey}  \\\/\\\/ Forces remount on error recovery\\n          \\\/\\\/ ... other props\\n      \\\/&amp;gt;\\n  )\\n}&lt;\\\/code&gt;&lt;\\\/pre&gt;\\n&lt;p&gt;The &lt;code&gt;useCheckoutErrorRecovery&lt;\\\/code&gt; hook returns the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Return value&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Type&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;adyenCheckoutKey&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Number&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;A key to force a remount of AdyenCheckout.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;code&gt;isRefetchingBasket&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Boolean&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;The loading state while the basket is refetched.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;c6bce231a5dfe6b56054b896f276ab20&quot;:&quot;&lt;h2&gt;Step 6: Set up locales in your PWA app&lt;\\\/h2&gt;\\n&lt;p&gt;The &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file in the PWA Retail React app contains the locale definitions for your sites. You need to update this file with the locales you want to support in your Salesforce Commerce Cloud site:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the PWA Retail React app package, go to the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Set the following fields:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Field&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;supportedCurrencies&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The array of all currencies for the locales you have set up.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;defaultCurrency&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The default currency for your site.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;defaultLocale&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The default locale for your site.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;code&gt;supportedLocales&lt;\\\/code&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The array for all locale objects. Each locale object consists of: &lt;ul&gt; &lt;li&gt;&lt;code&gt;id&lt;\\\/code&gt;: the locale ID, for example &lt;strong&gt;en-US&lt;\\\/strong&gt;.&lt;\\\/li&gt; &lt;li&gt; &lt;code&gt;preferredCurrency&lt;\\\/code&gt;: the currency for the locale, for example: &lt;strong&gt;USD&lt;\\\/strong&gt;. &lt;\\\/li&gt; &lt;li&gt; &lt;code&gt;alias&lt;\\\/code&gt; (optional): You can use this attribute if you want to use other string instead of the &lt;code&gt;id&lt;\\\/code&gt;. &lt;\\\/li&gt; &lt;\\\/ul&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;See the &lt;a href=\\&quot;https:\\\/\\\/github.com\\\/Adyen\\\/adyen-salesforce-headless-commerce-pwa\\\/blob\\\/c32b81aedb296896b718cede348740455a3405d0\\\/packages\\\/adyen-retail-react-app\\\/config\\\/sites.js\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;PWA integration with the Adyen package on GitHub&lt;\\\/a&gt; to see an example locale configuration.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file, change the local attribute from &lt;strong&gt;none&lt;\\\/strong&gt; to &lt;strong&gt;query_param&lt;\\\/strong&gt; or &lt;strong&gt;path&lt;\\\/strong&gt; to display the locale in the URL.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Only if you defined the &lt;code&gt;alias&lt;\\\/code&gt; field for locales, in the &lt;code&gt;config\\\/default.js&lt;\\\/code&gt; file, remove the comment markers for &lt;code&gt;siteAliases&lt;\\\/code&gt;, and provide the aliases for your sites.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;4d23cfb6d155ec6d68b6b0e7eb8a8f8d&quot;:&quot;&lt;h2&gt;Step 7: Generate an Adyen API Key&lt;\\\/h2&gt;\\n&lt;p&gt;If you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you do not have to generate a new API Key and you can skip this step.&lt;\\\/p&gt;\\n&lt;p&gt;To connect your PWA store to the Adyen APIs, you need to generate an API key in your Adyen Customer Area and &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;add it to the package configuration when you set environment variables&lt;\\\/a&gt; in a later step.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;Log in to your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt; and select your &lt;strong&gt;Company&lt;\\\/strong&gt; account.&lt;\\\/li&gt;\\n&lt;li&gt;Go to &lt;strong&gt;Developers&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;API credentials&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select the &lt;strong&gt;Payments&lt;\\\/strong&gt; or &lt;strong&gt;Platforms&lt;\\\/strong&gt; tab, depending on your integration type.&lt;\\\/li&gt;\\n&lt;li&gt;Select the credential username.&lt;\\\/li&gt;\\n&lt;li&gt;Under &lt;strong&gt;Server settings&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Authentication&lt;\\\/strong&gt; select the &lt;strong&gt;API key&lt;\\\/strong&gt; tab.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Generate API key&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select the copy icon &lt;i class=\\&quot;adl-icon-copy\\&quot;&gt;&lt;\\\/i&gt; and store your API key securely in your system.\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;You cannot copy the API key again after you leave the page.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Save changes&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;a8e058c950c22cd5ed6508a4f9d09835&quot;:&quot;&lt;h2 id=\\&quot;set-up-webhooks\\&quot;&gt;Step 8: Set up webhooks&lt;\\\/h2&gt;\\n&lt;p&gt;Adyen uses &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\&quot;&gt;webhooks&lt;\\\/a&gt; to inform your Salesforce Commerce Cloud store of payment status changes.&lt;\\\/p&gt;\\n&lt;p&gt;In Salesforce Commerce Cloud, webhooks are stored as custom objects that get processed by scheduled jobs. The jobs and custom objects are set by the &lt;code&gt;int_adyen_PWA&lt;\\\/code&gt; cartridge that you installed. You first need to &lt;a href=\\&quot;#set-up-webhooks-in-the-customer-area\\&quot;&gt;set up webhooks in the Adyen Customer Area&lt;\\\/a&gt;, then you can &lt;a href=\\&quot;#configure-jobs\\&quot;&gt;configure the jobs&lt;\\\/a&gt; to process the webhooks in Salesforce.&lt;\\\/p&gt;\\n&lt;h3&gt;Set up webhooks in the Customer Area&lt;\\\/h3&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Customer Area&lt;\\\/a&gt;, go to &lt;strong&gt;Developers&lt;\\\/strong&gt;\\u00a0&amp;gt;\\u00a0 &lt;strong&gt;Webhooks&lt;\\\/strong&gt;. If you want to configure webhooks for a merchant account, switch to that merchant account.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Select &lt;i class=\\&quot;adl-icon-add\\&quot; role=\\&quot;img\\&quot; aria-label=\\&quot;add icon\\&quot;&gt;&lt;\\\/i&gt; &lt;strong&gt;Webhook&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;From the list of webhooks, next to &lt;strong&gt;Standard webhook&lt;\\\/strong&gt;, select &lt;strong&gt;Add&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;General&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Setting&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Enabled&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Select the toggle to enable or disable the webhook.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Version&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The webhook version.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Description&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your description of the webhook.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Server configuration&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Setting&lt;\\\/th&gt;\\n&lt;th style=\\&quot;text-align: left;\\&quot;&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;Your website URL followed by &lt;strong&gt;\\\/api\\\/adyen\\\/webhook?siteId=YOUR_SITE_ID&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Method&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;JSON&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;Encryption protocol&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td style=\\&quot;text-align: left;\\&quot;&gt;&lt;strong&gt;TLSv1.3&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Security&lt;\\\/strong&gt;, configure the following:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Setting&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Basic authentication&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Enter your server&#039;s username and password. You need to enter these credentials when &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;setting environment variables&lt;\\\/a&gt; later.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;HMAC Key&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Generate the HMAC Key, copy it, and store it securely in your system. You need to enter the key when &lt;a href=\\&quot;#set-environment-variables\\&quot;&gt;setting environment variables&lt;\\\/a&gt; later. &lt;br&gt; Learn more about &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/secure-webhooks\\\/verify-hmac-signatures#enable-hmac-signatures\\&quot;&gt;verifying HMAC signatures&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Under &lt;strong&gt;Events&lt;\\\/strong&gt; settings, select the checkbox for the &lt;strong&gt;OFFER_CLOSED&lt;\\\/strong&gt; &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/webhook-types\\\/#event-codes\\&quot;&gt;event code&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;If the &lt;strong&gt;Additional settings&lt;\\\/strong&gt; section is available, optionally select the additional information you want to receive in this webhook. Some webhook types do not support more than one event code, so this section does not appear.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Select &lt;strong&gt;Save configuration&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;p&gt;The package implements the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Webhooks\\\/1\\\/post\\\/AUTHORISATION\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;AUTHORISATION&lt;\\\/a&gt; webhook by default. If you want to receive webhooks for &lt;a href=\\&quot;\\\/development-resources\\\/webhooks\\\/webhook-types#event-codes\\&quot;&gt;more payment events&lt;\\\/a&gt;, you can &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/customization-guide\\&quot;&gt;customize&lt;\\\/a&gt; your integration after you have successfully &lt;a href=\\&quot;#deploy-to-mrt\\&quot;&gt;deployed your application in MRT&lt;\\\/a&gt; and &lt;a href=\\&quot;#test-your-integration\\&quot;&gt;completed testing&lt;\\\/a&gt; without any customizations.&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;You cannot test Adyen webhooks on localhost.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;h3 id=\\&quot;configure-jobs\\&quot;&gt;Configure scheduled jobs in Salesforce&lt;\\\/h3&gt;\\n&lt;p&gt;Webhooks are stored in Salesforce Commerce Cloud as custom object instances to be processed by scheduled jobs.&lt;\\\/p&gt;\\n&lt;p&gt;After the metadata import, a scheduled job with ID Process is added to the Salesforce Business Manager &amp;gt; &lt;strong&gt;Administration&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Operations&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Jobs&lt;\\\/strong&gt;. This scheduled job has two steps that you can check under &lt;strong&gt;Job Steps&lt;\\\/strong&gt;.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;&lt;strong&gt;Process&lt;\\\/strong&gt; \\u2013 Processes the webhook and updates the payment status of the order.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;strong&gt;Clean&lt;\\\/strong&gt; \\u2013  Deletes the custom object instance, once it has been processed.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;p&gt;To optimize the processing of your instances, we recommend that you set the frequency of this scheduled job to 1 minute:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;Go to the &lt;strong&gt;Schedule and History&lt;\\\/strong&gt; tab for the &lt;strong&gt;Process&lt;\\\/strong&gt; scheduled job.&lt;\\\/li&gt;\\n&lt;li&gt;Set &lt;strong&gt;Trigger&lt;\\\/strong&gt; to &lt;strong&gt;Recurring Interval&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;In the &lt;strong&gt;Run Time&lt;\\\/strong&gt; pane, set &lt;strong&gt;Amount&lt;\\\/strong&gt; to &lt;strong&gt;1&lt;\\\/strong&gt;, and &lt;strong&gt;Interval&lt;\\\/strong&gt; to &lt;strong&gt;Minutes&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;2ee1774f9a7d31b6896e57ab0c0d356f&quot;:&quot;&lt;h2 id=\\&quot;deploy-to-mrt\\&quot;&gt;Step 9: Deploy your application in Managed Runtime&lt;\\\/h2&gt;\\n&lt;p&gt;&lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce&#039;s Managed Runtime (MRT)&lt;\\\/a&gt; provides the infrastructure to deploy, host, and monitor your PWA Kit application.&lt;\\\/p&gt;\\n&lt;p&gt;Managed Runtime only supports applications created from a PWA Kit template and has a separate &lt;a href=\\&quot;https:\\\/\\\/runtime.commercecloud.com\\\/login\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;admin dashboard&lt;\\\/a&gt;. Before you can use MRT and Runtime Admin, Salesforce must enable it for your organization. To enable MRT and Runtime Admin for your organization, reach out to your Salesforce account team.&lt;\\\/p&gt;\\n&lt;p&gt;When building your storefront, keep the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#constraints\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;constraints of MRT environments&lt;\\\/a&gt; in mind.&lt;\\\/p&gt;\\n&lt;h3&gt;1. Create a new project in Managed Runtime&lt;\\\/h3&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#create-a-project\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create a project in Runtime Admin&lt;\\\/a&gt;. Use the following details for your project:&lt;\\\/p&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Field&lt;\\\/th&gt;\\n&lt;th&gt;Value&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project Name&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;strong&gt;adyen-salesforce-headless-commerce-pwa&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Project ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Project IDs must match the package name in the &lt;code&gt;package.json&lt;\\\/code&gt; file and can not be longer than 20 characters.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;Scopes&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;list of scopes&lt;\\\/a&gt; that are used to fetch baskets and create orders.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;h3 id=\\&quot;set-up-the-environment\\&quot;&gt;2. Set up the MRT environment&lt;\\\/h3&gt;\\n&lt;p&gt;Set up an environment to separate your production storefront from other storefronts, such as development or testing storefronts. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/mrt-overview.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;environments in Salesforce docs&lt;\\\/a&gt; to learn more about environments.&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt;Follow the &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/managed-runtime-administration.html#environments\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;steps to create an environment in Salesforce Docs&lt;\\\/a&gt;.&lt;br \\\/&gt;\\n&lt;strong&gt;Name&lt;\\\/strong&gt;: use your Sandbox Org ID to easily identify an environment that belongs to a sandbox, and to create variables correctly for each environment.&lt;br \\\/&gt;\\n&lt;strong&gt;Region&lt;\\\/strong&gt;: we recommend to set your MRT region to the same region that your Salesforce sandbox uses.\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;Your Composable Storefront integration with Adyen can only have one region connected to one MRT organization, one SFCC site, and one Adyen Customer Area account.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;h3 id=\\&quot;set-environment-variables\\&quot;&gt;3. Set the environment variables&lt;\\\/h3&gt;\\n&lt;ol&gt;\\n&lt;li&gt;In your MRT environment, navigate to your project by selecting your &lt;strong&gt;Organization&lt;\\\/strong&gt; and &lt;strong&gt;Project&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;Select &lt;strong&gt;Environment Variables&lt;\\\/strong&gt;.&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Specify the values for the following variables:&lt;\\\/p&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When a variable contains &lt;strong&gt;YOUR_SITE_ID&lt;\\\/strong&gt;, replace it with the same value as your Commerce API site ID.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;table&gt;\\n&lt;thead&gt;\\n&lt;tr&gt;\\n&lt;th&gt;Variable&lt;\\\/th&gt;\\n&lt;th&gt;Required&lt;\\\/th&gt;\\n&lt;th&gt;Description&lt;\\\/th&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/thead&gt;\\n&lt;tbody&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_API_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen &lt;a href=\\&quot;#step-4-generate-an-adyen-api-key\\&quot;&gt;API key&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_MERCHANT_ACCOUNT&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen merchant account name.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_CLIENT_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Adyen &lt;a href=\\&quot;\\\/development-resources\\\/client-side-authentication\\\/#get-your-client-key\\&quot;&gt;client key&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_ENVIRONMENT&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Use &lt;strong&gt;test&lt;\\\/strong&gt;. When you are ready to accept live payments, change the value to &lt;strong&gt;live&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_WEBHOOK_USER&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The basic authentication username you entered when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_WEBHOOK_PASSWORD&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The basic authentication password you entered when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_HMAC_KEY&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The HMAC key you generated when you &lt;a href=\\&quot;#set-up-webhooks\\&quot;&gt;set up webhooks&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_LIVE_URL_PREFIX&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Only for Live &lt;br&gt; environment&lt;\\\/td&gt;\\n&lt;td&gt;Your &lt;a href=\\&quot;\\\/development-resources\\\/live-endpoints\\\/#live-url-prefix\\&quot;&gt;live URL prefix&lt;\\\/a&gt; to process live transactions.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_ADYEN_APPLE_DOMAIN_ASSOCIATION&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;If you want to offer Apple Pay as a payment method in the live environment, set to the &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/set-up-payment-methods\\\/#go-live-apple-pay\\&quot;&gt;domain association file value&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_SYSTEM_INTEGRATOR_NAME&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The name of your system integrator.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API client ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_ORG_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API Org ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_SHORT_CODE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT Commerce API short code.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_SITE_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce site ID, for example, &lt;strong&gt;RefArch&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_DEFAULT_SITE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your default Salesforce site, for example, &lt;strong&gt;RefArch&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SCAPI_URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce Commerce API URL. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/base-url.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; for more information.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;OCAPI_URL&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Open Commerce API Url. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/b2c-commerce\\\/references\\\/b2c-commerce-ocapi\\\/urlschema.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; for more information.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;ENVIRONMENT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your MRT environment ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;PROJECT_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your project ID, for example, &lt;strong&gt;adyen-salesforce-pwa&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_ID_PRIVATE&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Salesforce Commerce API client ID. To get your API credentials, &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;create an API client in Salesforce&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;COMMERCE_API_CLIENT_SECRET&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your Commerce API client secret for your &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/authorization-for-admin-apis.html#create-an-api-client\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce API client&lt;\\\/a&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_REALM_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC realm ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_INSTANCE_ID&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;Your SFCC instance ID.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;SFCC_OAUTH_SCOPES&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;img title=\\&quot;-white_check_mark-\\&quot; alt=\\&quot;-white_check_mark-\\&quot; class=\\&quot;smileys\\&quot; src=\\&quot;\\\/user\\\/data\\\/smileys\\\/emoji\\\/white_check_mark.png\\&quot; \\\/&gt;&lt;\\\/td&gt;\\n&lt;td&gt;The custom Adyen SCAPI scopes, for example, &lt;strong&gt;c_order_rw c_notify_rw&lt;\\\/strong&gt;, and your SFCC oauth scopes, for example, &lt;strong&gt;sfcc.orders sfcc.orders.rw&lt;\\\/strong&gt;. You also need to add this in your Salesforce Account Manager &amp;gt; &lt;strong&gt;API Client&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;OpenID Connect&lt;\\\/strong&gt; &amp;gt; &lt;strong&gt;Allowed Scopes&lt;\\\/strong&gt;. Refer to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/commerce-api\\\/guide\\\/auth-z-scope-catalog.html\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Salesforce documentation&lt;\\\/a&gt; to learn more about authorization scopes.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;tr&gt;\\n&lt;td&gt;&lt;strong&gt;YOUR_SITE_ID_GIFT_CARD_EXPIRATION_TIME&lt;\\\/strong&gt;&lt;\\\/td&gt;\\n&lt;td&gt;&lt;\\\/td&gt;\\n&lt;td&gt;For partial payments with gift cards, the expiration time after an order is created, in minutes. The default is &lt;strong&gt;30&lt;\\\/strong&gt;.&lt;\\\/td&gt;\\n&lt;\\\/tr&gt;\\n&lt;\\\/tbody&gt;\\n&lt;\\\/table&gt;\\n&lt;div class=\\&quot;notices green\\&quot;&gt;\\n&lt;p&gt;When &lt;a href=\\&quot;\\\/plugins\\\/salesforce-commerce-cloud\\\/composable-storefront\\\/go-live-checklist\\&quot;&gt;going live&lt;\\\/a&gt;, you need to update some variables you have entered with values from your &lt;a href=\\&quot;https:\\\/\\\/ca-live.adyen.com\\\/\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;live Customer Area&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&lt;h3 id=\\&quot;deploy-to-MRT\\&quot;&gt;4. Deploy your project to MRT&lt;\\\/h3&gt;\\n&lt;p&gt;To run your application, you must deploy your application to MRT and to the &lt;a href=\\&quot;#set-up-the-environment\\&quot;&gt;environment you have set up&lt;\\\/a&gt;. You also need a Personal MRT API Key.&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#save-your-credentials\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;generate a Personal MRT API key in Salesforce Docs&lt;\\\/a&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;In your Retail React App, save your credentials:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run save-credentials -- --user YOUR_EMAIL --key YOUR_PERSONAL_MRT_API_KEY\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Push your build to MRT:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;js\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;npm run push:env\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Follow the steps to &lt;a href=\\&quot;https:\\\/\\\/developer.salesforce.com\\\/docs\\\/commerce\\\/pwa-kit-managed-runtime\\\/guide\\\/pushing-and-deploying-bundles.html?q=deploy#deploy-a-bundle\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;deploy the bundle in Salesforce Docs&lt;\\\/a&gt; to the environment you have created.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;&quot;,&quot;17b8e4202170267960b427e8b1da3245&quot;:&quot;&lt;h2 id=\\&quot;step-7-optional-import-the-adyen-country-list\\&quot;&gt;Step 10 (Optional): Import the Adyen country\\\/region list&lt;\\\/h2&gt;\\n&lt;p&gt;Salesforce allows you to add your list of countries\\\/regions for shipping. Optionally, you can use our default list.&lt;\\\/p&gt;\\n&lt;p&gt;To use our country\\\/region list, in your PWA Retail React app, import the Adyen &lt;code&gt;countrylist&lt;\\\/code&gt; and export it as &lt;code&gt;SHIPPING_COUNTRY_CODES&lt;\\\/code&gt; in the &lt;code&gt;constants.js&lt;\\\/code&gt; file:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;js&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import {countryList} from &#039;@adyen\\\\\\\/adyen-salesforce-pwa&#039;\\\\n\\\\nexport const SHIPPING_COUNTRY_CODES = countryList&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;&quot;}}}}}}\"\n        query-param-tab=\"plugin\"\n        query-param-box=\"integration\"\n        query-param-dropdown=\"version\">\n    <\/in-page-filtering>\n<\/div>\n<div class=\"version_docs__image-placeholder u-display-none\">\n    <\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/plugins\/salesforce-commerce-cloud\/composable-storefront\/install-and-set-up-the-package","articleFields":{"description":"Install and set up the Adyen Composable Storefront package.","feedback_component":true,"last_edit_on":"25-01-2024 13:54","page_id":"dff88025-9484-45f4-903c-f92d9b2e2aea","decision_tree":"[]","filters_component":true,"filters_config_folder":"composable-storefront","dynamic_minitoc":true,"dynamic_minitoc_context":".in-page-filtering--content"},"algolia":[{"url":"https:\/\/docs.adyen.com\/pt\/plugins\/salesforce-commerce-cloud\/composable-storefront\/install-and-set-up-the-package","title":"Set up your Composable Storefront with Adyen","content":"Requirements\nBefore you begin, take into account the following requirements, limitations, and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nUse this page to build an integration with our Salesforce Composable Storefront package.\n\n\nSupported versions\n Salesforce PWA Kit v3.12.0 and later Node v22 or later npm v11 or later\n\n\nSetup steps\nBefore you begin, complete the following steps on the Salesforce side:  Set up a Salesforce sandbox connected to your Salesforce Commerce Cloud (SFCC) instance. Set up your environments, sites, locales and currencies, and product inventories.   Set up your WebDAV authentication credentials. Reach out to your Salesforce account team and enable Managed Runtime (MRT) on your SFCC instance. Set your MRT permissions to Admin.Review the configuration file structure of the Salesforce PWA kit. Enable Customization with Hooks in Salesforce. \n\n\nStep 1: Install the cartridge and import the metadata\nThe npm package for the Composable Storefront integration works together with a cartridge for the Salesforce Commerce Cloud (SFCC) cartridge. The companion cartridge extends your Salesforce Business Manager with additional functionality that lets you use Adyen features that are not supported by the Salesforce B2C Commerce API (SCAPI).\n\nThe metadata files in the cartridge handle the necessary configurations:\n\nPayment configuration: Defines the Adyen payment processor, enabling card payments and various alternative payment methods.\nSystem Object extensions: Extends standard objects like Basket, OrderPaymentInstrument, and PaymentTransaction to store Adyen-specific payment data.\nJob schedules: Includes the jobs that processes pending webhooks, and the jobs that clean up the processed webhooks.\n\nThe cartridge creates custom SCAPI endpoints in the Business Manager to handle payment flows.\n\nNotify endpoint: Receives the incoming Adyen webhook data and securely stores it in the Business Manager for later processing by the scheduled job.\nCreate Order endpoint: Creates an order and assigns it an order number, so that the number can be used when making a payment. This is required for gift card payments.\nGet Order endpoint: Retrieves order details for an order when it is created.\n\nThe cartridge creates a custom SCAPI hook in the Business Manager that automatically generates and manages order numbers to prevent conflicts.\n\nTo set up the cartridge:\n\n\nDownload the cartridge from our GitHub repository.\n\n\nIn your cartridge's root directory, create a dw.json file that includes the information required to establish a server connection and the code version that you want to upload your cartridge to. Read more about WebDAV authentication in the Salesforce documentation.\n\n\n\n\n\nFrom your cartridge's root directory, install Node modules using your command line.\nnpm install\n\n\nRun the following to generate output that is compatible with JavaScript ES5.\nThe source files in the \/src directory use modern Javascript ES6+ syntax and modern tooling that Salesforce Commerce Cloud does not natively support.\nnpm run build\n\n\nTo add new configuration items, import the predefined metadata:\n\nOpen the adyen-salesforce-headless-commerce-pwa\/metadata\/site_import\/sites\/ folder.\nRename the yourSiteId (RefArch) folder to the ID of your site in your Salesforce Business Manager.\nOpen the adyen-salesforce-headless-commerce-pwa\/metadata\/site_import\/jobs.xml file.\nRename the site-id to the ID of your site in your Salesforce Business Manager.\nZip the site_import folder.\nIn the Business Manager, go to Administration &gt; Site Development &gt; Site Import &amp; Export and import the zipped file.\n\n\n\nIn the Business Manager, go to Administration &gt; Sites &gt; Manage Sites &gt; [yourSite] &gt; Settings.\n\n\nIn the Cartridges box, enter int_adyen_PWA, to set up the cartridge path. Select Apply.\n\nStep 2: Build your local PWA app\nTo use Adyen as the payment processor for your PWA app, you need to generate a new PWA project.\n\n\nInitiate the Salesforce PWA Kit starter project with the following command:\n\n\n\nThe command-line interface guides you through the setup. While you set up your project, you are asked to link the generated retail app to a demo sandbox or your own sandbox.\n\nOnly if you link the retail app to your own sandbox, enter the following details at the command prompt when creating the new app:\n\nSandbox URL\nShopper Login and API Access Service (SLAS) client ID\nSite (storefront) ID\nOrganization (Org) ID\nShort code\n\nLaunch your retail app with the following command:\n\n\n\nStep 3: Install the Adyen package in your local PWA app\n\n\nIn the root directory of your PWA app, install the Adyen Salesforce PWA npm package:\n\n\n\n\n\nIn your PWA app, adjust the overrides\/app\/ssr.js file to import Adyen routes. You must import routes in the following order:\n\n\nAdyen routes. Add the following line:\n\n\n\n\n\nDefault Salesforce routes.\n\n\nCustom routes. We recommend you integrate and test the package without customizations first.\n\n\n\n\nIn the overrides\/app folder of your Retail React app:\n\n\nOverride the checkout\/partials\/payment.jsx file to render the AdyenCheckout component from the adyen-salesforce-pwa package. In the next step, you need to configure some required properties for the component.\n\n\n\nSee the file in our example package on GitHub.\n\nOverride the checkout\/confirmation.jsx file to wrap the Salesforce checkout confirmation page with the AdyenCheckout and AdyenCheckoutProvider from the adyen-salesforce-pwa package. See how you can render the components in our GitHub.\nCreate an error page and register it in routes.jsx as checkout\/error. See the example error page on GitHub.\nCreate a redirect page and register it in routes.jsx as checkout\/redirect. See the example redirect page on GitHub.\n\nSee the routes.jsxfile on GitHub to see how you can register pages.\n\n\nIn your package.json file, add the following scripts:\n\n\n\n\n\nRun the integration:\n\n\n\n\nStep 4: Configure the checkout component\nThe AdyenCheckout component requires certain properties. You can use optional properties to customize your integration.\nOn the overrides\/app\/checkout\/partials\/payment.jsx page, where you render the AdyenCheckout component, configure the following properties.\n\n\n\nProperty\nRequired\nDescription\n\n\n\n\nauthToken\n\nThe shopper authentication token. This is used for server-side API calls, such as fetching the basket and communicating between Adyen and Salesforce. Get this from the useAccessToken hook.\n\n\nsite\n\nThe site configuration object from the useMultiSite hook. It includes details like site properties and environment variables needed to query endpoints.\n\n\nlocale\n\nThe locale configuration from the useMultiSite hook, passed from Salesforce, which provides the locale to the component.\n\n\nnavigate\n\nThe navigation function from the useNavigation hook. This function is passed to the component for handling redirection after a payment, for example redirecting to the confirmation page on success, or an error page.\n\n\nbasket\n\nThe current shopper\u2019s basket object from the useCurrentBasket hook. The amount of the basket is used to determine the available payment methods.\n\n\nreturnUrl\n\nURL to where the shopper should be taken back to after a redirection. The URL can contain a maximum of 1024 characters and should include the protocol: http:\/\/ or https:\/\/. You can also include your own additional query parameters, for example, shopper ID or order reference number.  If the URL to return to includes non-ASCII characters, like spaces or special letters, URL encode the value.  The URL must not include personally identifiable information (PII), for example name or email address. \n\n\ncustomerId\n\nThe Customer ID for authenticated users. This is used to display saved payment methods.\n\n\nisCustomerRegistered\n\nWhether the shopper is logged-in. When set to true, if the shopper has saved payment methods, they will be displayed at checkout. The default is false.\n\n\npage\n\nThe page of your PWA storefront where you render the available payment methods. Possible values are checkout, confirmation, or redirect. The default is checkout.\n\n\nbeforeSubmit\n\nA function, or array of functions called before the shopper selects the pay button. Set to false to prevent payment submission.\n\n\nafterSubmit\n\nA function, or array of functions called after the payment is completed. successful payment. Receives the payment result.\n\n\nbeforeAdditionalDetails\n\nA function, or array of functions called before handling additional actions, when a payment method requires more details. For example, for native 3D secure 2 authentication, or a QR code payment method.\n\n\nafterAdditionalDetails\n\nA function, or array of functions called after handling additional actions.\n\n\nonError\n\nA function, or array of functions called when an error occurs.\n\n\nonStateChange\n\nA function, or array of functions called when the payment component state changes. Receives the state object.\n\n\nspinner\n\nCustom loading spinner component in ReactNode format. It is shown when the component is fetching data, for example when the component makes an API call to get the available payment methods.\n\n\ndropinConfiguration\n\nIncludes the additional configuration for Drop-in, and the paymentMethodsConfiguration. Find all the optional configuration fields in in our Weh Drop-in integration guide.\n\n\npaymentMethodsConfiguration\n\nPayment method specific configuration to customize certain payment methods. Our payment method guides show the available configurations for each method.\n\n\ntranslations\n\nA map of keys and strings including custom translations. In this object, specify the locale you want to customize, and add key-value pairs for the text you want to customize. We include UI localizations for some languages. The fields and text are in the files for the included locales in Drop-in.\n\n\n\n\n    \nStep 5 (Optional): Handle the browser back button\nFor a better user experience when shoppers navigate away from a redirect payment page, you can implement the following hooks:\n\n\nuseHandleBackNavigation: This hook handles the cleanup when a shopper uses the browser's back button to navigate from a redirect payment page back to the checkout page, to prevent orphaned orders and ensure proper state management.\nThe flow is as follows: The hook detects the navigation change and automatically calls the backend cleanup endpoint. This fails any pending Salesforce orders and recreates the basket. The shopper can return to the checkout later without conflicts.\n\n\nuseCheckoutErrorRecovery: This hook detects checkout failures, refetches the basket, and forces a clean remount of the AdyenCheckout component.\nThe flow is as follows: When a payment fails, the backend automatically fails the Salesforce order, creates a new basket with the same items, and redirects to \/checkout?newBasketId={newBasketId}. The hook detects the newBasketId and automatically navigates to \/checkout?error=true, refetches the basket with the newly created basket data, and increments adyenCheckoutKey to force a clean remount. The shopper sees a clean checkout state with the recreated basket.\n\n\nImplementing these hooks is recommended. They work with the standard checkout flow as well as the express checkout flow.\nTo implement these hooks:\n\n\nImport the hooks.\nimport {\n  useHandleBackNavigation,\n  useCheckoutErrorRecovery\n} from '@adyen\/adyen-salesforce-pwa'\n\n\nTo handle the back navigation cleanup, add useHandleBackNavigation to your checkout page component, specifying the following properties for this hook:\n\n\n\nProperty\nType\nRequired\nDescription\n\n\n\n\nauthToken\nString\n\nThe customer authentication token.\n\n\ncustomerId\nString\n\nThe ID of the customer.\n\n\nbasketId\nString\n\nThe ID of the current basket.\n\n\nsite\nObject\n\nThe site configuration object.\n\n\nnavigate\nFunction\n\nThe React Router navigate function.\n\n\n\nconst CheckoutPage = () =&gt; {\n  const {data: basket, refetch: refetchBasket} = useCurrentBasket()\n  const customerId = useCustomerId()\n  const {getTokenWhenReady} = useAccessToken()\n  const navigate = useNavigation()\n  const {locale, site} = useMultiSite()\n  const [authToken, setAuthToken] = useState()\n\n  useEffect(() =&gt; {\n      const getToken = async () =&gt; {\n          const token = await getTokenWhenReady()\n          setAuthToken(token)\n      }\n      getToken()\n  }, [])\n\n  \/\/ Handle browser back navigation cleanup\n  useHandleBackNavigation({\n      authToken,\n      customerId,\n      basketId: basket?.basketId,\n      site,\n      navigate\n  })\n\n  \/\/ ... rest of component\n}\n\n\nTo handle checkout error recovery, add useCheckoutErrorRecovery to your payment component, specifying the following properties for this hook:\n\n\n\nProperty\nType\nRequired\nDescription\n\n\n\n\nrefetchBasket\nFunction\n\nThe function to refetch the current basket.\n\n\nnavigate\nFunction\n\nThe React Router navigate function.\n\n\n\nconst Payment = () =&gt; {\n  const {data: basket, refetch: refetchBasket} = useCurrentBasket()\n  const navigate = useNavigation()\n\n  const {adyenCheckoutKey, isRefetchingBasket} = useCheckoutErrorRecovery({\n      refetchBasket,\n      navigate\n  })\n\n  return (\n      &lt;AdyenCheckout\n          key={adyenCheckoutKey}  \/\/ Forces remount on error recovery\n          \/\/ ... other props\n      \/&gt;\n  )\n}\nThe useCheckoutErrorRecovery hook returns the following:\n\n\n\nReturn value\nType\nDescription\n\n\n\n\nadyenCheckoutKey\nNumber\nA key to force a remount of AdyenCheckout.\n\n\nisRefetchingBasket\nBoolean\nThe loading state while the basket is refetched.\n\n\n\n\nStep 6: Set up locales in your PWA app\nThe config\/default.js file in the PWA Retail React app contains the locale definitions for your sites. You need to update this file with the locales you want to support in your Salesforce Commerce Cloud site:\n\n\nIn the PWA Retail React app package, go to the config\/default.js file.\n\n\nSet the following fields:\n\n\n\nField\nDescription\n\n\n\n\nsupportedCurrencies\nThe array of all currencies for the locales you have set up.\n\n\ndefaultCurrency\nThe default currency for your site.\n\n\ndefaultLocale\nThe default locale for your site.\n\n\nsupportedLocales\nThe array for all locale objects. Each locale object consists of:  id: the locale ID, for example en-US.  preferredCurrency: the currency for the locale, for example: USD.   alias (optional): You can use this attribute if you want to use other string instead of the id.  \n\n\n\n\nSee the PWA integration with the Adyen package on GitHub to see an example locale configuration.\n\n\n\nIn the config\/default.js file, change the local attribute from none to query_param or path to display the locale in the URL.\n\n\nOnly if you defined the alias field for locales, in the config\/default.js file, remove the comment markers for siteAliases, and provide the aliases for your sites.\n\nStep 7: Generate an Adyen API Key\nIf you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you do not have to generate a new API Key and you can skip this step.\nTo connect your PWA store to the Adyen APIs, you need to generate an API key in your Adyen Customer Area and add it to the package configuration when you set environment variables in a later step.\n\nLog in to your Customer Area and select your Company account.\nGo to Developers &gt; API credentials.\nSelect the Payments or Platforms tab, depending on your integration type.\nSelect the credential username.\nUnder Server settings &gt; Authentication select the API key tab.\nSelect Generate API key.\nSelect the copy icon  and store your API key securely in your system.\n\nYou cannot copy the API key again after you leave the page.\n\nSelect Save changes.\nStep 8: Set up webhooks\nAdyen uses webhooks to inform your Salesforce Commerce Cloud store of payment status changes.\nIn Salesforce Commerce Cloud, webhooks are stored as custom objects that get processed by scheduled jobs. The jobs and custom objects are set by the int_adyen_PWA cartridge that you installed. You first need to set up webhooks in the Adyen Customer Area, then you can configure the jobs to process the webhooks in Salesforce.\nSet up webhooks in the Customer Area\n\n\nIn your Customer Area, go to Developers\u00a0&gt;\u00a0 Webhooks. If you want to configure webhooks for a merchant account, switch to that merchant account.\n\n\nSelect  Webhook.\n\n\nFrom the list of webhooks, next to Standard webhook, select Add.\n\n\nUnder General, configure the following:\n\n\n\nSetting\nDescription\n\n\n\n\nEnabled\nSelect the toggle to enable or disable the webhook.\n\n\nVersion\nThe webhook version.\n\n\nDescription\nYour description of the webhook.\n\n\n\n\n\nUnder Server configuration, configure the following:\n\n\n\nSetting\nDescription\n\n\n\n\nURL\nYour website URL followed by \/api\/adyen\/webhook?siteId=YOUR_SITE_ID.\n\n\nMethod\nJSON\n\n\nEncryption protocol\nTLSv1.3\n\n\n\n\n\nUnder Security, configure the following:\n\n\n\nSetting\nDescription\n\n\n\n\nBasic authentication\nEnter your server's username and password. You need to enter these credentials when setting environment variables later.\n\n\nHMAC Key\nGenerate the HMAC Key, copy it, and store it securely in your system. You need to enter the key when setting environment variables later.  Learn more about verifying HMAC signatures.\n\n\n\n\n\nUnder Events settings, select the checkbox for the OFFER_CLOSED event code.\n\n\nIf the Additional settings section is available, optionally select the additional information you want to receive in this webhook. Some webhook types do not support more than one event code, so this section does not appear.\n\n\nSelect Save configuration.\n\n\nThe package implements the  AUTHORISATION webhook by default. If you want to receive webhooks for more payment events, you can customize your integration after you have successfully deployed your application in MRT and completed testing without any customizations.\n\nYou cannot test Adyen webhooks on localhost.\n\nConfigure scheduled jobs in Salesforce\nWebhooks are stored in Salesforce Commerce Cloud as custom object instances to be processed by scheduled jobs.\nAfter the metadata import, a scheduled job with ID Process is added to the Salesforce Business Manager &gt; Administration &gt; Operations &gt; Jobs. This scheduled job has two steps that you can check under Job Steps.\n\nProcess \u2013 Processes the webhook and updates the payment status of the order.\nClean \u2013  Deletes the custom object instance, once it has been processed.\n\nTo optimize the processing of your instances, we recommend that you set the frequency of this scheduled job to 1 minute:\n\nGo to the Schedule and History tab for the Process scheduled job.\nSet Trigger to Recurring Interval.\nIn the Run Time pane, set Amount to 1, and Interval to Minutes.\nStep 9: Deploy your application in Managed Runtime\nSalesforce's Managed Runtime (MRT) provides the infrastructure to deploy, host, and monitor your PWA Kit application.\nManaged Runtime only supports applications created from a PWA Kit template and has a separate admin dashboard. Before you can use MRT and Runtime Admin, Salesforce must enable it for your organization. To enable MRT and Runtime Admin for your organization, reach out to your Salesforce account team.\nWhen building your storefront, keep the constraints of MRT environments in mind.\n1. Create a new project in Managed Runtime\nFollow the steps to create a project in Runtime Admin. Use the following details for your project:\n\n\n\nField\nValue\n\n\n\n\nProject Name\nadyen-salesforce-headless-commerce-pwa\n\n\nProject ID\nProject IDs must match the package name in the package.json file and can not be longer than 20 characters.\n\n\nScopes\nThe list of scopes that are used to fetch baskets and create orders.\n\n\n\n2. Set up the MRT environment\nSet up an environment to separate your production storefront from other storefronts, such as development or testing storefronts. Refer to environments in Salesforce docs to learn more about environments.\n\nFollow the steps to create an environment in Salesforce Docs.\nName: use your Sandbox Org ID to easily identify an environment that belongs to a sandbox, and to create variables correctly for each environment.\nRegion: we recommend to set your MRT region to the same region that your Salesforce sandbox uses.\n\nYour Composable Storefront integration with Adyen can only have one region connected to one MRT organization, one SFCC site, and one Adyen Customer Area account.\n\n\n3. Set the environment variables\n\nIn your MRT environment, navigate to your project by selecting your Organization and Project.\nSelect Environment Variables.\n\nSpecify the values for the following variables:\n\nWhen a variable contains YOUR_SITE_ID, replace it with the same value as your Commerce API site ID.\n\n\n\n\nVariable\nRequired\nDescription\n\n\n\n\nYOUR_SITE_ID_ADYEN_API_KEY\n\nYour Adyen API key.\n\n\nYOUR_SITE_ID_ADYEN_MERCHANT_ACCOUNT\n\nYour Adyen merchant account name.\n\n\nYOUR_SITE_ID_ADYEN_CLIENT_KEY\n\nYour Adyen client key.\n\n\nYOUR_SITE_ID_ADYEN_ENVIRONMENT\n\nUse test. When you are ready to accept live payments, change the value to live.\n\n\nYOUR_SITE_ID_ADYEN_WEBHOOK_USER\n\nThe basic authentication username you entered when you set up webhooks.\n\n\nYOUR_SITE_ID_ADYEN_WEBHOOK_PASSWORD\n\nThe basic authentication password you entered when you set up webhooks.\n\n\nYOUR_SITE_ID_ADYEN_HMAC_KEY\n\nThe HMAC key you generated when you set up webhooks.\n\n\nYOUR_SITE_ID_ADYEN_LIVE_URL_PREFIX\nOnly for Live  environment\nYour live URL prefix to process live transactions.\n\n\nYOUR_SITE_ID_ADYEN_APPLE_DOMAIN_ASSOCIATION\n\nIf you want to offer Apple Pay as a payment method in the live environment, set to the domain association file value.\n\n\nYOUR_SITE_ID_SYSTEM_INTEGRATOR_NAME\n\nThe name of your system integrator.\n\n\nCOMMERCE_API_CLIENT_ID\n\nYour MRT Commerce API client ID.\n\n\nCOMMERCE_API_ORG_ID\n\nYour MRT Commerce API Org ID.\n\n\nCOMMERCE_API_SHORT_CODE\n\nYour MRT Commerce API short code.\n\n\nCOMMERCE_API_SITE_ID\n\nYour Salesforce site ID, for example, RefArch.\n\n\nCOMMERCE_API_DEFAULT_SITE\n\nYour default Salesforce site, for example, RefArch.\n\n\nSCAPI_URL\n\nYour Salesforce Commerce API URL. Refer to Salesforce documentation for more information.\n\n\nOCAPI_URL\n\nYour Open Commerce API Url. Refer to Salesforce documentation for more information.\n\n\nENVIRONMENT_ID\n\nYour MRT environment ID.\n\n\nPROJECT_ID\n\nYour project ID, for example, adyen-salesforce-pwa.\n\n\nCOMMERCE_API_CLIENT_ID_PRIVATE\n\nYour Salesforce Commerce API client ID. To get your API credentials, create an API client in Salesforce.\n\n\nCOMMERCE_API_CLIENT_SECRET\n\nYour Commerce API client secret for your Salesforce API client.\n\n\nSFCC_REALM_ID\n\nYour SFCC realm ID.\n\n\nSFCC_INSTANCE_ID\n\nYour SFCC instance ID.\n\n\nSFCC_OAUTH_SCOPES\n\nThe custom Adyen SCAPI scopes, for example, c_order_rw c_notify_rw, and your SFCC oauth scopes, for example, sfcc.orders sfcc.orders.rw. You also need to add this in your Salesforce Account Manager &gt; API Client &gt; OpenID Connect &gt; Allowed Scopes. Refer to Salesforce documentation to learn more about authorization scopes.\n\n\nYOUR_SITE_ID_GIFT_CARD_EXPIRATION_TIME\n\nFor partial payments with gift cards, the expiration time after an order is created, in minutes. The default is 30.\n\n\n\n\nWhen going live, you need to update some variables you have entered with values from your live Customer Area.\n\n\n\n4. Deploy your project to MRT\nTo run your application, you must deploy your application to MRT and to the environment you have set up. You also need a Personal MRT API Key.\n\n\nFollow the steps to generate a Personal MRT API key in Salesforce Docs.\n\n\nIn your Retail React App, save your credentials:\n\n\n\n\n\nPush your build to MRT:\n\n\n\n\n\nFollow the steps to deploy the bundle in Salesforce Docs to the environment you have created.\n\nStep 10 (Optional): Import the Adyen country\/region list\nSalesforce allows you to add your list of countries\/regions for shipping. Optionally, you can use our default list.\nTo use our country\/region list, in your PWA Retail React app, import the Adyen countrylist and export it as SHIPPING_COUNTRY_CODES in the constants.js file:\n\n    \nMigrate pages\nIf you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you need to migrate your store pages. If you do not have an SFCC integration with Adyen already, you can start testing.\nYou can perform Phased Headless Rollouts to migrate your SFRA or SiteGenesis pages in a phased approach.\n\nThe Adyen package uses version 8 of the Retail React App with template extensibility. To filter out links to non-PWA kit pages, you can override the overrides\/app\/routes.jsx file. Salesforce has sample code on GitHub that shows how to override.\n\n\nIf you are migrating the checkout page last, you need to route traffic to your SFRA checkout page from your PWA integration. To learn how to apply routing, refer to Salesforce Docs.\nTesting\nAfter you have installed and configured the package, use our test cards to test payments.\nCheck the status of test payments in your Customer Area &gt; Transactions &gt; Payments.Next steps\n\nrequiredSet up payment methodsSet up the payment methods that you want to offer in your Salesforce Composable Storefront.CustomizeCheck our customization guide to learn how you can modify your integration..\n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Plugins","lvl2":"Salesforce Commerce Cloud - B2C Commerce","lvl3":"Composable Storefront package","lvl4":"Set up your Composable Storefront with Adyen"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/plugins","lvl2":"https:\/\/docs.adyen.com\/pt\/plugins\/salesforce-commerce-cloud","lvl3":"https:\/\/docs.adyen.com\/pt\/plugins\/salesforce-commerce-cloud\/composable-storefront","lvl4":"\/pt\/plugins\/salesforce-commerce-cloud\/composable-storefront\/install-and-set-up-the-package"},"levels":5,"category":"Plugins","category_color":"green","tags":["Composable","Storefront","Adyen"]},{"url":"https:\/\/docs.adyen.com\/pt\/plugins\/salesforce-commerce-cloud\/composable-storefront\/install-and-set-up-the-package?plugin=Salesforce Composable Storefront&integration=package","title":"Salesforce Composable Storefront package","content":"Requirements\nBefore you begin, take into account the following requirements, limitations, and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nUse this page to build an integration with our Salesforce Composable Storefront package.\n\n\nSupported versions\n Salesforce PWA Kit v3.12.0 and later Node v22 or later npm v11 or later\n\n\nSetup steps\nBefore you begin, complete the following steps on the Salesforce side:  Set up a Salesforce sandbox connected to your Salesforce Commerce Cloud (SFCC) instance. Set up your environments, sites, locales and currencies, and product inventories.   Set up your WebDAV authentication credentials. Reach out to your Salesforce account team and enable Managed Runtime (MRT) on your SFCC instance. Set your MRT permissions to Admin.Review the configuration file structure of the Salesforce PWA kit. Enable Customization with Hooks in Salesforce. \n\n\nStep 1: Install the cartridge and import the metadata\nThe npm package for the Composable Storefront integration works together with a cartridge for the Salesforce Commerce Cloud (SFCC) cartridge. The companion cartridge extends your Salesforce Business Manager with additional functionality that lets you use Adyen features that are not supported by the Salesforce B2C Commerce API (SCAPI).\n\nThe metadata files in the cartridge handle the necessary configurations:\n\nPayment configuration: Defines the Adyen payment processor, enabling card payments and various alternative payment methods.\nSystem Object extensions: Extends standard objects like Basket, OrderPaymentInstrument, and PaymentTransaction to store Adyen-specific payment data.\nJob schedules: Includes the jobs that processes pending webhooks, and the jobs that clean up the processed webhooks.\n\nThe cartridge creates custom SCAPI endpoints in the Business Manager to handle payment flows.\n\nNotify endpoint: Receives the incoming Adyen webhook data and securely stores it in the Business Manager for later processing by the scheduled job.\nCreate Order endpoint: Creates an order and assigns it an order number, so that the number can be used when making a payment. This is required for gift card payments.\nGet Order endpoint: Retrieves order details for an order when it is created.\n\nThe cartridge creates a custom SCAPI hook in the Business Manager that automatically generates and manages order numbers to prevent conflicts.\n\nTo set up the cartridge:\n\n\nDownload the cartridge from our GitHub repository.\n\n\nIn your cartridge's root directory, create a dw.json file that includes the information required to establish a server connection and the code version that you want to upload your cartridge to. Read more about WebDAV authentication in the Salesforce documentation.\n\n\n\n\n\nFrom your cartridge's root directory, install Node modules using your command line.\nnpm install\n\n\nRun the following to generate output that is compatible with JavaScript ES5.\nThe source files in the \/src directory use modern Javascript ES6+ syntax and modern tooling that Salesforce Commerce Cloud does not natively support.\nnpm run build\n\n\nTo add new configuration items, import the predefined metadata:\n\nOpen the adyen-salesforce-headless-commerce-pwa\/metadata\/site_import\/sites\/ folder.\nRename the yourSiteId (RefArch) folder to the ID of your site in your Salesforce Business Manager.\nOpen the adyen-salesforce-headless-commerce-pwa\/metadata\/site_import\/jobs.xml file.\nRename the site-id to the ID of your site in your Salesforce Business Manager.\nZip the site_import folder.\nIn the Business Manager, go to Administration &gt; Site Development &gt; Site Import &amp; Export and import the zipped file.\n\n\n\nIn the Business Manager, go to Administration &gt; Sites &gt; Manage Sites &gt; [yourSite] &gt; Settings.\n\n\nIn the Cartridges box, enter int_adyen_PWA, to set up the cartridge path. Select Apply.\n\nStep 2: Build your local PWA app\nTo use Adyen as the payment processor for your PWA app, you need to generate a new PWA project.\n\n\nInitiate the Salesforce PWA Kit starter project with the following command:\n\n\n\nThe command-line interface guides you through the setup. While you set up your project, you are asked to link the generated retail app to a demo sandbox or your own sandbox.\n\nOnly if you link the retail app to your own sandbox, enter the following details at the command prompt when creating the new app:\n\nSandbox URL\nShopper Login and API Access Service (SLAS) client ID\nSite (storefront) ID\nOrganization (Org) ID\nShort code\n\nLaunch your retail app with the following command:\n\n\n\nStep 3: Install the Adyen package in your local PWA app\n\n\nIn the root directory of your PWA app, install the Adyen Salesforce PWA npm package:\n\n\n\n\n\nIn your PWA app, adjust the overrides\/app\/ssr.js file to import Adyen routes. You must import routes in the following order:\n\n\nAdyen routes. Add the following line:\n\n\n\n\n\nDefault Salesforce routes.\n\n\nCustom routes. We recommend you integrate and test the package without customizations first.\n\n\n\n\nIn the overrides\/app folder of your Retail React app:\n\n\nOverride the checkout\/partials\/payment.jsx file to render the AdyenCheckout component from the adyen-salesforce-pwa package. In the next step, you need to configure some required properties for the component.\n\n\n\nSee the file in our example package on GitHub.\n\nOverride the checkout\/confirmation.jsx file to wrap the Salesforce checkout confirmation page with the AdyenCheckout and AdyenCheckoutProvider from the adyen-salesforce-pwa package. See how you can render the components in our GitHub.\nCreate an error page and register it in routes.jsx as checkout\/error. See the example error page on GitHub.\nCreate a redirect page and register it in routes.jsx as checkout\/redirect. See the example redirect page on GitHub.\n\nSee the routes.jsxfile on GitHub to see how you can register pages.\n\n\nIn your package.json file, add the following scripts:\n\n\n\n\n\nRun the integration:\n\n\n\n\nStep 4: Configure the checkout component\nThe AdyenCheckout component requires certain properties. You can use optional properties to customize your integration.\nOn the overrides\/app\/checkout\/partials\/payment.jsx page, where you render the AdyenCheckout component, configure the following properties.\n\n\n\nProperty\nRequired\nDescription\n\n\n\n\nauthToken\n\nThe shopper authentication token. This is used for server-side API calls, such as fetching the basket and communicating between Adyen and Salesforce. Get this from the useAccessToken hook.\n\n\nsite\n\nThe site configuration object from the useMultiSite hook. It includes details like site properties and environment variables needed to query endpoints.\n\n\nlocale\n\nThe locale configuration from the useMultiSite hook, passed from Salesforce, which provides the locale to the component.\n\n\nnavigate\n\nThe navigation function from the useNavigation hook. This function is passed to the component for handling redirection after a payment, for example redirecting to the confirmation page on success, or an error page.\n\n\nbasket\n\nThe current shopper\u2019s basket object from the useCurrentBasket hook. The amount of the basket is used to determine the available payment methods.\n\n\nreturnUrl\n\nURL to where the shopper should be taken back to after a redirection. The URL can contain a maximum of 1024 characters and should include the protocol: http:\/\/ or https:\/\/. You can also include your own additional query parameters, for example, shopper ID or order reference number.  If the URL to return to includes non-ASCII characters, like spaces or special letters, URL encode the value.  The URL must not include personally identifiable information (PII), for example name or email address. \n\n\ncustomerId\n\nThe Customer ID for authenticated users. This is used to display saved payment methods.\n\n\nisCustomerRegistered\n\nWhether the shopper is logged-in. When set to true, if the shopper has saved payment methods, they will be displayed at checkout. The default is false.\n\n\npage\n\nThe page of your PWA storefront where you render the available payment methods. Possible values are checkout, confirmation, or redirect. The default is checkout.\n\n\nbeforeSubmit\n\nA function, or array of functions called before the shopper selects the pay button. Set to false to prevent payment submission.\n\n\nafterSubmit\n\nA function, or array of functions called after the payment is completed. successful payment. Receives the payment result.\n\n\nbeforeAdditionalDetails\n\nA function, or array of functions called before handling additional actions, when a payment method requires more details. For example, for native 3D secure 2 authentication, or a QR code payment method.\n\n\nafterAdditionalDetails\n\nA function, or array of functions called after handling additional actions.\n\n\nonError\n\nA function, or array of functions called when an error occurs.\n\n\nonStateChange\n\nA function, or array of functions called when the payment component state changes. Receives the state object.\n\n\nspinner\n\nCustom loading spinner component in ReactNode format. It is shown when the component is fetching data, for example when the component makes an API call to get the available payment methods.\n\n\ndropinConfiguration\n\nIncludes the additional configuration for Drop-in, and the paymentMethodsConfiguration. Find all the optional configuration fields in in our Weh Drop-in integration guide.\n\n\npaymentMethodsConfiguration\n\nPayment method specific configuration to customize certain payment methods. Our payment method guides show the available configurations for each method.\n\n\ntranslations\n\nA map of keys and strings including custom translations. In this object, specify the locale you want to customize, and add key-value pairs for the text you want to customize. We include UI localizations for some languages. The fields and text are in the files for the included locales in Drop-in.\n\n\n\n\n    \nStep 5 (Optional): Handle the browser back button\nFor a better user experience when shoppers navigate away from a redirect payment page, you can implement the following hooks:\n\n\nuseHandleBackNavigation: This hook handles the cleanup when a shopper uses the browser's back button to navigate from a redirect payment page back to the checkout page, to prevent orphaned orders and ensure proper state management.\nThe flow is as follows: The hook detects the navigation change and automatically calls the backend cleanup endpoint. This fails any pending Salesforce orders and recreates the basket. The shopper can return to the checkout later without conflicts.\n\n\nuseCheckoutErrorRecovery: This hook detects checkout failures, refetches the basket, and forces a clean remount of the AdyenCheckout component.\nThe flow is as follows: When a payment fails, the backend automatically fails the Salesforce order, creates a new basket with the same items, and redirects to \/checkout?newBasketId={newBasketId}. The hook detects the newBasketId and automatically navigates to \/checkout?error=true, refetches the basket with the newly created basket data, and increments adyenCheckoutKey to force a clean remount. The shopper sees a clean checkout state with the recreated basket.\n\n\nImplementing these hooks is recommended. They work with the standard checkout flow as well as the express checkout flow.\nTo implement these hooks:\n\n\nImport the hooks.\nimport {\n  useHandleBackNavigation,\n  useCheckoutErrorRecovery\n} from '@adyen\/adyen-salesforce-pwa'\n\n\nTo handle the back navigation cleanup, add useHandleBackNavigation to your checkout page component, specifying the following properties for this hook:\n\n\n\nProperty\nType\nRequired\nDescription\n\n\n\n\nauthToken\nString\n\nThe customer authentication token.\n\n\ncustomerId\nString\n\nThe ID of the customer.\n\n\nbasketId\nString\n\nThe ID of the current basket.\n\n\nsite\nObject\n\nThe site configuration object.\n\n\nnavigate\nFunction\n\nThe React Router navigate function.\n\n\n\nconst CheckoutPage = () =&gt; {\n  const {data: basket, refetch: refetchBasket} = useCurrentBasket()\n  const customerId = useCustomerId()\n  const {getTokenWhenReady} = useAccessToken()\n  const navigate = useNavigation()\n  const {locale, site} = useMultiSite()\n  const [authToken, setAuthToken] = useState()\n\n  useEffect(() =&gt; {\n      const getToken = async () =&gt; {\n          const token = await getTokenWhenReady()\n          setAuthToken(token)\n      }\n      getToken()\n  }, [])\n\n  \/\/ Handle browser back navigation cleanup\n  useHandleBackNavigation({\n      authToken,\n      customerId,\n      basketId: basket?.basketId,\n      site,\n      navigate\n  })\n\n  \/\/ ... rest of component\n}\n\n\nTo handle checkout error recovery, add useCheckoutErrorRecovery to your payment component, specifying the following properties for this hook:\n\n\n\nProperty\nType\nRequired\nDescription\n\n\n\n\nrefetchBasket\nFunction\n\nThe function to refetch the current basket.\n\n\nnavigate\nFunction\n\nThe React Router navigate function.\n\n\n\nconst Payment = () =&gt; {\n  const {data: basket, refetch: refetchBasket} = useCurrentBasket()\n  const navigate = useNavigation()\n\n  const {adyenCheckoutKey, isRefetchingBasket} = useCheckoutErrorRecovery({\n      refetchBasket,\n      navigate\n  })\n\n  return (\n      &lt;AdyenCheckout\n          key={adyenCheckoutKey}  \/\/ Forces remount on error recovery\n          \/\/ ... other props\n      \/&gt;\n  )\n}\nThe useCheckoutErrorRecovery hook returns the following:\n\n\n\nReturn value\nType\nDescription\n\n\n\n\nadyenCheckoutKey\nNumber\nA key to force a remount of AdyenCheckout.\n\n\nisRefetchingBasket\nBoolean\nThe loading state while the basket is refetched.\n\n\n\n\nStep 6: Set up locales in your PWA app\nThe config\/default.js file in the PWA Retail React app contains the locale definitions for your sites. You need to update this file with the locales you want to support in your Salesforce Commerce Cloud site:\n\n\nIn the PWA Retail React app package, go to the config\/default.js file.\n\n\nSet the following fields:\n\n\n\nField\nDescription\n\n\n\n\nsupportedCurrencies\nThe array of all currencies for the locales you have set up.\n\n\ndefaultCurrency\nThe default currency for your site.\n\n\ndefaultLocale\nThe default locale for your site.\n\n\nsupportedLocales\nThe array for all locale objects. Each locale object consists of:  id: the locale ID, for example en-US.  preferredCurrency: the currency for the locale, for example: USD.   alias (optional): You can use this attribute if you want to use other string instead of the id.  \n\n\n\n\nSee the PWA integration with the Adyen package on GitHub to see an example locale configuration.\n\n\n\nIn the config\/default.js file, change the local attribute from none to query_param or path to display the locale in the URL.\n\n\nOnly if you defined the alias field for locales, in the config\/default.js file, remove the comment markers for siteAliases, and provide the aliases for your sites.\n\nStep 7: Generate an Adyen API Key\nIf you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you do not have to generate a new API Key and you can skip this step.\nTo connect your PWA store to the Adyen APIs, you need to generate an API key in your Adyen Customer Area and add it to the package configuration when you set environment variables in a later step.\n\nLog in to your Customer Area and select your Company account.\nGo to Developers &gt; API credentials.\nSelect the Payments or Platforms tab, depending on your integration type.\nSelect the credential username.\nUnder Server settings &gt; Authentication select the API key tab.\nSelect Generate API key.\nSelect the copy icon  and store your API key securely in your system.\n\nYou cannot copy the API key again after you leave the page.\n\nSelect Save changes.\nStep 8: Set up webhooks\nAdyen uses webhooks to inform your Salesforce Commerce Cloud store of payment status changes.\nIn Salesforce Commerce Cloud, webhooks are stored as custom objects that get processed by scheduled jobs. The jobs and custom objects are set by the int_adyen_PWA cartridge that you installed. You first need to set up webhooks in the Adyen Customer Area, then you can configure the jobs to process the webhooks in Salesforce.\nSet up webhooks in the Customer Area\n\n\nIn your Customer Area, go to Developers\u00a0&gt;\u00a0 Webhooks. If you want to configure webhooks for a merchant account, switch to that merchant account.\n\n\nSelect  Webhook.\n\n\nFrom the list of webhooks, next to Standard webhook, select Add.\n\n\nUnder General, configure the following:\n\n\n\nSetting\nDescription\n\n\n\n\nEnabled\nSelect the toggle to enable or disable the webhook.\n\n\nVersion\nThe webhook version.\n\n\nDescription\nYour description of the webhook.\n\n\n\n\n\nUnder Server configuration, configure the following:\n\n\n\nSetting\nDescription\n\n\n\n\nURL\nYour website URL followed by \/api\/adyen\/webhook?siteId=YOUR_SITE_ID.\n\n\nMethod\nJSON\n\n\nEncryption protocol\nTLSv1.3\n\n\n\n\n\nUnder Security, configure the following:\n\n\n\nSetting\nDescription\n\n\n\n\nBasic authentication\nEnter your server's username and password. You need to enter these credentials when setting environment variables later.\n\n\nHMAC Key\nGenerate the HMAC Key, copy it, and store it securely in your system. You need to enter the key when setting environment variables later.  Learn more about verifying HMAC signatures.\n\n\n\n\n\nUnder Events settings, select the checkbox for the OFFER_CLOSED event code.\n\n\nIf the Additional settings section is available, optionally select the additional information you want to receive in this webhook. Some webhook types do not support more than one event code, so this section does not appear.\n\n\nSelect Save configuration.\n\n\nThe package implements the  AUTHORISATION webhook by default. If you want to receive webhooks for more payment events, you can customize your integration after you have successfully deployed your application in MRT and completed testing without any customizations.\n\nYou cannot test Adyen webhooks on localhost.\n\nConfigure scheduled jobs in Salesforce\nWebhooks are stored in Salesforce Commerce Cloud as custom object instances to be processed by scheduled jobs.\nAfter the metadata import, a scheduled job with ID Process is added to the Salesforce Business Manager &gt; Administration &gt; Operations &gt; Jobs. This scheduled job has two steps that you can check under Job Steps.\n\nProcess \u2013 Processes the webhook and updates the payment status of the order.\nClean \u2013  Deletes the custom object instance, once it has been processed.\n\nTo optimize the processing of your instances, we recommend that you set the frequency of this scheduled job to 1 minute:\n\nGo to the Schedule and History tab for the Process scheduled job.\nSet Trigger to Recurring Interval.\nIn the Run Time pane, set Amount to 1, and Interval to Minutes.\nStep 9: Deploy your application in Managed Runtime\nSalesforce's Managed Runtime (MRT) provides the infrastructure to deploy, host, and monitor your PWA Kit application.\nManaged Runtime only supports applications created from a PWA Kit template and has a separate admin dashboard. Before you can use MRT and Runtime Admin, Salesforce must enable it for your organization. To enable MRT and Runtime Admin for your organization, reach out to your Salesforce account team.\nWhen building your storefront, keep the constraints of MRT environments in mind.\n1. Create a new project in Managed Runtime\nFollow the steps to create a project in Runtime Admin. Use the following details for your project:\n\n\n\nField\nValue\n\n\n\n\nProject Name\nadyen-salesforce-headless-commerce-pwa\n\n\nProject ID\nProject IDs must match the package name in the package.json file and can not be longer than 20 characters.\n\n\nScopes\nThe list of scopes that are used to fetch baskets and create orders.\n\n\n\n2. Set up the MRT environment\nSet up an environment to separate your production storefront from other storefronts, such as development or testing storefronts. Refer to environments in Salesforce docs to learn more about environments.\n\nFollow the steps to create an environment in Salesforce Docs.\nName: use your Sandbox Org ID to easily identify an environment that belongs to a sandbox, and to create variables correctly for each environment.\nRegion: we recommend to set your MRT region to the same region that your Salesforce sandbox uses.\n\nYour Composable Storefront integration with Adyen can only have one region connected to one MRT organization, one SFCC site, and one Adyen Customer Area account.\n\n\n3. Set the environment variables\n\nIn your MRT environment, navigate to your project by selecting your Organization and Project.\nSelect Environment Variables.\n\nSpecify the values for the following variables:\n\nWhen a variable contains YOUR_SITE_ID, replace it with the same value as your Commerce API site ID.\n\n\n\n\nVariable\nRequired\nDescription\n\n\n\n\nYOUR_SITE_ID_ADYEN_API_KEY\n\nYour Adyen API key.\n\n\nYOUR_SITE_ID_ADYEN_MERCHANT_ACCOUNT\n\nYour Adyen merchant account name.\n\n\nYOUR_SITE_ID_ADYEN_CLIENT_KEY\n\nYour Adyen client key.\n\n\nYOUR_SITE_ID_ADYEN_ENVIRONMENT\n\nUse test. When you are ready to accept live payments, change the value to live.\n\n\nYOUR_SITE_ID_ADYEN_WEBHOOK_USER\n\nThe basic authentication username you entered when you set up webhooks.\n\n\nYOUR_SITE_ID_ADYEN_WEBHOOK_PASSWORD\n\nThe basic authentication password you entered when you set up webhooks.\n\n\nYOUR_SITE_ID_ADYEN_HMAC_KEY\n\nThe HMAC key you generated when you set up webhooks.\n\n\nYOUR_SITE_ID_ADYEN_LIVE_URL_PREFIX\nOnly for Live  environment\nYour live URL prefix to process live transactions.\n\n\nYOUR_SITE_ID_ADYEN_APPLE_DOMAIN_ASSOCIATION\n\nIf you want to offer Apple Pay as a payment method in the live environment, set to the domain association file value.\n\n\nYOUR_SITE_ID_SYSTEM_INTEGRATOR_NAME\n\nThe name of your system integrator.\n\n\nCOMMERCE_API_CLIENT_ID\n\nYour MRT Commerce API client ID.\n\n\nCOMMERCE_API_ORG_ID\n\nYour MRT Commerce API Org ID.\n\n\nCOMMERCE_API_SHORT_CODE\n\nYour MRT Commerce API short code.\n\n\nCOMMERCE_API_SITE_ID\n\nYour Salesforce site ID, for example, RefArch.\n\n\nCOMMERCE_API_DEFAULT_SITE\n\nYour default Salesforce site, for example, RefArch.\n\n\nSCAPI_URL\n\nYour Salesforce Commerce API URL. Refer to Salesforce documentation for more information.\n\n\nOCAPI_URL\n\nYour Open Commerce API Url. Refer to Salesforce documentation for more information.\n\n\nENVIRONMENT_ID\n\nYour MRT environment ID.\n\n\nPROJECT_ID\n\nYour project ID, for example, adyen-salesforce-pwa.\n\n\nCOMMERCE_API_CLIENT_ID_PRIVATE\n\nYour Salesforce Commerce API client ID. To get your API credentials, create an API client in Salesforce.\n\n\nCOMMERCE_API_CLIENT_SECRET\n\nYour Commerce API client secret for your Salesforce API client.\n\n\nSFCC_REALM_ID\n\nYour SFCC realm ID.\n\n\nSFCC_INSTANCE_ID\n\nYour SFCC instance ID.\n\n\nSFCC_OAUTH_SCOPES\n\nThe custom Adyen SCAPI scopes, for example, c_order_rw c_notify_rw, and your SFCC oauth scopes, for example, sfcc.orders sfcc.orders.rw. You also need to add this in your Salesforce Account Manager &gt; API Client &gt; OpenID Connect &gt; Allowed Scopes. Refer to Salesforce documentation to learn more about authorization scopes.\n\n\nYOUR_SITE_ID_GIFT_CARD_EXPIRATION_TIME\n\nFor partial payments with gift cards, the expiration time after an order is created, in minutes. The default is 30.\n\n\n\n\nWhen going live, you need to update some variables you have entered with values from your live Customer Area.\n\n\n\n4. Deploy your project to MRT\nTo run your application, you must deploy your application to MRT and to the environment you have set up. You also need a Personal MRT API Key.\n\n\nFollow the steps to generate a Personal MRT API key in Salesforce Docs.\n\n\nIn your Retail React App, save your credentials:\n\n\n\n\n\nPush your build to MRT:\n\n\n\n\n\nFollow the steps to deploy the bundle in Salesforce Docs to the environment you have created.\n\nStep 10 (Optional): Import the Adyen country\/region list\nSalesforce allows you to add your list of countries\/regions for shipping. Optionally, you can use our default list.\nTo use our country\/region list, in your PWA Retail React app, import the Adyen countrylist and export it as SHIPPING_COUNTRY_CODES in the constants.js file:\n\n    \nMigrate pages\nIf you already have an SFCC integration with Adyen using Store Front Reference Architecture (SFRA) or SiteGenesis, you need to migrate your store pages. If you do not have an SFCC integration with Adyen already, you can start testing.\nYou can perform Phased Headless Rollouts to migrate your SFRA or SiteGenesis pages in a phased approach.\n\nThe Adyen package uses version 8 of the Retail React App with template extensibility. To filter out links to non-PWA kit pages, you can override the overrides\/app\/routes.jsx file. Salesforce has sample code on GitHub that shows how to override.\n\n\nIf you are migrating the checkout page last, you need to route traffic to your SFRA checkout page from your PWA integration. To learn how to apply routing, refer to Salesforce Docs.\nTesting\nAfter you have installed and configured the package, use our test cards to test payments.\nCheck the status of test payments in your Customer Area &gt; Transactions &gt; Payments.Next steps\n\nrequiredSet up payment methodsSet up the payment methods that you want to offer in your Salesforce Composable Storefront.CustomizeCheck our customization guide to learn how you can modify your integration..\n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Plugins","lvl2":"Salesforce Commerce Cloud - B2C Commerce","lvl3":"Composable Storefront package","lvl4":"Set up your Composable Storefront with Adyen"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/plugins","lvl2":"https:\/\/docs.adyen.com\/pt\/plugins\/salesforce-commerce-cloud","lvl3":"https:\/\/docs.adyen.com\/pt\/plugins\/salesforce-commerce-cloud\/composable-storefront","lvl4":"\/pt\/plugins\/salesforce-commerce-cloud\/composable-storefront\/install-and-set-up-the-package"},"levels":5,"category":"Plugins","category_color":"green","tags":["Salesforce Composable Storefront","package"]}]}
