1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5373],{28458:(e,n,i)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/payments/integration-checklist",function(){return i(82111)}])},82111:(e,n,i)=>{"use strict";i.r(n),i.d(n,{__N_SSG:()=>o,default:()=>u,headings:()=>a,meta:()=>d});var s=i(37876),r=i(91668),t=i(87249),l=i(46969),c=i(95159),o=!0;let d={title:"Integration checklist",sidebar_title:"Integration checklist",description:"Checklist for building an online payments integration with Safepay.",hideTOC:!1},a=[{depth:2,type:"text",title:"Sandbox Account Setup"},{depth:2,type:"text",title:"Understand the Integration"},{depth:3,type:"text",title:"Security & Authentication"},{depth:3,type:"text",title:"Test Environment"},{depth:3,type:"text",title:"Pre-Go-Live"}];function h(e){let n={a:"a",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"Follow the checklist below to ensure you have a complete online payments integration with Safepay."}),"\n",(0,s.jsx)(n.p,{children:"Before you begin integrating Safepay, make sure you've gone through the following steps:"}),"\n",(0,s.jsxs)(t.p,{label:"1",children:[(0,s.jsx)(n.h2,{id:"sandbox-account-setup",children:"Sandbox Account Setup"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Youâve created a ",(0,s.jsx)(n.strong,{children:"Sandbox Account"})," via the ",(0,s.jsx)(n.a,{href:"https://sandbox.api.getsafepay.com/dashboard/login",children:"Dashboard"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["You've retrieved your ",(0,s.jsx)(n.strong,{children:"Client-side and Server-side API keys"}),"."]}),"\n"]})]}),"\n",(0,s.jsxs)(t.p,{label:"2",children:[(0,s.jsx)(n.h2,{id:"understand-the-integration",children:"Understand the Integration"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Youâve ",(0,s.jsx)(n.strong,{children:"chosen your integration flow"}),":\n",(0,s.jsx)(n.a,{href:"/../../../../build-your-integration/express-checkout",children:"Express Checkout Guide"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../build-your-integration/advanced-checkout/safepay-atoms",children:"Atoms Web"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../build-your-integration/advanced-checkout/safepay-react",children:"React Native Integration"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../build-your-integration/advanced-checkout/cardinal",children:"Cardinal Mobile SDK"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../no-code/overview",children:"Plugins"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Youâve ",(0,s.jsx)(n.strong,{children:"read the documentation"})," for your chosen flow."]}),"\n",(0,s.jsxs)(n.li,{children:["You understand ",(0,s.jsx)(n.strong,{children:"core concepts"}),":","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/tracker",children:"Tracker"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/tracker-states",children:"Tracker states"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/payment-intents",children:"Payment intents"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/payment-modes",children:"Payment modes"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/payment-entry-modes",children:"Payment entry modes"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/payment-actions",children:"Payment actions"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/shoppers",children:"Safepay Shoppers"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/shoppers",children:"Merchant Shoppers"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/tokenization/introduction",children:"Tokenization"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../developers/webhooks/overview",children:"Webhooks"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/../../../../concepts/three-d-secure",children:"3D Secure"})}),"\n"]}),"\n"]}),"\n"]})]}),"\n",(0,s.jsxs)(t.p,{label:"3",children:[(0,s.jsx)(n.h3,{id:"security--authentication",children:"Security & Authentication"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["You understand how ",(0,s.jsx)(n.strong,{children:"JWTs are used"})," for secure communication."]}),"\n",(0,s.jsxs)(n.li,{children:["Youâve configured ",(0,s.jsx)(n.strong,{children:"webhooks"})," to receive transaction updates."]}),"\n",(0,s.jsxs)(n.li,{children:["Youâre validating webhooks and ",(0,s.jsx)(n.strong,{children:"verifying JWTs"})," server-side."]}),"\n"]})]}),"\n",(0,s.jsxs)(t.p,{label:"4",children:[(0,s.jsx)(n.h3,{id:"test-environment",children:"Test Environment"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Youâve successfully tested:"}),"\n",(0,s.jsx)(n.li,{children:"Creating a Tracker"}),"\n",(0,s.jsx)(n.li,{children:"Creating a Customer"}),"\n",(0,s.jsx)(n.li,{children:"Creating a JWT/Time based token"}),"\n",(0,s.jsx)(n.li,{children:"3DS challenge flows"}),"\n",(0,s.jsx)(n.li,{children:"Handling declined transactions"}),"\n",(0,s.jsx)(n.li,{children:"Youâve handled all possible error responses."}),"\n",(0,s.jsxs)(n.li,{children:["Your frontend handles ",(0,s.jsx)(n.strong,{children:"success"}),", ",(0,s.jsx)(n.strong,{children:"failure"}),", and ",(0,s.jsx)(n.strong,{children:"cancellation"})," states."]}),"\n"]})]}),"\n",(0,s.jsxs)(t.p,{label:"5",children:[(0,s.jsx)(n.h3,{id:"pre-go-live",children:"Pre-Go-Live"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Youâve completed the ",(0,s.jsx)(n.a,{href:"https://getsafepay.com/onboarding/login",children:"KYC onboarding form"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"All production API keys and webhook endpoints are updated in your code."}),"\n"]})]}),"\n",(0,s.jsx)(l.P,{type:"info",icon:c.A,children:(0,s.jsx)(n.p,{children:"Make sure you monitor webhooks in real-time during testing and production to avoid missing charge updates."})})]})}function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},87249:(e,n,i)=>{"use strict";i.d(n,{p:()=>t});var s=i(18153),r=i(88604);let t=e=>{let{children:n,label:i}=e;return(0,s.FD)("div",{className:"flex gap-4 mt-6 mb-4",children:[(0,s.Y)(r.ZS,{className:"flex min-w-[28px] h-7 bg-element roun
1ded-full items-center justify-center mt-1",children:i}),(0,s.Y)("div",{className:"pt-1.5 w-full max-w-[calc(100%-44px)] prose-headings:!-mt-1 prose-ul:!mb-0 prose-ol:!mb-0",children:"string"==typeof n?(0,s.Y)(r.P,{children:n}):n})]})}}},e=>{e.O(0,[636,6593,8792],()=>e(e.s=28458)),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.