introduzione a google checkout

27
Google e i pagamenti elettronici Firenze GTUG, 15.04.2011 Luca Masini

Upload: firenze-gtug

Post on 07-Nov-2014

1.945 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Introduzione a Google Checkout

Google e i pagamenti elettronici

Firenze GTUG, 15.04.2011Luca Masini

Page 2: Introduzione a Google Checkout

Agenda

Introduzione a Google Checkout Intro alle API ed esempi di utilizzo Carrello personalizzato In-App billing Android Payment Extensions

Page 3: Introduzione a Google Checkout

Il mercato dei merchant server

Indice di gradimento dei venditoriI voti sono da 1 a 10Checkout ottiene un voto > 7 in 5 indicatori su 6L'unico che ottiene un voto > 7 nell'indice di gradimento dei compratori e' PayPal

Page 4: Introduzione a Google Checkout

Google Checkout: cosa ha di nuovo ??

Merchant server: 1° in Italia CRF (1998)

Pagamenti senza fornire tutte le volte i propri dati sensibili (conto corrente o carta di credito): PayPal

Bottone x pagamento immediato e carrello di prodotti eterogenei: molti altri prima di lui

Page 5: Introduzione a Google Checkout

Ma allora perché Google Checkout ??

Integrazione con OAuth --> sensazione di sicurezza dell'ecosistema Google.

Facile da implementare, grazie alle API ed ai Gadget.

É il sistema di pagamento dell'Android Market

Page 6: Introduzione a Google Checkout

Prima di cominciare: Sandbox

Grande disponibilitá di strumenti per sviluppatori

Sandbox - due componenti:Un gestore di account utentiMerchant non dispositivi

Componenti che danno la possibilitá di testare Checkout senza alcun vincolo sulle transazioni effettuate

NOTE: purtroppo per usarlo dobbiamo invocare URL diverse dalla produzione !!!

Page 7: Introduzione a Google Checkout

Prima di cominciare: Sandbox

merchant key (mkey) - merchant id --> Hello World di Checkout:

curl -k -u {mid}:{mkey} -d "<hello xmlns='http://checkout.google.com/schema/2'/>" "https://sandbox.google.com/checkout/api/checkout/v2/request/Merchant/{mid}"

se l'account e' attivo deve rispondere un "bye"

<?xml version="1.0" encoding="UTF-8"?><bye xmlns="http://checkout.google.com/schema/2" serial-number="a587860e-265b-4cbd-9a34-5fd1cac8aa11" />

Page 8: Introduzione a Google Checkout

Esempio API: Checkout con carrello

Implementazione di un carrello in pochi minutiDobbiamo aggiungere il JavaScript del carrello

<script id="googlecart-script" type="text/javascript" src="http://checkout.google.com/seller/gsc/v2/cart.js?mid={mid}" currency="USD" post-cart-to-sandbox="true">

</script>

Lo aggiungiamo alla pagina: <div id="googlecart-widget" class="align-cart"></div>

Page 9: Introduzione a Google Checkout

Esempio API: Checkout con carrello

�Qui descriviamo il prodotto aggiungendo al nostro custom HTML delle classi CSS che verranno usate come selettori dal cart per definirne le proprietá:<table> <tr class="product"> <td><img class="product-image" src="customLogo.gif"/> </td> <td class="data-cell"> <div class="product-title">GTUG Firenze Logo</div> <div class="product-price">Price: $0.99</div> <div class="product-shipping">Shipping: $0.00</div><br/> <div role="button" alt="Add to cart" tabindex="0" class="googlecart-add-button"> </div> </td> </tr></table>

Page 10: Introduzione a Google Checkout

Esempio API: Checkout con carrello

Demo su Eclipse:

Risultato su GAE: http://4.lu28882.appspot.com/

Page 11: Introduzione a Google Checkout

Carrello personalizzato

Se dobbiamo integrarci in un sito di e-commerce giá esistente (e non tra quelli giá supportati) o se per qualche motivo non vogliamo/possiamo usare il carrello di Checkout, allora dobbiamo far uso delle API per creare gli ordini da mandare a Checkout

Ora scriveremo una Servlet che simula un sistema di e-commerce che all'ultimo step chiama Checkout con il carrello giá riempito

Ovviamente per questo esempio abbiamo bisogno delle Checkout Java API reperibili a questo indirizzo:

