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
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
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
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
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>\nCome 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":"