Introduzione a Google Checkout
-
Upload
firenze-gtug -
Category
Technology
-
view
1.945 -
download
0
description
Transcript of Introduzione a Google Checkout
Google e i pagamenti elettronici
Firenze GTUG, 15.04.2011Luca Masini
Agenda
Introduzione a Google Checkout Intro alle API ed esempi di utilizzo Carrello personalizzato In-App billing Android Payment Extensions
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
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
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
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 !!!
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" />
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>
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>
Esempio API: Checkout con carrello
Demo su Eclipse:
Risultato su GAE: http://4.lu28882.appspot.com/
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
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
Carrello personalizzato
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
Carrello personalizzato: configurazione callback URL sul merchant
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); } }
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.
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
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
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
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...
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.
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.
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"
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".
Google Checkout Android Payment ExtensionCreazione di uno store usando il Google Gadget Wizard:
https://storegadgetwizard.appspot.com/storegadgetwizard/
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