SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Google e i pagamenti
     elettronici
  Firenze GTUG, 15.04.2011
       Luca 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
                     venditori
                     I voti sono da 1 a 10
                     Checkout ottiene un voto
                     > 7 in 5 indicatori su 6
                     L'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 utenti
    Merchant 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 minuti
   Dobbiamo 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 Checkout
  Ora 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


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
      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
Carrello personalizzato: ricevimento callback


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
     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
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.
In-App Billing:
BILLING_REQUEST ="REQUEST_PURCHASE"




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



You cannot use the Android emulator to test in-app billing.
Google Checkout
Android Payment Extension
Estensione 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 Extension
Creazione 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_Car
t_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

Contenu connexe

Similaire à Introduzione a Google Checkout

Google Analytics 2013
Google Analytics 2013Google Analytics 2013
Google Analytics 2013DML Srl
 
Gestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzatoGestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzatoARXivar
 
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestreSistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestrematteotrau
 
Accettazione E-commerce sempre più semplificata il ruolo di Banca Sella - Gi...
Accettazione E-commerce sempre più semplificata il ruolo di Banca Sella - Gi...Accettazione E-commerce sempre più semplificata il ruolo di Banca Sella - Gi...
Accettazione E-commerce sempre più semplificata il ruolo di Banca Sella - Gi...Ecommerce HUB
 
Installa web master su wordpress
Installa web master su wordpressInstalla web master su wordpress
Installa web master su wordpressCity Planner
 
Presentazione Gruppo di Acquisto
Presentazione Gruppo di AcquistoPresentazione Gruppo di Acquisto
Presentazione Gruppo di Acquistopasquale de biase
 
Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Marco Albarelli
 
ASP.NET MVC3 - Tutti i compiti del Controller
ASP.NET MVC3 - Tutti i compiti del ControllerASP.NET MVC3 - Tutti i compiti del Controller
ASP.NET MVC3 - Tutti i compiti del ControllerManuel Scapolan
 
Twinergy Solution:Agenti+ soluzione SAP per la gestione agenti
Twinergy Solution:Agenti+ soluzione SAP per la gestione agentiTwinergy Solution:Agenti+ soluzione SAP per la gestione agenti
Twinergy Solution:Agenti+ soluzione SAP per la gestione agentiTwinergy
 
Checklist Set Up Base Google Analytics
Checklist Set Up Base Google AnalyticsChecklist Set Up Base Google Analytics
Checklist Set Up Base Google AnalyticsStefano Salustri
 
Il cloud al servizio della gestione alberghiera - Giuseppe Pellegrini
Il cloud al servizio della gestione alberghiera - Giuseppe PellegriniIl cloud al servizio della gestione alberghiera - Giuseppe Pellegrini
Il cloud al servizio della gestione alberghiera - Giuseppe PellegriniBTC - la fiera degli eventi
 
Advertising World
Advertising WorldAdvertising World
Advertising Worlddanielec9
 
Portarsi A Casa Uno Stipendo Con Wordpress
Portarsi A Casa Uno Stipendo Con WordpressPortarsi A Casa Uno Stipendo Con Wordpress
Portarsi A Casa Uno Stipendo Con WordpressLuca Mercatanti
 
Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018leorob
 

Similaire à Introduzione a Google Checkout (20)

Google Analytics 2013
Google Analytics 2013Google Analytics 2013
Google Analytics 2013
 
Gestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzatoGestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzato
 
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestreSistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
 
App gratis
App gratisApp gratis
App gratis
 
Hotel & Resort Bit
Hotel & Resort BitHotel & Resort Bit
Hotel & Resort Bit
 
SIMPLE - Smart ticketing
SIMPLE - Smart ticketingSIMPLE - Smart ticketing
SIMPLE - Smart ticketing
 
Accettazione E-commerce sempre più semplificata il ruolo di Banca Sella - Gi...
Accettazione E-commerce sempre più semplificata il ruolo di Banca Sella - Gi...Accettazione E-commerce sempre più semplificata il ruolo di Banca Sella - Gi...
Accettazione E-commerce sempre più semplificata il ruolo di Banca Sella - Gi...
 
Installa web master su wordpress
Installa web master su wordpressInstalla web master su wordpress
Installa web master su wordpress
 
Presentazione Gruppo di Acquisto
Presentazione Gruppo di AcquistoPresentazione Gruppo di Acquisto
Presentazione Gruppo di Acquisto
 
Easymoove ITA
Easymoove ITAEasymoove ITA
Easymoove ITA
 
Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)Autenticazione delle api con jwt e symfony (Italian)
Autenticazione delle api con jwt e symfony (Italian)
 
Creare PWA con Angular
Creare PWA con AngularCreare PWA con Angular
Creare PWA con Angular
 
