package Ġorg . ost el co . at . common Ċ Ċ import Ġcom . stripe . Stripe Ċ import Ġcom . stripe . model . Customer Ċ import Ġcom . stripe . model . Source Ċ import Ġcom . stripe . model . Token Ċ import Ġjava . time . Year Ċ Ċ object ĠStripe Payment Ġ{ ĊĊĠĠĠ Ġfun Ġcreate Payment Token Id (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stripe . com / docs / api / java # create _ card _ token ĊĠĠĠĠĠĠĠ ĠStripe . apiKey Ġ= ĠSystem . getenv (" STRI PE _ API _ KEY ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcard Map Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" number " Ġto Ġ" 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp _ month " Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp _ year " Ġto Ġnext Year (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cv c " Ġto Ġ" 3 1 4 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtoken Map Ġ= Ġmap Of (" card " Ġto Ġcard Map ) ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠToken . create ( token Map ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtoken . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Payment Source Id (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stripe . com / docs / api / java # create _ source ĊĠĠĠĠĠĠĠ ĠStripe . apiKey Ġ= ĠSystem . getenv (" STRI PE _ API _ KEY ") ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" card ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" card " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" number " Ġto Ġ" 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp _ month " Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp _ year " Ġto Ġnext Year (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cv c " Ġto Ġ" 3 1 4 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" owner " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" address " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" city " Ġto Ġ" Os lo ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" country " Ġto Ġ" Nor way " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" email " Ġto Ġ" me @ some where . com ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource . create ( source Map ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsource . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Payment Source Id No Address (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stripe . com / docs / api / java # create _ source ĊĠĠĠĠĠĠĠ ĠStripe . apiKey Ġ= ĠSystem . getenv (" STRI PE _ API _ KEY ") ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Map Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ" card ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" card " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" number " Ġto Ġ" 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp _ month " Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exp _ year " Ġto Ġnext Year (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cv c " Ġto Ġ" 3 1 4 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" owner " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" email " Ġto Ġ" me @ some where . com ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource . create ( source Map ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsource . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Card Id For Token Id ( tokenId : ĠString ) Ġ: ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stripe . com / docs / api / java # create _ source ĊĠĠĠĠĠĠĠ ĠStripe . apiKey Ġ= ĠSystem . getenv (" STRI PE _ API _ KEY ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠToken . retrieve ( tokenId ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtoken . card . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠMAX _ TR IES Ġ= Ġ 3 ĊĠĠĠ Ġval ĠWAIT _ DELAY Ġ= Ġ 3 0 0 L ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb t ains Ġ' default Ġsource ' Ġdirectly Ġfrom ĠStripe . ĠUse Ġin Ġtests Ġto ĊĠĠĠĠ Ġ* Ġverify Ġthat Ġthe Ġcorrespond ng Ġ' setDefault Source ' ĠAPI Ġworks Ġas ĊĠĠĠĠ Ġ* Ġintended . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetDefault Source For Customer ( customer Id : ĠString ) Ġ: ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stripe . com / docs / api / java # create _ source ĊĠĠĠĠĠĠĠ ĠStripe . apiKey Ġ= ĠSystem . getenv (" STRI PE _ API _ KEY ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= ĠException () ĊĊĠĠĠĠĠĠĠ Ġ( 0 .. MAX _ TR IES ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCustomer . retrieve ( customer Id ). default Source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ( error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb t ains Ġthe ĠStripe Ġ' customer Id ' Ġdirectly Ġfrom ĠStripe . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Stripe CustomerId ( customer Id : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stripe . com / docs / api / java # create _ card _ token ĊĠĠĠĠĠĠĠ ĠStripe . apiKey Ġ= ĠSystem . getenv (" STRI PE _ API _ KEY ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġcustomers : ĠList < Customer > Ġ= Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġ( 0 .. MAX _ TR IES ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustomers Ġ= ĠCustomer . list ( empty Map ()). data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! customers . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( WAIT _ DELAY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcustomers . first Ġ{ Ġit . id Ġ== Ġcustomer Id Ġ}. id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Customer ( customer Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stripe . com / docs / api / java # create _ card _ token ĊĠĠĠĠĠĠĠ ĠStripe . apiKey Ġ= ĠSystem . getenv (" STRI PE _ API _ KEY ") ĊĠĠĠĠĠĠĠ Ġval Ġcustomers Ġ= ĠCustomer . list ( empty Map ()). data ĊĠĠĠĠĠĠĠ Ġcustomers . filter Ġ{ Ġit . id Ġ== Ġcustomer Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġit . delete () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete All Customers () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stripe . com / docs / api / java # create _ card _ token ĊĠĠĠĠĠĠĠ ĠStripe . apiKey Ġ= ĠSystem . getenv (" STRI PE _ API _ KEY ") ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustomers Ġ= ĠCustomer . list ( empty Map ()). data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( customers . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustomers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it . email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Year () Ġ= ĠYear . now (). value Ġ+ Ġ 1 Ċ } Ċ Ċ // Ġuse Ġthis Ġjust Ġfor Ġcleanup Ċ fun Ġmain () Ġ= ĠStripe Payment . delete All Customers () Ċ