Autore Topic: [facile] Come usare PayPal nelle proprie applicazioni Android  (Letto 17377 volte)

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
[facile] Come usare PayPal nelle proprie applicazioni Android
« il: 26 Aprile 2011, 12:52:15 CEST »
+10
Livello di difficoltà: facile
Target SDK: 4 o superiore
Min SDK: 3
Link al file compresso del progetto eclipse: file in allegato

Ciao a tutti !
In questo tutorial verrà spiegato come inserire un pagamento/donazione paypal all’interno di una applicazione android.

AVVERTENZA : Questo metodo NON è un’alternativa al pagamento delle applicazioni distribuite con il metodo dell’Android Market©, ne un’alternativa all’in-app billing. L’uso di questa funzionalità è da ritenersi  elusivamente valido per tutte quelle forme di pagamento e o donazioni che non viiolino i termini d’uso dell’Android Market©
Rif.http://www.android.com/us/developer-distribution-agreement.html

Detto questo cominciamo !

1. PayPal developer

Prima di tutto scaricate la libreria distribuita da PayPal da questo sito : https://www.x.com/community/ppx/sdks



Per il momento lasciate questo file  in sospeso.

Ora avrete bisogno di un account  PayPal developer per testare l’applicazione.
Quindi recatevi a questo sito : developer.paypal.com
ed effettuate una registrazione.
Una volta registrati avrete bisogno di due test account, uno da “Buyer” per effettuare il pagamento e uno da “Seller” per riceverlo.
Selezionate “Create a preconfigured account” dalla home di PayPal Sandbox, per creare un account in modo veloce.



Configurate l’account di test specifando la nazionalità, il tipo di user (Buyer o Seller) l’email(fittizia) e la password (sceglietene una o segnatevi quella auto-generata). Affinchè l’user creato sia automaticamente verificato, se scegliete come nazionalità “Italy”, ricordatevi di scegliere No nell’opzione “Add Bank Account”. Infine impostate un budget, se state configurando l’user “Seller” potete anche lasciare questo valore a zero.



Una volta creati con successo tutte e due gli accounts siete pronti per testare l’applicazione Android.



2. Integrare la libreria PayPal in Android

Scompattate il file .zip scaricato in precedenza se non l’avete ancora fatto.
Dentro al file troverete dei progetti di esempio, la documentazione e la libreria JAR, che sarà quella da includere nell’app.
Aprite Eclipse e create un nuovo progetto Android. In Package Explorer fate click con il destro sul progetto appena creato e selezionate Build Path -> Configure Build Path. Nella tab “Libraries” selezionate il tasto “Add externals JARs” e selezioniamo il file jar di PayPal scaricato in precedenza.
Ora la libreria è pronta per essere usata.

Per prima cosa aggiungete nell’Android Manifest l’Activity principale di PayPal :

Codice (XML): [Seleziona]
<activity android:name="com.paypal.android.MEP.PayPalActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation" />

Sempre nel Manifest aggiungete questi due permessi :

Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Mentre questa è un esempio di Activity di test:

Codice (Java): [Seleziona]
public class PayPalTestActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                PayPal pp = PayPal.initWithAppID(this, "APP-80W284485P519543T",
                                PayPal.ENV_SANDBOX);
               
                LinearLayout layoutSimplePayment = new LinearLayout(this);
                layoutSimplePayment.setLayoutParams(new LayoutParams(
                                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                layoutSimplePayment.setOrientation(LinearLayout.VERTICAL);
               
                CheckoutButton launchSimplePayment = pp.getCheckoutButton(this,
                                PayPal.BUTTON_194x37, CheckoutButton.TEXT_DONATE);
               
                launchSimplePayment.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View view) {
                                PayPalPayment payment = new PayPalPayment();

                                payment.setSubtotal(new BigDecimal("1.50"));

                                payment.setCurrencyType("EUR");

                                payment.setRecipient("qui_la_vostra_email_di_test");

                                payment.setPaymentType(PayPal.PAYMENT_TYPE_GOODS);

                                Intent checkoutIntent = PayPal.getInstance().checkout(payment, PayPalTestActivity.this);

                                startActivityForResult(checkoutIntent, 1);
                        }

                });

                layoutSimplePayment.addView(launchSimplePayment);
                setContentView(layoutSimplePayment);
        }
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
               
           switch(resultCode) {
              case Activity.RESULT_OK:
                  //Il pagamento è stato effettuato
                  String payKey = data.getStringExtra(PayPalActivity.EXTRA_PAY_KEY);
                  break;
              case Activity.RESULT_CANCELED:
                  // Il pagamento è stato cancellato dall’utente
                  break;
              case PayPalActivity.RESULT_FAILURE:
                  // Il pagamento non è stato effettuato a causa di errore
                  String errorID = data.getStringExtra(PayPalActivity.EXTRA_ERROR_ID);
                  String errorMessage = data.getStringExtra(PayPalActivity.EXTRA_ERROR_MESSAGE);
           }
}