ASP.NET MVC3 - Tutti i compiti del Controller
ASP.NET MVC3 - Tutti i compiti del ControllerASP.NET MVC3 - Tutti i compiti del Controller
ASP.NET MVC3 - Tutti i compiti del Controller
 
Twinergy Solution:Agenti+ soluzione SAP per la gestione agenti
Twinergy Solution:Agenti+ soluzione SAP per la gestione agentiTwinergy Solution:Agenti+ soluzione SAP per la gestione agenti
Twinergy Solution:Agenti+ soluzione SAP per la gestione agenti
 
Checklist Set Up Base Google Analytics
Checklist Set Up Base Google AnalyticsChecklist Set Up Base Google Analytics
Checklist Set Up Base Google Analytics
 
Il cloud al servizio della gestione alberghiera - Giuseppe Pellegrini
Il cloud al servizio della gestione alberghiera - Giuseppe PellegriniIl cloud al servizio della gestione alberghiera - Giuseppe Pellegrini
Il cloud al servizio della gestione alberghiera - Giuseppe Pellegrini
 
Advertising World
Advertising WorldAdvertising World
Advertising World
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Portarsi A Casa Uno Stipendo Con Wordpress
Portarsi A Casa Uno Stipendo Con WordpressPortarsi A Casa Uno Stipendo Con Wordpress
Portarsi A Casa Uno Stipendo Con Wordpress
 
Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018
 

Plus de firenze-gtug

Html5 apps - GWT oriented
Html5 apps - GWT orientedHtml5 apps - GWT oriented
Html5 apps - GWT orientedfirenze-gtug
 
Android ndk - ottimizzazione su dispositivi Intel
Android ndk - ottimizzazione su dispositivi IntelAndroid ndk - ottimizzazione su dispositivi Intel
Android ndk - ottimizzazione su dispositivi Intelfirenze-gtug
 
Gwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca TosiGwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca Tosifirenze-gtug
 
Youtube broadcast live - Massimiliano D'Ambrosio
Youtube broadcast live - Massimiliano D'AmbrosioYoutube broadcast live - Massimiliano D'Ambrosio
Youtube broadcast live - Massimiliano D'Ambrosiofirenze-gtug
 
Intro BeagleBone Black - Massimiliano D'Ambrosio
Intro BeagleBone Black - Massimiliano D'AmbrosioIntro BeagleBone Black - Massimiliano D'Ambrosio
Intro BeagleBone Black - Massimiliano D'Ambrosiofirenze-gtug
 
Arduino - Massimiliano D'Ambrosio
Arduino - Massimiliano D'AmbrosioArduino - Massimiliano D'Ambrosio
Arduino - Massimiliano D'Ambrosiofirenze-gtug
 
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
Introduzione a GAE - Alessandro Aglietti e Lorenzo BugianiIntroduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugianifirenze-gtug
 
RFID: What & Why - Stefano Coluccini
RFID: What & Why - Stefano ColucciniRFID: What & Why - Stefano Coluccini
RFID: What & Why - Stefano Coluccinifirenze-gtug
 
GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)firenze-gtug
 
Presentazione Google App Engine
Presentazione Google App EnginePresentazione Google App Engine
Presentazione Google App Enginefirenze-gtug
 
Android chat in the cloud
Android chat in the cloudAndroid chat in the cloud
Android chat in the cloudfirenze-gtug
 
Clean android code
Clean android codeClean android code
Clean android codefirenze-gtug
 
Intel ndk - a few Benchmarks
Intel ndk - a few BenchmarksIntel ndk - a few Benchmarks
Intel ndk - a few Benchmarksfirenze-gtug
 
EE Incremental Store
EE Incremental StoreEE Incremental Store
EE Incremental Storefirenze-gtug
 
Programming objects with android
Programming objects with androidProgramming objects with android
Programming objects with androidfirenze-gtug
 
Apertura "Mobile & Embedded" - 13 febbraio 2014
Apertura "Mobile & Embedded" - 13 febbraio 2014Apertura "Mobile & Embedded" - 13 febbraio 2014
Apertura "Mobile & Embedded" - 13 febbraio 2014firenze-gtug
 
Dev fest android application case study
Dev fest android application   case studyDev fest android application   case study
Dev fest android application case studyfirenze-gtug
 
google drive and the google drive sdk
google drive and the google drive sdkgoogle drive and the google drive sdk
google drive and the google drive sdkfirenze-gtug
 

Plus de firenze-gtug (20)

Html5 apps - GWT oriented
Html5 apps - GWT orientedHtml5 apps - GWT oriented
Html5 apps - GWT oriented
 