http://code.google.com/p/google-checkout-java-sdk

Page 12: Introduzione a Google Checkout

Carrello personalizzato

public class CreateCartServlet extends HttpServlet { private static final long serialVersionUID = 1L; public static ApiContext API_CONTEXT = new ApiContext( Environment.SANDBOX, "{mid}", "{mkey}", "USD"); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { CheckoutRedirect checkoutRedirect = API_CONTEXT.cartPoster().makeCart() .addItem("GTUG Firenze Logo", "Il nostro bellissimo logo", 0.99, 2) .addItem("GWT Intro Logo", "Primo evento su GWT", 0.50, 1) .buildAndPost(); resp.sendRedirect(checkoutRedirect.getRedirectUrl()); }}

AppEngine: http://4.lu28882.appspot.com/createcart

Page 13: Introduzione a Google Checkout

Carrello personalizzato

Page 14: Introduzione a Google Checkout

Carrello personalizzato: gestione ordini

Abbiamo creato un ordine su CheckoutOra dobbiamo gestirlo !!!!Per questo dobbiamo:

configurare sul merchant la nostra callback URL, chiamata ad ogni evento (https://sandbox.google.com/checkout/sell/)implementare sul nostro server la FSM che gestisce gli eventi lato negozio

Se usiamo le API di Google l'implementazione della FSM é semplificato da una helper-class che si occupa di fare il parsing della URL e di chiamare i callback methods appropriati

Page 15: Introduzione a Google Checkout

Carrello personalizzato: configurazione callback URL sul merchant

Page 16: Introduzione a Google Checkout

Carrello personalizzato: implementazione della FSM @Override public void doPost(HttpServletRequest request, HttpServletResponse response) { API_CONTEXT.handleNotification(new BaseNotificationDispatcher(request, response) { @Override protected void rememberSerialNumber(String serialNumber, OrderSummary orderSummary, Notification notification) { service.persist(serialNumber); } @Override public boolean hasAlreadyHandled(String serialNumber, OrderSummary orderSummary, Notification notification) { return service.isPersistent(serialNumber); } }

Page 17: Introduzione a Google Checkout

Carrello personalizzato: implementazione della FSM

Tutti i particolari della FSM sono a carico delle API di Google Checkout, unica cosa a carico dello sviluppatore é mantenere traccia del numero di serie delle chiamate, implementando i metodi rememberSerialNumber e hasAlreadyHandled (chiamate duplicate).

Il metodo onAllNotifications é chiamato invece ad ogni invocazione della URL di callback e ci permette di effettuare azioni trasversali ad ogni stato, banalmente logging.

Infine il metodo piú importante é onAuthorizationAmountNotification che ci avverte che l'autorizzazione al pagamento é stata ottenuta e quindi possiamo "spedire" la nostra merce.

Page 18: Introduzione a Google Checkout

Carrello personalizzato: ricevimento callback

2011-04-03 02:48:01.773 /createcart 200 6523ms 240cpu_ms 0kb Google Checkout Notification Agent 1.0,gzip(gfe)74.125.126.82 - - [03/Apr/2011:02:48:01 -0700] "POST /createcart HTTP/1.1" 200 171 - "Google Checkout Notification Agent 1.0,gzip(gfe)" "4.lu28882.appspot.com" ms=6524 cpu_ms=7770 api_cpu_ms=0 cpm_usd=0.216077 loading_request=1

E2011-04-03 02:48:01.726net.lucamasini.checkout.servlet.CreateCartServlet$1 isPersistent: isPersistent:443704066646623-00001-7

E2011-04-03 02:48:01.728net.lucamasini.checkout.servlet.CreateCartServlet$2 onAllNotifications: onAllNotifications: Order 443704066646623 authorized and ready to ship to:Luca Masini

E2011-04-03 02:48:01.728net.lucamasini.checkout.servlet.CreateCartServlet$1 persist: persist:443704066646623-00001-7

Qui riceviamo l'evento new-order-notification e visto che il nostro codice non specifica una callback il logger visualizza solo la registrazione del serialNumber e la chiamata all'onAllNotifications

Page 19: Introduzione a Google Checkout

Carrello personalizzato: ricevimento callback

2011-04-03 02:49:04.357 /createcart 200 347ms 280cpu_ms 0kb Google Checkout Notification Agent 1.0,gzip(gfe)72.14.212.82 - - [03/Apr/2011:02:49:04 -0700] "POST /createcart HTTP/1.1" 200 171 - "Google Checkout Notification Agent 1.0,gzip(gfe)" "4.lu28882.appspot.com" ms=348 cpu_ms=280 api_cpu_ms=0 cpm_usd=0.008029

E2011-04-03 02:49:04.334net.lucamasini.checkout.servlet.CreateCartServlet$1 isPersistent: isPersistent:443704066646623-00005-6

E2011-04-03 02:49:04.334net.lucamasini.checkout.servlet.CreateCartServlet$2 onAllNotifications: onAllNotifications: Order 443704066646623 authorized and ready to ship to:Luca Masini

E2011-04-03 02:49:04.334net.lucamasini.checkout.servlet.CreateCartServlet$2 onAuthorizationAmountNotification: onAuthorizationAmountNotification: Order 443704066646623 authorized and ready to ship to:Luca Masini

E2011-04-03 02:49:04.335net.lucamasini.checkout.servlet.CreateCartServlet$1 persist: persist:443704066646623-00005-6

Ecco il secondo ed ultimo evento authorization-amount-notification nel quale ci segnala che il sistema ha autorizzato il pagamento, qui l'evento é correttamente intercettato dalla callback onAuthorizationAmountNotification

Page 20: Introduzione a Google Checkout

In-App Billing

... an Android Market service that provides checkout processing for in-app purchase.

ovvero

si possono accettare pagamenti direttamente all'interno delle appicazioni.

The standard 30% transaction fee applies to in-app transactions on Android Market.

"Today, we're pleased to announce the launch of Android Market In-app

Billing to developers and users. As an Android developer, you will now be able to publish apps that use In-app Billing and your users can make

purchases from within your apps." --- 29 March 2011

Page 21: Introduzione a Google Checkout

In-App Billing: a patto che

Only in applications that you publish through Android Market.You must have a Google Checkout Merchant account.You cannot implement in-app billing on a device that never connects to the network

You can use in-app billing to sell only digital content. You cannot use in-app billing to sell physical goods, personal services, or anything that requires physical delivery. Android Market does not provide any form of content delivery. You are responsible for delivering the digital content that you sell in your applications.

+ qualche complicazione circa le versioni di android/Market app ecc...

Page 22: Introduzione a Google Checkout

In-App Billing: schema

Your application sends and receives billing messages through the Android Market application (via a single IPC method sendBillingRequest), which handles all communication with the Android Market server.

Page 23: Introduzione a Google Checkout

In-App Billing: schema

1. Applications initiate in-app billing requests through their own UI.

2. Android Market responds to the request by providing the checkout user interface.

3. When checkout is complete, the application resumes.

Page 24: Introduzione a Google Checkout

http://developer.android.com/guide/market/billing/index.htmlhttp://www.anddev.org/advanced-tutorials-f21/simple-inapp-payment-t52060.html

You cannot use the Android emulator to test in-app billing.

In-App Billing: BILLING_REQUEST ="REQUEST_PURCHASE"

Page 25: Introduzione a Google Checkout

Google Checkout Android Payment ExtensionEstensione di Chome che permette di completare un acquisto tramite SmartPhone:

Usando Chrome da un PC per visualizzare il carrello, viene messo a disposizione un bottone verde col simbolo di Android che permette di fare l'ordine su un PC o laptop (magari ad una fiera) e di completarlo sul proprio cellulare cosi' da non dover immettere le proprie credenziali Google su un computer "pubblico".

Page 26: Introduzione a Google Checkout

Google Checkout Android Payment ExtensionCreazione di uno store usando il Google Gadget Wizard:

https://storegadgetwizard.appspot.com/storegadgetwizard/

Page 27: Introduzione a Google Checkout

Riferimenti

http://code.google.com/intl/it-IT/apis/checkout/developer/Google_Checkout_Shopping_Cart_Annotating_Pages.html

http://googlecheckout.blogspot.com/2010/06/pay-on-go-with-android-payment.html

https://chrome.google.com/extensions/detail/omomllobcfbllglbhpmafongpckhdcdn

http://developer.android.com/guide/market/billing/index.html http://www.anddev.org/advanced-tutorials-f21/simple-inapp-payment-t52060.html