Subito dopo la chiamata al metodo onCreate della classe Activity, noterete un nuovo oggetto :

Codice (Java): [Seleziona]
PayPal pp = PayPal.initWithAppID(this, "APP-80W284485P519543T",PayPal.ENV_SANDBOX);
In pratica stiamo inizializzando PayPal con un App ID. Per ora ne inseriamo uno fittizio (potete usare quello riportato qui sopra) e settiamo l’ environment : PayPal.ENV_SANDBOX, per dire all’oggetto PayPal  che stiamo usando il server di sandbox. Nel caso volessimo pubblicare la nostra app e rendere effettivo il pagamento/donazione PayPal dovremmo modificare questi parametri, ma lo vedremo più avanti.

Codice (Java): [Seleziona]
LinearLayout layoutSimplePayment = new LinearLayout(this);
layoutSimplePayment.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
layoutSimplePayment.setOrientation(LinearLayout.VERTICAL);     
CheckoutButton launchSimplePayment = pp.getCheckoutButton(this,PayPal.BUTTON_194x37, CheckoutButton.TEXT_DONATE);
layoutSimplePayment.addView(launchSimplePayment);

Con questo codice invece verrà creato un Button per effettuare un pagamento. Niente di particolare se non per il custom button di PayPal : CheckoutButton
Che viene ottenuto mediante l’oggetto PayPal istanziato in precedenza.

Codice (Java): [Seleziona]
CheckoutButton launchSimplePayment = pp.getCheckoutButton(this,PayPal.BUTTON_194x37, CheckoutButton.TEXT_DONATE);
I parametri sono 3 : Il Context, lo stile del button, che ne identifica le dimensioni e il testo del button, che potrà essere CheckoutButton.TEXT_DONATE oppure CheckoutButton.TEXT_PAY
Nell’onClick del button appena creato verrà generato un oggetto PayPalPayment, che conterrà le informazioni sul pagamento, come la valuta, il prezzo, il tipo di pagamento e l’email del ricevente. In questo campo inserite l’email dell’user “Seller” creato con l’account PayPal Sandbox.
Dopodichè verrà lanciata l’Activity principale di PayPal.


il CheckoutButton


La PayPalActivity

Quando apparirà questa Activity, inserite come dati del login, email e password dell’utente di test “Buyer” ed effettuate il pagamento. L’applicazione si collegherà al server di PayPal ed effettuerà la transazione.
Per verificare l'esito della transazione, nella pagina di riepilogo delle email d test, sul sito PayPal Sandbox, selezionate l’email “Seller” (Business) e cliccate su “Enter Sandbox test site”. Apparirà una finestra simile alla home di PayPal, con l’unica differenza che dovrete immetere come dati del login, l’email di test e relativa password. Nella pagina di riepilogo delle transazioni potrete osservare come il pagamento/donazione effettuato con l’applicazione Android è andato a buon fine ! Potete eseguire la stessa procedura per l’utente di test “Buyer” (Personal).



In ultimo, ma non meno importante, potete gestire l’esito della transazione direttamente nell’app, facendo l’override del metodo onActivityResult.

Codice (Java): [Seleziona]
switch(resultCode) {
 case Activity.RESULT_OK:
     //Il pagamento è stato effettuato
     String payKey = data.getStringExtra(PayPalActivity.EXTRA_PAY_KEY);
     break;
 case Activity.RESULT_CANCELED:
    // Il pagamento è stato cancellato dall’utente
    break;
 case PayPalActivity.RESULT_FAILURE:
    // Il pagamento non è stato effettuato a causa di un errore
    String errorID = data.getStringExtra(PayPalActivity.EXTRA_ERROR_ID);
    String errorMessage = data.getStringExtra(PayPalActivity.EXTRA_ERROR_MESSAGE);
}

L’intent restituito al metodo onActivityResult conterrà degli extra che potranno essere gestiti dall’app, come il codice di pagamento, o i relativi codici e messaggi di errore eventualmente scaturiti durante la transazione.
Nella documentazione ufficiale di PayPal, tuttavia, viene consigliato di usare un’interfaccia, facendo l’override dei suoi metodi :

