{"id":1164,"date":"2020-02-21T11:28:28","date_gmt":"2020-02-21T10:28:28","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=1164"},"modified":"2021-03-17T15:10:51","modified_gmt":"2021-03-17T14:10:51","slug":"come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/","title":{"rendered":"Come realizzare un sistema di pagamento totalmente serverless con Stripe e AWS Lambda"},"content":{"rendered":"

Nell\u2019epoca dello shopping online, l\u2019implementazione di sistemi di pagamento all\u2019interno di applicazioni cloud native<\/strong>, sta diventando una necessit\u00e0 sempre pi\u00f9 presente sul mercato.<\/span><\/p>\n

Come facilmente possiamo intuire, gestire pagamenti all\u2019interno del proprio flusso applicativo richiede l\u2019implementazione di un infrastruttura affidabile, che sia in grado di garantire<\/span> privacy<\/strong> e consistenza alle nostre transazioni.<\/strong><\/span><\/p>\n

Inoltre, l\u2019integrazione verso i sempre pi\u00f9 numerosi circuiti di pagamento comporta un notevole impegno in termini di sviluppo e manutenzione di tali applicativi.<\/span><\/p>\n

Ovviamente, da appassionati del cloud quali siamo, non potevamo che trovare la soluzione in un servizio del tutto managed: parliamo di Stripe<\/a>, un middleware di pagamento<\/strong> che espone ai suoi utenti dashboard di controllo e interfacce REST.<\/span><\/p>\n

Sebbene Stripe sia un servizio fully managed, ogni procedura di pagamento ha le proprie caratteristiche che vengono definite dai requisiti di business.<\/span><\/p>\n

\u00c8 altamente consigliato scrivere codice lato server per mantenere le procedure di pagamento riservate ed evitare cos\u00ec il diffondersi di dati sensibili a malintenzionati<\/span><\/p>\n

Stripe \u00e8 un servizio scalabile e completamente gestito. Per ottenere un’applicazione il pi\u00f9 performante possibile, occorre fare in modo che il back-end sia in grado di sostenere l’agilit\u00e0 della nuova soluzione. Per fare ci\u00f2, le tecnologie serverless sono quelle che meglio vengono in nostro aiuto<\/span><\/p>\n

In questo articolo andremo a sfruttare la potenza di AWS Lambda, il servizio di serverless computing offerto da Amazon Web Service.<\/span><\/p>\n

Per i neofiti del settore, si tratta di funzioni applicative stateless. Allo sviluppatore viene offerto un ambiente nel quale poter scrivere codice senza doversi preoccupare dell\u2019hardware utilizzato e della scalabilit\u00e0 della soluzione. In questo caso il pagamento \u00e8 a consumo.<\/span><\/p>\n

Stripe<\/span><\/h2>\n

Vediamo ora nel dettaglio come utilizzare Stripe.<\/span><\/p>\n

Per prima cosa, registriamoci al servizio da qui.<\/a> tramite questo link:<\/span><\/p>\n

La registrazione \u00e8 totalmente gratuita e il pagamento \u00e8 a consumo. Trovate tutti<\/span> i dettagli sul pricing in questa pagina.<\/a>\u00a0<\/span><\/p>\n

 <\/p>\n

\"\"<\/p>\n

In questo articolo non ci dilungheremo a raccontare le molteplici funzionalit\u00e0 di Stripe, che potrete trovare comodamente nella documentazione ufficiale.<\/a><\/span><\/p>\n

Ci focalizzeremo invece sul come integrare un applicativo serverless basato su Lambda alle API del nostro account Stripe appena creato.<\/span><\/p>\n

Una delle componenti fondamentali di Stripe \u00e8 senza dubbio la dashboard che offre agli utenti la possibilit\u00e0 di creare e gestire risorse come sottoscrizioni e prodotti.<\/span><\/p>\n

\"\"<\/p>\n

Come potete vedere potremo decidere se ottenere una test API key pair<\/strong> o una live API key pair<\/strong>: con la prima, saranno tutti dati di test che potremo vedere solo se la checkbox sulla sinistra <\/span>\u201cViewing test data\u201d <\/span><\/i>\u00e8 abilitata. <\/span>Al contrario la live API key la si usa per transazioni reali: saremo quindi sull\u2019ambiente di produzione.<\/span><\/p>\n

Inutile dire che entrambe le chiavi dovranno essere conservate in un ambiente sicuro. Per fare ci\u00f2, un ottimo servizio offerto da Amazon Web Services \u00e8 <\/span>AWS Secret Manager<\/a>, un database chiave valore pensato appositamente per lo storage di credenziali, chiavi di accesso e altre informazioni che si possano considerate altamente sensibili.<\/span><\/p>\n

\"\"<\/p>\n

Per salvare una nuova informazione su AWS Secret Manager baster\u00e0 cliccare su <\/span>\u201cStore a new secret\u201d <\/span><\/i>e selezionare la tipologia di segreto<\/span><\/p>\n

\"\"<\/p>\n

In questo caso avremo bisogno solo di dati chiave valore senza alcun tipo di integrazione.<\/span><\/p>\n

E adesso si inizia con le Lambda!<\/span><\/h2>\n

Finalmente \u00e8 arrivato il momento di creare la nostra Lambda<\/strong> per i pagamenti online.<\/span><\/p>\n

Nell\u2019esempio useremo Python3.6<\/strong><\/span><\/p>\n

NOTA:<\/b>\u00a0Assicurati che attaccato alla Lambda ci sia un LambdaLayer contenete i pacchetti pip, stripe e boto3.<\/span><\/p>\n

L\u2019algoritmo implementato nel codice sottostante prevede l\u2019abbonamento da parte di un utente ad una sottoscrizione precedentemente creata dalla dashboard di Stripe, quindi per usare questo codice avrete bisogno dell\u2019ARN del secret manager creato in precedenza e del plan id.<\/span><\/p>\n

import stripe\r\nimport boto3\r\nimport json\r\n\r\nclient = boto3.client('secretsmanager')\r\nkeys = json.loads(client.get_secret_value(\r\n  SecretId = 'arn:aws:secretsmanager:eu-central-1:169954988972:secret:stripe-AiFSZg',\r\n)['SecretString'])\r\npublic_key = keys['stripe-public']\r\nsecret_key = keys['stripe-secret']\r\nstripe.api_key = secret_key\r\n\r\ndef signup(event, context):\r\n  card_data = event.get('cardData')\r\n  email = event.get('email')\r\n  attributes = event.get('attributes')\r\n  create_stripe_customer(email, attributes, card_data)\r\n  return event\r\n\r\ndef create_stripe_customer(email, user_data, payment_info):\r\n  customer_id = stripe.Customer.create(email = email, metadata = user_data)['id']\r\n  payment_method_id = create_payment_method(payment_info)\r\n  stripe.PaymentMethod.attach(\r\n    payment_method_id,\r\n    customer = customer_id\r\n  )\r\n  return {\r\n    \"customer_id\": customer_id,\r\n    \"plan\": create_stripe_plan(customer_id)\r\n  }\r\n\r\ndef create_payment_method(payment_info):\r\n  return stripe.PaymentMethod.create(\r\n    type = \"card\",\r\n    card = {\r\n      \"number\": payment_info.get('cardNumber'),\r\n      \"exp_month\": payment_info.get('expirationMonth'),\r\n      \"exp_year\": payment_info.get('expirationYear'),\r\n      \"cvc\": payment_info.get('ccv'),\r\n    }).get('id')\r\n\r\ndef create_stripe_plan(customer_id):\r\n  return stripe.Subscription.create(\r\n    customer = customer_id,\r\n    items = [{\r\n      \"plan\": \"plan_idxxxxxxx\"\r\n    }]\r\n  ).get(\"id\")\r\n<\/pre>\n

Come potete vedere questa Lambda prende i valori dal payload passato all\u2019interno dell\u2019event che cambier\u00e0 a seconda del servizio integrato alla funzione.<\/span><\/p>\n

Per usare la Lambda abbiamo diverse possibilit\u00e0: \u00e8 possibile ad esempio utilizzarla come trigger di una coda SQS, come resource a un API Gateway o fare invoke direttamente dai client.<\/span><\/p>\n

Complimenti! Se avete seguito questi brevi passi avete costruito il vostro sistema di pagamento totalmente serverless! A questo punto siete pronti a gestire potenzialmente milioni di utenti con costi infrastrutturali direttamente proporzionale al traffico. Non vi resta che provarlo in produzione!\u00a0<\/span><\/p>\n

Se volete sapere di pi\u00f9 su Stripe, su AWS Lambda o su altri possibili scenari di applicazione contattateci<\/a>!\u00a0<\/span><\/p>\n

Arrivederci al prossimo articolo!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"

Nell\u2019epoca dello shopping online, l\u2019implementazione di sistemi di pagamento all\u2019interno di applicazioni cloud native, sta diventando una necessit\u00e0 sempre pi\u00f9 […]<\/p>\n","protected":false},"author":10,"featured_media":1181,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[477],"tags":[263,267,303],"yoast_head":"\nCome realizzare un sistema di pagamento totalmente serverless con Stripe e AWS Lambda - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"Implementiamo un sistema serverless di pagamento in un'applicazione cloud native con il servizio fully managed Stripe e AWS Lambda.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Realizzare un sistema di pagamento serverless con Stripe e AWS Lambda\" \/>\n<meta property=\"og:description\" content=\"Implementiamo un sistema serverless di pagamento in un'applicazione cloud native con il servizio fully managed Stripe e AWS Lambda.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-21T10:28:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-17T14:10:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/02\/copertine-blog-Stripe-26-26.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1668\" \/>\n\t<meta property=\"og:image:height\" content=\"1251\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Paolo Di Ciaula\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Realizzare un sistema di pagamento serverless con Stripe e AWS Lambda\" \/>\n<meta name=\"twitter:description\" content=\"Implementiamo un sistema serverless di pagamento in un'applicazione cloud native con il servizio fully managed Stripe e AWS Lambda.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/02\/copertine-blog-Stripe-26-26.png\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paolo Di Ciaula\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/\",\"name\":\"Come realizzare un sistema di pagamento totalmente serverless con Stripe e AWS Lambda - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2020-02-21T10:28:28+00:00\",\"dateModified\":\"2021-03-17T14:10:51+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/a984367e499bce5e12199e34d2c4181c\"},\"description\":\"Implementiamo un sistema serverless di pagamento in un'applicazione cloud native con il servizio fully managed Stripe e AWS Lambda.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Come realizzare un sistema di pagamento totalmente serverless con Stripe e AWS Lambda\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\",\"url\":\"https:\/\/blog.besharp.it\/it\/\",\"name\":\"Proud2beCloud Blog\",\"description\":\"il blog di beSharp\",\"alternateName\":\"Proud2beCloud Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.besharp.it\/it\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/a984367e499bce5e12199e34d2c4181c\",\"name\":\"Paolo Di Ciaula\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7a3395eed9ec6267a1c136c3cf0a3903?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7a3395eed9ec6267a1c136c3cf0a3903?s=96&d=mm&r=g\",\"caption\":\"Paolo Di Ciaula\"},\"description\":\"DevOps Engineer, Frontend Developer, and Mobile App Developer @ beSharp. I divide my free time between good music, development, and... beer (sometimes mixed for better results ;D)\",\"url\":\"https:\/\/blog.besharp.it\/it\/author\/paolo-di-ciaula\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Come realizzare un sistema di pagamento totalmente serverless con Stripe e AWS Lambda - Proud2beCloud Blog","description":"Implementiamo un sistema serverless di pagamento in un'applicazione cloud native con il servizio fully managed Stripe e AWS Lambda.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/","og_locale":"it_IT","og_type":"article","og_title":"Realizzare un sistema di pagamento serverless con Stripe e AWS Lambda","og_description":"Implementiamo un sistema serverless di pagamento in un'applicazione cloud native con il servizio fully managed Stripe e AWS Lambda.","og_url":"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2020-02-21T10:28:28+00:00","article_modified_time":"2021-03-17T14:10:51+00:00","og_image":[{"width":1668,"height":1251,"url":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/02\/copertine-blog-Stripe-26-26.png","type":"image\/png"}],"author":"Paolo Di Ciaula","twitter_card":"summary_large_image","twitter_title":"Realizzare un sistema di pagamento serverless con Stripe e AWS Lambda","twitter_description":"Implementiamo un sistema serverless di pagamento in un'applicazione cloud native con il servizio fully managed Stripe e AWS Lambda.","twitter_image":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/02\/copertine-blog-Stripe-26-26.png","twitter_misc":{"Scritto da":"Paolo Di Ciaula","Tempo di lettura stimato":"4 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/","url":"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/","name":"Come realizzare un sistema di pagamento totalmente serverless con Stripe e AWS Lambda - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2020-02-21T10:28:28+00:00","dateModified":"2021-03-17T14:10:51+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/a984367e499bce5e12199e34d2c4181c"},"description":"Implementiamo un sistema serverless di pagamento in un'applicazione cloud native con il servizio fully managed Stripe e AWS Lambda.","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/come-realizzare-un-sistema-di-pagamento-totalmente-serverless-con-stripe-e-aws-lambda\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Come realizzare un sistema di pagamento totalmente serverless con Stripe e AWS Lambda"}]},{"@type":"WebSite","@id":"https:\/\/blog.besharp.it\/it\/#website","url":"https:\/\/blog.besharp.it\/it\/","name":"Proud2beCloud Blog","description":"il blog di beSharp","alternateName":"Proud2beCloud Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.besharp.it\/it\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/a984367e499bce5e12199e34d2c4181c","name":"Paolo Di Ciaula","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/7a3395eed9ec6267a1c136c3cf0a3903?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7a3395eed9ec6267a1c136c3cf0a3903?s=96&d=mm&r=g","caption":"Paolo Di Ciaula"},"description":"DevOps Engineer, Frontend Developer, and Mobile App Developer @ beSharp. I divide my free time between good music, development, and... beer (sometimes mixed for better results ;D)","url":"https:\/\/blog.besharp.it\/it\/author\/paolo-di-ciaula\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/1164"}],"collection":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/comments?post=1164"}],"version-history":[{"count":0,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/1164\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/1181"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=1164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=1164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=1164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}