Introduzione a Google Checkout
-
Upload
firenze-gtug -
Category
Technology
-
view
1.945 -
download
0
description
Transcript of Introduzione a Google Checkout
![Page 1: Introduzione a Google Checkout](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/1.jpg)
Google e i pagamenti elettronici
Firenze GTUG, 15.04.2011Luca Masini
![Page 2: Introduzione a Google Checkout](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/2.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/3.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/4.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/5.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/6.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/7.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/8.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/9.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/10.jpg)
Esempio API: Checkout con carrello
Demo su Eclipse:
Risultato su GAE: http://4.lu28882.appspot.com/
![Page 11: Introduzione a Google Checkout](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/11.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/12.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/13.jpg)
Carrello personalizzato
![Page 14: Introduzione a Google Checkout](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/14.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/15.jpg)
Carrello personalizzato: configurazione callback URL sul merchant
![Page 16: Introduzione a Google Checkout](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/16.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/17.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/18.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/19.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/20.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/21.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/22.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/23.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/24.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/25.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/26.jpg)
Google Checkout Android Payment ExtensionCreazione di uno store usando il Google Gadget Wizard:
https://storegadgetwizard.appspot.com/storegadgetwizard/
![Page 27: Introduzione a Google Checkout](https://reader034.fdocuments.net/reader034/viewer/2022042613/545c52bcb1af9f500a8b4733/html5/thumbnails/27.jpg)
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