Codice (Java): [Seleziona]
public interface PayPalResultDelegate{
void onPaymentSucceeded(String payKey, String paymentStatus);
void onPaymentFailed(String paymentStatus, String correlationID, String payKey, String errorID, String errorMessage);
void onPaymentCanceled(String paymentStatus);
}

Questo è un modo per essere immediatamente informati sull’esito della transazione, invece di dover attendere il ritorno all’Activity in background e il relativo onActivityResult.

Un ultima precisazione :
All’inizio del tutorial specificai che l’oggetto PayPal, creato con il metodo initWithAppID, aveva più di un metodo per essere inizializzato. Questi modi sono 3. Uno è stato usato per questo tutorial : PayPal.ENV_SANDBOX

Gli altri sono
PayPal.ENV_NONE : Il quale non utilizza nessun server e non effettuato nessun collegamento internet. Viene usato per modalità di test off-line.
PayPal.ENV_LIVE : a differenza dell’ambiente SANDBOX, con questa opzione si utilizza il server principale di PayPal, ed è quello che dovrà essere settato per effettuare in modo reale i pagamenti/donazioni

Per quanto riguarda l’AppID, PayPal chiede di inviare la propria applicazione, prima di essere pubblicata, ai loro server, e dopo successiva approvazione vi verrà inviata la vostra personale AppID, che dovrete successivamente modificare nel codice, insieme al tipo di environment (PayPal.ENV_LIVE) e l’email per ricevere i pagamenti.

That’s all folks ! ;-)

Tutte le immagini sono tratte dal sito : developer.paypal.com e sono di proprietà dei relativi autori.
Le informazioni per la redazione di questo tutorial sono state prese dal sito : https://www.x.com

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #1 il: 26 Aprile 2011, 13:18:01 CEST »
0
Wow :D Grazie e complimenti per il tutorial!
Qualche mese fa stavo proprio valutando se utilizzare paypal all'interno di una mia applicazione :)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #2 il: 27 Aprile 2011, 09:33:36 CEST »
0
great job.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #3 il: 27 Aprile 2011, 12:51:24 CEST »
0
Inizialmente stavo usando anche io questa libreria per la mia applicazione, poi non l'ho usata per un semplice motivo: non puoi personalizzare il pulsante di donazione, o meglio non puoi impostare un ID cosi come avviene per i pulsanti web normali.

Sai se hanno implementato questa feature?

Offline Khali

  • Utente junior
  • **
  • Post: 70
  • Respect: +7
    • u.felloni
    • Mostra profilo
  • Play Store ID:
    weetme software
  • Sistema operativo:
    windows 7
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #4 il: 27 Aprile 2011, 13:09:50 CEST »
0
Ottimo tutorial!

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #5 il: 28 Aprile 2011, 00:36:02 CEST »
0
Inizialmente stavo usando anche io questa libreria per la mia applicazione, poi non l'ho usata per un semplice motivo: non puoi personalizzare il pulsante di donazione, o meglio non puoi impostare un ID cosi come avviene per i pulsanti web normali.

Sai se hanno implementato questa feature?

Ma dici il "Donation ID" ? Mmh bella domanda. Non mi sembra di aver visto nulla del genere nella documentazione allegata alla libreria e nemmeno in rete ho trovato molto a riguardo.
Anche se non ho provato, teoricamente si potrebbe buttare il classico pulsante web in una WebView, facendogli caricare invece che un URI una pagina html inclusa dentro l'app :-P
In teoria dovrebbe funzionare...ma non l'ho mai provato.

Offline mangusto

  • Utente normale
  • ***
  • Post: 152
  • Respect: +5
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    ZTE Blade
  • Play Store ID:
    Leonardo Preti
  • Sistema operativo:
    Windows 7
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #6 il: 28 Aprile 2011, 19:27:15 CEST »
0
Inizialmente stavo usando anche io questa libreria per la mia applicazione, poi non l'ho usata per un semplice motivo: non puoi personalizzare il pulsante di donazione, o meglio non puoi impostare un ID cosi come avviene per i pulsanti web normali.

Sai se hanno implementato questa feature?
Il tutorial è veramente ben fatto (non sapevo che esistesse una libreria PayPal, pensavo si dovesse per forza aprire il browser indirizzando alla pagina di donazione!) ma anche a me non servirebbe il pulsante come lo prevedono loro, ma preferirei una voce in un Option Menu.
E' possibile farlo secondo voi?

Offline al_chiappone

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-S5570
  • Play Store ID:
    Stefano Benamati
  • Sistema operativo:
    Ubuntu
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #7 il: 18 Aprile 2012, 21:21:03 CEST »
0
Grazie teskio, ho seguito il tuo tutorial ed ha funzionato tutto al primo colpo. Non sono abituato...

