package Ġcom . stripe . android Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . activity . result . Activity Result Callback Ċ import Ġandroidx . activity . result . Activity Result Caller Ċ import Ġandroidx . activity . result . Activity Result Launcher Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġcom . stripe . android . auth . Payment Browser Auth Contract Ċ import Ġcom . stripe . android . exception . API Connection Exception Ċ import Ġcom . stripe . android . exception . API Exception Ċ import Ġcom . stripe . android . exception . Authentication Exception Ċ import Ġcom . stripe . android . exception . Invalid RequestException Ċ import Ġcom . stripe . android . exception . Stripe Exception Ċ import Ġcom . stripe . android . model . Confirm Payment Intent Params Ċ import Ġcom . stripe . android . model . Confirm Setup Intent Params Ċ import Ġcom . stripe . android . model . Confirm Stripe Intent Params Ċ import Ġcom . stripe . android . model . Payment Intent Ċ import Ġcom . stripe . android . model . Setup Intent Ċ import Ġcom . stripe . android . model . Source Ċ import Ġcom . stripe . android . model . Stripe Intent Ċ import Ġcom . stripe . android . model . We Chat Pay Next Action Ċ import Ġcom . stripe . android . networking . A lip ay Repository Ċ import Ġcom . stripe . android . networking . Analytics Event Ċ import Ġcom . stripe . android . networking . Analytics Request Executor Ċ import Ġcom . stripe . android . networking . Analytics Request Factory Ċ import Ġcom . stripe . android . networking . ApiRequest Ċ import Ġcom . stripe . android . networking . Default A lip ay Repository Ċ import Ġcom . stripe . android . networking . Stripe Repository Ċ import Ġcom . stripe . android . payments . Default Return Url Ċ import Ġcom . stripe . android . payments . Payment Flow Failure Message Factory Ċ import Ġcom . stripe . android . payments . Payment Flow Result Ċ import Ġcom . stripe . android . payments . Payment Intent Flow Result Processor Ċ import Ġcom . stripe . android . payments . Setup Intent Flow Result Processor Ċ import Ġcom . stripe . android . payments . core . authentication . Default Payment Authenticator Registry Ċ import Ġcom . stripe . android . payments . core . authentication . Payment Authenticator Registry Ċ import Ġcom . stripe . android . view . Auth Activity Starter Host Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Provider Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ /** Ċ Ġ* ĠA Ġcontroller Ġresponsible Ġfor Ġconfirm ing Ġand Ġauthentic ating Ġpayment Ġ( typ ically Ġthrough Ġresolving Ċ Ġ* Ġany Ġrequired Ġcustomer Ġaction ). ĠThe Ġpayment Ġauthentication Ġmechanism Ġ( e . g . Ġ 3 DS ) Ġwill Ġbe Ġdetermined Ċ Ġ* Ġby Ġthe Ġ[ Payment Intent ] Ġor Ġ[ Setup Intent ] Ġobject . Ċ Ġ*/ Ċ internal Ġclass ĠStripe Payment Controller Ġinternal Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġpublish able Key Provider : ĠProvider < String >, ĊĠĠĠ Ġprivate Ġval Ġstripe Repository : ĠStripe Repository , ĊĠĠĠ Ġprivate Ġval Ġenable Logging : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġprivate Ġval Ġanalytics Request Executor : ĠAnalytics Request Executor Ġ= ĊĠĠĠĠĠĠĠ ĠAnalytics Request Executor . Default ( Logger . getInstance ( enable Logging )), ĊĠĠĠ Ġprivate Ġval Ġanalytics Request Factory : ĠAnalytics Request Factory Ġ= ĊĠĠĠĠĠĠĠ ĠAnalytics Request Factory ( context . application Context , Ġpublish able Key Provider ), ĊĠĠĠ Ġprivate Ġval Ġal ipay Repository : ĠA lip ay Repository Ġ= ĠDefault A lip ay Repository ( stripe Repository ), ĊĠĠĠ Ġwork Context : ĠCor outine Context Ġ= ĠDispatch ers . IO , ĊĠĠĠ Ġprivate Ġval Ġui Context : ĠCor outine Context Ġ= ĠDispatch ers . Main Ċ ) Ġ: ĠPayment Controller Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfailure Message Factory Ġ= ĠPayment Flow Failure Message Factory ( context ) ĊĠĠĠ Ġprivate Ġval Ġpayment Intent Flow Result Processor Ġ= ĠPayment Intent Flow Result Processor ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġpublish able Key Provider , ĊĠĠĠĠĠĠĠ Ġstripe Repository , ĊĠĠĠĠĠĠĠ Ġenable Logging , ĊĠĠĠĠĠĠĠ Ġwork Context ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġsetup Intent Flow Result Processor Ġ= ĠSetup Intent Flow Result Processor ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġpublish able Key Provider , ĊĠĠĠĠĠĠĠ Ġstripe Repository , ĊĠĠĠĠĠĠĠ Ġenable Logging , ĊĠĠĠĠĠĠĠ Ġwork Context ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġdefault Return Url Ġ= ĠDefault Return Url . create ( context ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ payment Relay Launcher ] Ġis Ġmutable Ġand Ġmight Ġbe Ġupdated Ġduring ĊĠĠĠĠ Ġ* Ġthrough Ġ[ register Launch ers With Activity Result Caller ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġpayment Relay Launcher : ĠActivity Result Launcher < Payment Relay Starter . Args >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġpayment Relay Starter Factory Ġ= Ġ{ Ġhost : ĠAuth Activity Starter Host Ġ-> ĊĠĠĠĠĠĠĠ Ġpayment Relay Launcher ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Relay Starter . Mod ern ( it ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠPayment Relay Starter . Legacy ( host ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ payment Browser Auth Launcher ] Ġis Ġmutable Ġand Ġmight Ġbe Ġupdated Ġduring ĊĠĠĠĠ Ġ* Ġthrough Ġ[ register Launch ers With Activity Result Caller ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġpayment Browser Auth Launcher : ĠActivity Result Launcher < Payment Browser Auth Contract . Args >? Ġ= ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġprivate Ġval Ġpayment Browser Auth Starter Factory Ġ= Ġ{ Ġhost : ĠAuth Activity Starter Host Ġ-> ĊĠĠĠĠĠĠĠ Ġpayment Browser Auth Launcher ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Browser Auth Starter . Mod ern ( it ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠPayment Browser Auth Starter . Legacy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Return Url ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġmap Ġbetween Ġ 3 ds 1 Ġ[ Stripe Intent ] Ġids Ġto Ġits Ġcorresponding Ġreturn Url . ĊĠĠĠĠ Ġ* ĠAn Ġentry Ġwill Ġbe Ġremoved Ġonce Ġthe Ġ[ Stripe Intent ] Ġis Ġconfirmed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġthree Ds 1 Intent Return Url Map Ġ= Ġmutable Map Of < String , ĠString >() ĊĊĠĠĠ Ġprivate Ġval Ġauth enticator Registry : ĠPayment Authenticator Registry Ġ= ĊĠĠĠĠĠĠĠ ĠDefault Payment Authenticator Registry . create Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Relay Starter Factory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Browser Auth Starter Factory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Request Executor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Request Factory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Logging , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthree Ds 1 Intent Return Url Map , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġregister Launch ers With Activity Result Caller ( ĊĠĠĠĠĠĠĠ Ġactivity Result Caller : ĠActivity Result Caller , ĊĠĠĠĠĠĠĠ Ġactivity Result Callback : ĠActivity Result Callback < Payment Flow Result . Un validated > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpayment Relay Launcher Ġ= Ġactivity Result Caller . register For Activity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Relay Contract (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Result Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpayment Browser Auth Launcher Ġ= Ġactivity Result Caller . register For Activity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Browser Auth Contract (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Result Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġauth enticator Registry . on New Activity Result Caller ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Result Caller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Result Callback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġunregister Launch ers () Ġ{ ĊĠĠĠĠĠĠĠ Ġpayment Relay Launcher ?. unregister () ĊĠĠĠĠĠĠĠ Ġpayment Browser Auth Launcher ?. unregister () ĊĠĠĠĠĠĠĠ Ġpayment Relay Launcher Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġpayment Browser Auth Launcher Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġauth enticator Registry . on Launcher Invalid ated () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfirm Ġthe ĠStripe ĠIntent Ġand Ġresolve Ġany Ġnext Ġactions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstart Confirm And Auth ( ĊĠĠĠĠĠĠĠ Ġhost : ĠAuth Activity Starter Host , ĊĠĠĠĠĠĠĠ Ġconfirm Stripe Intent Params : ĠConfirm Stripe Intent Params , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog Return Url ( confirm Stripe Intent Params . return Url ) ĊĊĠĠĠĠĠĠĠ Ġval Ġreturn Url Ġ= Ġconfirm Stripe Intent Params . return Url . take Unless Ġ{ Ġit . isNull Or Blank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġdefault Return Url . value ĊĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( confirm Stripe Intent Params ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfirm Payment Intent Params Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Payment Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Stripe Intent Params . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . return Url Ġ= Ġreturn Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfirm Setup Intent Params Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Setup Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Stripe Intent Params . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . return Url Ġ= Ġreturn Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . next Action Data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠStripe Intent . Next Action Data . Sdk Data . Use 3 DS 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . id ?. let Ġ{ Ġintent Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthree Ds 1 Intent Return Url Map [ intent Id ] Ġ= Ġreturn Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Next Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Request Code ( confirm Stripe Intent Params ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġconfirm And Authenticate A lip ay ( ĊĠĠĠĠĠĠĠ Ġconfirm Payment Intent Params : ĠConfirm Payment Intent Params , ĊĠĠĠĠĠĠĠ Ġauth enticator : ĠA lip ay Authenticator , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ): ĠPayment Intent Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġauthenticate A lip ay ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Payment Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Payment Intent Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth enticator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġconfirm We Chat Pay ( ĊĠĠĠĠĠĠĠ Ġconfirm Payment Intent Params : ĠConfirm Payment Intent Params , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ): ĠWe Chat Pay Next Action Ġ{ ĊĠĠĠĠĠĠĠ Ġconfirm Payment Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Payment Intent Params , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠ Ġ). let Ġ{ Ġpayment Intent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( payment Intent . next Action Data Ġis ĠStripe Intent . Next Action Data . We Chat Pay Redirect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unable Ġto Ġconfirm ĠPayment ĠIntent Ġwith ĠWe Chat Pay ĠSDK " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWe Chat Pay Next Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Intent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Intent . next Action Data . we Chat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġconfirm Payment Intent ( ĊĠĠĠĠĠĠĠ Ġconfirm Stripe Intent Params : ĠConfirm Payment Intent Params , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ): ĠPayment Intent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequire NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository . confirm Payment Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmark Ġthis Ġrequest Ġas Ġ` use _ stripe _ sdk = true ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Stripe Intent Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Should Use Stripe Sdk ( should Use Stripe Sdk Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpand Fields Ġ= ĠEXP AND _ PAYMENT _ METHOD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUIRED _ ERROR ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġconfirm Setup Intent ( ĊĠĠĠĠĠĠĠ Ġconfirm Stripe Intent Params : ĠConfirm Setup Intent Params , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ): ĠSetup Intent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequire NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository . confirm Setup Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmark Ġthis Ġrequest Ġas Ġ` use _ stripe _ sdk = true ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm Stripe Intent Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Should Use Stripe Sdk ( should Use Stripe Sdk Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpand Fields Ġ= ĠEXP AND _ PAYMENT _ METHOD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUIRED _ ERROR ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstart Auth ( ĊĠĠĠĠĠĠĠ Ġhost : ĠAuth Activity Starter Host , ĊĠĠĠĠĠĠĠ Ġclient Secret : ĠString , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options , ĊĠĠĠĠĠĠĠ Ġtype : ĠPayment Controller . Stripe Intent Type ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstripe Intent Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Controller . Stripe Intent Type . Payment Intent Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository . retrieve Payment Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Secret , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Controller . Stripe Intent Type . Setup Intent Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository . retrieve Setup Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Secret , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( stripe Intent ) ĊĠĠĠĠĠĠĠ Ġ}. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġstripe Intent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Next Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ġ= Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Intent Ġ= Ġstripe Intent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options Ġ= Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Controller . Stripe Intent Type . Payment Intent Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP AY MENT _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Controller . Stripe Intent Type . Setup Intent Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSET UP _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstart Authenticate Source ( ĊĠĠĠĠĠĠĠ Ġhost : ĠAuth Activity Starter Host , ĊĠĠĠĠĠĠĠ Ġsource : ĠSource , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanalytics Request Executor . execute Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Request Factory . create Request ( Analytics Event . Auth Source Start ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository . retrieve Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Id Ġ= Ġsource . id . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Secret Ġ= Ġsource . client Secret . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ Ġretrieved S ourced Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Source Retrie ved ( host , Ġretrieved S ourced , Ġrequest Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSOURCE _ REQUEST _ CODE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġon Source Retrie ved ( ĊĠĠĠĠĠĠĠ Ġhost : ĠAuth Activity Starter Host , ĊĠĠĠĠĠĠĠ Ġsource : ĠSource , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġauth enticator Registry . get Authenticator ( source ). authenticate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDec ide Ġwhether Ġ[ get Payment Intent Result ] Ġshould Ġbe Ġcalled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġshould Handle Payment Result ( request Code : ĠInt , Ġdata : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest Code Ġ== ĠP AY MENT _ REQUEST _ CODE Ġ&& Ġdata Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDec ide Ġwhether Ġ[ get Setup Intent Result ] Ġshould Ġbe Ġcalled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġshould Handle Setup Result ( request Code : ĠInt , Ġdata : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest Code Ġ== ĠSET UP _ REQUEST _ CODE Ġ&& Ġdata Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Handle Source Result ( request Code : ĠInt , Ġdata : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest Code Ġ== ĠSOURCE _ REQUEST _ CODE Ġ&& Ġdata Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe ĠPayment Intent 's Ġclient _ secret Ġfrom Ġ{@ param Ġdata } Ġand Ġuse Ġto Ġretrieve ĊĠĠĠĠ Ġ* Ġthe ĠPayment Intent Ġobject Ġwith Ġupdated Ġstatus . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġthe Ġresult ĠIntent ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Payment Intent Result ] Ġobject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠAuthentication Exception Ġfailure Ġto Ġproperly Ġauthenticate Ġyourself Ġ( check Ġyour Ġkey ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid RequestException Ġyour Ġrequest Ġhas Ġinvalid Ġparameters ĊĠĠĠĠ Ġ* Ġ@ throws ĠAPI Connection Exception Ġfailure Ġto Ġconnect Ġto ĠStripe 's ĠAPI ĊĠĠĠĠ Ġ* Ġ@ throws ĠAPI Exception Ġany Ġother Ġtype Ġof Ġproblem Ġ( for Ġinstance , Ġa Ġtemporary Ġissue Ġwith ĠStripe 's Ġservers ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġresponse 's ĠJson Parser Ġreturns Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( ĊĠĠĠĠĠĠĠ ĠAuthentication Exception :: class , ĊĠĠĠĠĠĠĠ ĠInvalid RequestException :: class , ĊĠĠĠĠĠĠĠ ĠAPI Connection Exception :: class , ĊĠĠĠĠĠĠĠ ĠAPI Exception :: class , ĊĠĠĠĠĠĠĠ ĠIllegalArgumentException :: class ĊĠĠĠ Ġ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Payment Intent Result ( data : ĠIntent ) Ġ= ĊĠĠĠĠĠĠĠ Ġpayment Intent Flow Result Processor . process Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Flow Result . Un validated . from Intent ( data ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe ĠSetup Intent 's Ġclient _ secret Ġfrom Ġ{@ param Ġdata } Ġand Ġuse Ġto Ġretrieve ĊĠĠĠĠ Ġ* Ġthe ĠPayment Intent Ġobject Ġwith Ġupdated Ġstatus . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġthe Ġresult ĠIntent ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Setup Intent Result ] Ġobject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠAuthentication Exception Ġfailure Ġto Ġproperly Ġauthenticate Ġyourself Ġ( check Ġyour Ġkey ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid RequestException Ġyour Ġrequest Ġhas Ġinvalid Ġparameters ĊĠĠĠĠ Ġ* Ġ@ throws ĠAPI Connection Exception Ġfailure Ġto Ġconnect Ġto ĠStripe 's ĠAPI ĊĠĠĠĠ Ġ* Ġ@ throws ĠAPI Exception Ġany Ġother Ġtype Ġof Ġproblem Ġ( for Ġinstance , Ġa Ġtemporary Ġissue Ġwith ĠStripe 's Ġservers ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġresponse 's ĠJson Parser Ġreturns Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( ĊĠĠĠĠĠĠĠ ĠAuthentication Exception :: class , ĊĠĠĠĠĠĠĠ ĠInvalid RequestException :: class , ĊĠĠĠĠĠĠĠ ĠAPI Connection Exception :: class , ĊĠĠĠĠĠĠĠ ĠAPI Exception :: class , ĊĠĠĠĠĠĠĠ ĠIllegalArgumentException :: class ĊĠĠĠ Ġ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Setup Intent Result ( data : ĠIntent ) Ġ= ĊĠĠĠĠĠĠĠ Ġsetup Intent Flow Result Processor . process Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Flow Result . Un validated . from Intent ( data ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe ĠSource 's Ġclient _ secret Ġfrom Ġ{@ param Ġdata } Ġand Ġuse Ġto Ġretrieve ĊĠĠĠĠ Ġ* Ġthe ĠSource Ġobject Ġwith Ġupdated Ġstatus . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġthe Ġresult ĠIntent ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Source ] Ġobject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠAuthentication Exception Ġfailure Ġto Ġproperly Ġauthenticate Ġyourself Ġ( check Ġyour Ġkey ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠInvalid RequestException Ġyour Ġrequest Ġhas Ġinvalid Ġparameters ĊĠĠĠĠ Ġ* Ġ@ throws ĠAPI Connection Exception Ġfailure Ġto Ġconnect Ġto ĠStripe 's ĠAPI ĊĠĠĠĠ Ġ* Ġ@ throws ĠAPI Exception Ġany Ġother Ġtype Ġof Ġproblem Ġ( for Ġinstance , Ġa Ġtemporary Ġissue Ġwith ĠStripe 's Ġservers ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe ĠSource Ġresponse 's ĠJson Parser Ġreturns Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( ĊĠĠĠĠĠĠĠ ĠAuthentication Exception :: class , ĊĠĠĠĠĠĠĠ ĠInvalid RequestException :: class , ĊĠĠĠĠĠĠĠ ĠAPI Connection Exception :: class , ĊĠĠĠĠĠĠĠ ĠAPI Exception :: class , ĊĠĠĠĠĠĠĠ ĠIllegalArgumentException :: class ĊĠĠĠ Ġ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Authenticate Source Result ( data : ĠIntent ): ĠSource Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠPayment Flow Result . Un validated . from Intent ( data ) ĊĠĠĠĠĠĠĠ Ġval Ġsource Id Ġ= Ġresult . source Id . or Empty () ĊĠĠĠĠĠĠĠ Ġval Ġclient Secret Ġ= Ġresult . client Secret . or Empty () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Options Ġ= ĠApi Request . Options ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠapiKey Ġ= Ġpublish able Key Provider . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Account Ġ= Ġresult . stripe AccountId ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġanalytics Request Executor . execute Async ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Request Factory . create Request ( Analytics Event . Auth Source Result ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrequire NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository . retrieve Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Secret , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġauthenticate A lip ay ( ĊĠĠĠĠĠĠĠ Ġpayment Intent : ĠPayment Intent , ĊĠĠĠĠĠĠĠ Ġauth enticator : ĠA lip ay Authenticator , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ): ĠPayment Intent Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutcome Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġal ipay Repository . authenticate ( payment Intent , Ġauth enticator , Ġrequest Options ). outcome ĊĠĠĠĠĠĠĠ Ġval Ġref reshed Payment Intent Ġ= Ġrequire NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository . retrieve Payment Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayment Intent . client Secret . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpand Fields Ġ= ĠEXP AND _ PAYMENT _ METHOD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPayment Intent Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref reshed Payment Intent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutcome , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Message Factory . create ( ref reshed Payment Intent , Ġoutcome ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġhandle Error ( ĊĠĠĠĠĠĠĠ Ġhost : ĠAuth Activity Starter Host , ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġthrowable : ĠThrowable ĊĠĠĠ Ġ) Ġ= Ġwith Context ( ui Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpayment Relay Starter Factory ( host ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment Relay Starter . Args . Error Args ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStripe Exception . create ( throwable ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermine Ġwhich Ġauthentication Ġmechanism Ġshould Ġbe Ġused , Ġor Ġbypass Ġauthentication ĊĠĠĠĠ Ġ* Ġif Ġit Ġis Ġnot Ġneeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle Next Action ( ĊĠĠĠĠĠĠĠ Ġhost : ĠAuth Activity Starter Host , ĊĠĠĠĠĠĠĠ Ġstripe Intent : ĠStripe Intent , ĊĠĠĠĠĠĠĠ Ġrequest Options : ĠApi Request . Options ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauth enticator Registry . get Authenticator ( stripe Intent ). authenticate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Intent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Options ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog Return Url ( return Url : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( return Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Return Url . value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Event . Confirm Return Url Default ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Event . Confirm Return Url Null ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalytics Event . Confirm Return Url Custom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Request Executor . execute Async ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Request Factory . create Request ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠP AY MENT _ REQUEST _ CODE Ġ= Ġ 5 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠSET UP _ REQUEST _ CODE Ġ= Ġ 5 0 0 0 1 ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠSOURCE _ REQUEST _ CODE Ġ= Ġ 5 0 0 0 2 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġappropriate Ġrequest Ġcode Ġfor Ġthe Ġgiven Ġstripe Ġintent Ġtype ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġintent Ġthe Ġ[ Stripe Intent ] Ġto Ġget Ġthe Ġrequest Ġcode Ġfor ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠP AY MENT _ REQUEST _ CODE Ġor ĠSET UP _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġget Request Code ( intent : ĠStripe Intent ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( intent Ġis ĠPayment Intent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP AY MENT _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSET UP _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġappropriate Ġrequest Ġcode Ġfor Ġthe Ġgiven Ġstripe Ġintent Ġparams Ġtype ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparams Ġthe Ġ[ Confirm Stripe Intent Params ] Ġto Ġget Ġthe Ġrequest Ġcode Ġfor ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠP AY MENT _ REQUEST _ CODE Ġor ĠSET UP _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġget Request Code ( params : ĠConfirm Stripe Intent Params ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( params ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfirm Payment Intent Params Ġ-> ĠP AY MENT _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfirm Setup Intent Params Ġ-> ĠSET UP _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish able Key : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository : ĠStripe Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Logging : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ): ĠPayment Controller Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStripe Payment Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġpublish able Key Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstripe Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Logging ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠEXP AND _ PAYMENT _ METHOD Ġ= ĠlistOf (" payment _ method ") ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠCH ALL EN GE _ DELAY Ġ= ĠTimeUnit . SECONDS . to Millis ( 2 L ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUIRED _ ERROR Ġ= Ġ" API Ġrequest Ġreturned Ġan Ġinvalid Ġresponse ." ĊĠĠĠ Ġ} Ċ } Ċ