Android ndk - ottimizzazione su dispositivi Intel
Android ndk - ottimizzazione su dispositivi IntelAndroid ndk - ottimizzazione su dispositivi Intel
Android ndk - ottimizzazione su dispositivi Intel
 
Gwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca TosiGwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca Tosi
 
Youtube broadcast live - Massimiliano D'Ambrosio
Youtube broadcast live - Massimiliano D'AmbrosioYoutube broadcast live - Massimiliano D'Ambrosio
Youtube broadcast live - Massimiliano D'Ambrosio
 
Intro BeagleBone Black - Massimiliano D'Ambrosio
Intro BeagleBone Black - Massimiliano D'AmbrosioIntro BeagleBone Black - Massimiliano D'Ambrosio
Intro BeagleBone Black - Massimiliano D'Ambrosio
 
Arduino - Massimiliano D'Ambrosio
Arduino - Massimiliano D'AmbrosioArduino - Massimiliano D'Ambrosio
Arduino - Massimiliano D'Ambrosio
 
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
Introduzione a GAE - Alessandro Aglietti e Lorenzo BugianiIntroduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
 
RFID: What & Why - Stefano Coluccini
RFID: What & Why - Stefano ColucciniRFID: What & Why - Stefano Coluccini
RFID: What & Why - Stefano Coluccini
 
GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)
 
Presentazione Google App Engine
Presentazione Google App EnginePresentazione Google App Engine
Presentazione Google App Engine
 
Android chat in the cloud
Android chat in the cloudAndroid chat in the cloud
Android chat in the cloud
 
Clean android code
Clean android codeClean android code
Clean android code
 
#Html2Native
#Html2Native#Html2Native
#Html2Native
 
Intel ndk - a few Benchmarks
Intel ndk - a few BenchmarksIntel ndk - a few Benchmarks
Intel ndk - a few Benchmarks
 
EE Incremental Store
EE Incremental StoreEE Incremental Store
EE Incremental Store
 
Programming objects with android
Programming objects with androidProgramming objects with android
Programming objects with android
 
Apertura "Mobile & Embedded" - 13 febbraio 2014
Apertura "Mobile & Embedded" - 13 febbraio 2014Apertura "Mobile & Embedded" - 13 febbraio 2014
Apertura "Mobile & Embedded" - 13 febbraio 2014
 
Apps fuel oct2012
Apps fuel oct2012Apps fuel oct2012
Apps fuel oct2012
 
Dev fest android application case study
Dev fest android application   case studyDev fest android application   case study
Dev fest android application case study
 
google drive and the google drive sdk
google drive and the google drive sdkgoogle drive and the google drive sdk
google drive and the google drive sdk
 

Introduzione a Google Checkout

  • 1. Google e i pagamenti elettronici Firenze GTUG, 15.04.2011 Luca Masini
  • 2. Agenda Introduzione a Google Checkout Intro alle API ed esempi di utilizzo Carrello personalizzato In-App billing Android Payment Extensions
  • 3. Il mercato dei merchant server Indice di gradimento dei venditori I voti sono da 1 a 10 Checkout ottiene un voto > 7 in 5 indicatori su 6 L'unico che ottiene un voto > 7 nell'indice di gradimento dei compratori e' PayPal
  • 4. 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
  • 5. 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
  • 6. Prima di cominciare: Sandbox Grande disponibilitá di strumenti per sviluppatori Sandbox - due componenti: Un gestore di account utenti Merchant 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 !!!
  • 7. 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" />
  • 8. Esempio API: Checkout con carrello Implementazione di un carrello in pochi minuti Dobbiamo 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>
  • 9. 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>
  • 10. Esempio API: Checkout con carrello Demo su Eclipse: Risultato su GAE: http://4.lu28882.appspot.com/
  • 11. 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
  • 12. 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
  • 14. Carrello personalizzato: gestione ordini Abbiamo creato un ordine su Checkout Ora 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
  • 16. 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); } }
  • 17. 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.
  • 18. Carrello personalizzato: ricevimento callback 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 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
  • 19. Carrello personalizzato: ricevimento callback 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 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
  • 20. 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
  • 21. 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...
  • 22. 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.
  • 23. 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.
  • 24. In-App Billing: BILLING_REQUEST ="REQUEST_PURCHASE" http://developer.android.com/guide/market/billing/index.html http://www.anddev.org/advanced-tutorials-f21/simple-inapp-payment-t52060.html You cannot use the Android emulator to test in-app billing.
  • 25. Google Checkout Android Payment Extension Estensione 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".
  • 26. Google Checkout Android Payment Extension Creazione di uno store usando il Google Gadget Wizard: https://storegadgetwizard.appspot.com/storegadgetwizard/