Ho notato però un errore nella libreria: il bottone può essere usato solamente una volta; la seconda non funziona perché non viene più chiamata la OnClickListener. Ecco la sequenza per riprodurre l'errore:

1) creare uno o più bottoni paypal
2) impostare OnClickListener (può anche essere una funzione vuota, metteteci un Log.d)
3) cliccare su uno dei bottoni creati. OnClickListener viene chiamato.
4) provate a cliccare un'altra volta su uno qualsiasi dei bottoni paypal. OnClickListener non viene più chiamato.

Indipendentemente da quale bottone cliccate, la seconda volta TUTTI i bottoni smettono di inviare l'evento di click.

Io ho risolto creando una funzione che ricrea l'oggetto PayPal e tutti i bottoni e poi la chiamo in onResume().

Stefano

Offline gianlucasaroni

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Google+
    • gianlucasaroni
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Play Store ID:
    Gianluca Saroni
  • Sistema operativo:
    Mac OS X 10.7.3
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #8 il: 27 Aprile 2012, 10:47:36 CEST »
0
scusate, non trovo indicazioni sul web, ma è possibili inserire il button di paypal direttamente da xml ?

Grazie,
Gianluca.

EDIT: risolto devo farlo da codice... scusate.
« Ultima modifica: 27 Aprile 2012, 14:11:10 CEST da gianlucasaroni »

Offline al_chiappone

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-S5570
  • Play Store ID:
    Stefano Benamati
  • Sistema operativo:
    Ubuntu
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #9 il: 27 Aprile 2012, 21:09:38 CEST »
0
Non saprei dirti, ma non credo che sia una buona idea perché per creare il bottone sembra che l'API faccia una connessione al sito e questo rallenta la creazione dell'activity. Io per evitare che l'activity ci metta troppo ad apparire e l'utente possa pensare che la mia applicazione sia bacata aggiungo i bottoni nell'onCreate e metto una progress dialog.

Invece, per tutti quelli che non hanno capito come creare l'appID riassumo la procedura visto che non è proprio immediato trovarla su Internet.

1) devi avere un account paypal premier o business verificati
2) accedi a https://www.paypal.com/it/cgi-bin/webscr?cmd=_profile-api-access
3) richiedi credenziali API (opzione 2)
4) richiedi la firma API
5) connettiti a https://www.x.com/developers/paypal e usa le tue credenziali paypal per accedere
6) seguire il link "my account" i alto a destra
7) link a sinistra, "new app", completate il formulario e aspettate l'abilitazione. Nel mio caso è stata immediata.

Buona fortuna

Offline tom

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #10 il: 12 Giugno 2012, 17:19:44 CEST »
0
scusate il disturbo, ma a me l'applicazione non parte.
ma siamo sicuri che il numero iniziale "APP-80W284485P519543T",
 funzioni con tutti?
aspetto risposte

Offline al_chiappone

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-S5570
  • Play Store ID:
    Stefano Benamati
  • Sistema operativo:
    Ubuntu
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #11 il: 12 Giugno 2012, 19:08:43 CEST »
0
Quella stringa fa riferimento al codice assegnato da Paypal all'applicazione che richiede il pagamento. Il codice è personale e lo ottieni eseguendo la procedura che ho postato più sopra.

Offline tom

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #12 il: 13 Giugno 2012, 18:52:51 CEST »
0
mi spiego meglio:
io voglio utilizzare l'applicazione per fare in modo di fare un test di pagamento senza utilizzare veramente dei soldi.
scrivendo il codice java in eclipse non mi parte niente. E' normale sta cosa?


Offline al_chiappone

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Samsung GT-S5570
  • Play Store ID:
    Stefano Benamati
  • Sistema operativo:
    Ubuntu
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #13 il: 13 Giugno 2012, 19:51:19 CEST »
0
È molto tempo che ho fatto i miei esperimenti, ma mi sembra di ricordare che per fare dei test non hai bisogno del codice.
Per fare un test di pagamento senza utilizzare soldi veri devi invece per forza fare tutti i passaggi per la creazione degli utenti di test come ha spiegato teskio.

Offline tom

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
Re:[facile] Come usare PayPal nelle proprie applicazioni Android
« Risposta #14 il: 13 Giugno 2012, 20:49:40 CEST »
0
grazie,
ma il problema è che ho fatto tutto quello che ha scritto teskio e non mi parte. Non compare nessun pulsante text_donate e mi dice quando faccio partire l'emulatore "my pay pal activity has stopped".
Non riesco a capire il perchè. Eppure il codice non presenta errori nella scrittura.