PayPal Android: accettazione di un pagamento con carta di credito / PayPal


Esempio

In questo tutorial impareremo come configurare l' SDK Android PayPal per elaborare un semplice pagamento tramite un pagamento PayPal o un acquisto con carta di credito. Alla fine di questo esempio, si dovrebbe avere un semplice pulsante in un'applicazione che, quando si fa clic, inoltrerà l'utente a PayPal per confermare un pagamento impostato, quindi restituirà l'utente all'applicazione e registrerà la conferma del pagamento.

Il codice completo dell'applicazione per questo esempio è disponibile nel repository Github per sviluppatori PayPal .

Iniziamo.

Il primo passo è ottenere e aggiungere l'SDK al tuo progetto . Aggiungiamo il riferimento alle nostre dipendenze build.gradle in questo modo:

dependencies {
    compile 'com.paypal.sdk:paypal-android-sdk:2.14.1'
    ...
}

Ora ci dirigiamo verso il nostro file MainActivity.java (o ovunque desideri aggiungere l'integrazione del pulsante PayPal) e aggiungiamo un oggetto di config per il nostro ID client e l'ambiente (sandbox) che useremo.

private static PayPalConfiguration config = new PayPalConfiguration()
    .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)
    .clientId("YOUR CLIENT ID");

Ora creeremo un pulsante nel nostro onCreate(...) , che ci consentirà di elaborare un pagamento tramite PayPal una volta cliccato.

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button button = (Button) findViewById(R.id.paypal_button);
}

Ora dobbiamo definire la funzionalità per quel pulsante. Nel file di ricerca> layout> file XML principale è possibile aggiungere la seguente definizione per il pulsante, che definirà il testo e il gestore onClick per il pulsante con l'ID paypal_button.

<Button android:id="@+id/paypal_button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/paypal_button"
    android:onClick="beginPayment" />

Quando si fa clic, il pulsante chiamerà il beginPayment(...) . Possiamo quindi aggiungere il testo per il pulsante al nostro file strings.xml, in questo modo:

<string name="paypal_button">Pay with PayPal</string>

Con il pulsante in atto, ora dobbiamo gestire il clic del pulsante per iniziare l'elaborazione dei pagamenti. Aggiungi il seguente beginPayment(...) sotto il nostro precedente metodo onCreate(...) .

public void beginPayment(View view){
    Intent serviceConfig = new Intent(this, PayPalService.class);
    serviceConfig.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    startService(serviceConfig);

    PayPalPayment payment = new PayPalPayment(new BigDecimal("5.65"), 
        "USD", "My Awesome Item", PayPalPayment.PAYMENT_INTENT_SALE);

    Intent paymentConfig = new Intent(this, PaymentActivity.class);
    paymentConfig.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
    paymentConfig.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);
    startActivityForResult(paymentConfig, 0);
}

Quello che stiamo facendo qui è la prima impostazione dell'intento di servizio ( serviceConfig ), utilizzando la config che avevamo precedentemente definito per il nostro ID client e l'ambiente sandbox. Specifichiamo quindi l'oggetto di pagamento che vogliamo elaborare. Per il gusto di questo esempio, stiamo impostando un prezzo, una valuta e una descrizione statici. Nella tua applicazione finale, questi valori dovrebbero essere ottenuti da ciò che l'utente sta cercando di acquistare nell'applicazione. Infine, impostiamo il paymentConfig , aggiungendo sia gli oggetti config e payment che avevamo precedentemente definito, sia paymentConfig l'attività.

A questo punto l'utente verrà presentato con le schermate di accesso e pagamento PayPal, consentendo loro di scegliere se pagare con PayPal o con carta di credito (tramite inserimento manuale o card.io se la fotocamera è disponibile). Quella schermata sarà simile a questa:

Schermata di conferma del pagamento PayPal

Una volta terminato, è necessario disporre di un gestore pronto per quando PayPal inoltrerà l'utente indietro all'applicazione dopo la conferma del pagamento o della cancellazione. onActivityResult(...) per questo scopo.

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data){
    if (resultCode == Activity.RESULT_OK){
        PaymentConfirmation confirm = data.getParcelableExtra(
            PaymentActivity.EXTRA_RESULT_CONFIRMATION);
        if (confirm != null){
            try {
                Log.i("sampleapp", confirm.toJSONObject().toString(4));

                // TODO: send 'confirm' to your server for verification

            } catch (JSONException e) {
                Log.e("sampleapp", "no confirmation data: ", e);
            }
        }
    } else if (resultCode == Activity.RESULT_CANCELED) {
        Log.i("sampleapp", "The user canceled.");
    } else if (resultCode == PaymentActivity.RESULT_EXTRAS_INVALID) {
        Log.i("sampleapp", "Invalid payment / config set");
    }
}

All'interno del onActivityResult(...) , stiamo verificando se il resultCode che viene restituito è RESULT_OK (pagamento confermato dall'utente), RESULT_CANCELED (pagamento annullato dall'utente) o RESULT_EXTRAS_INVALID (c'era un problema di configurazione). Nel caso di una conferma valida, otteniamo l'oggetto che viene restituito dal pagamento e, in questo esempio, registrarlo. Quello che ci verrà restituito dovrebbe apparire come il seguente:

{
    "client": {
        "environment": "sandbox",
        "paypal_sdk_version": "2.14.1",
        "platform": "Android",
        "product_name": "PayPal-Android-SDK"
    },
    "response": {
        "create_time": "2016-05-02T15:33:43Z",
        "id": "PAY-0PG63447RB821630KK1TXGTY",
        "intent": "sale",
        "state": "approved"
    },
    "response_type": "payment"
}

Se guardiamo sotto l'oggetto response , possiamo vedere che abbiamo uno state di approved , il che significa che il pagamento è stato confermato. A questo punto, quell'oggetto dovrebbe essere inviato al tuo server per confermare che il pagamento è stato effettivamente effettuato. Per ulteriori informazioni su questi passaggi, consultare questi documenti .

Il nostro ultimo passo è ripulire il nostro onDestroy(...) .

@Override
public void onDestroy(){
    stopService(new Intent(this, PayPalService.class));
    super.onDestroy();
}

Questo è tutto ciò che c'è da fare. In questo esempio abbiamo creato un semplice pulsante per elaborare un pagamento con PayPal o una carta di credito. Da questo punto, ci sono alcuni prossimi passi per espandere questo esempio:

  • beginPayment(...) dinamicamente le informazioni di pagamento in base alla selezione del prodotto dell'utente nel metodo beginPayment(...) .
  • Inviando la conferma di pagamento al tuo server e verificando che il pagamento sia effettivamente andato a buon fine.
  • Gestione dei casi di errore e cancellazione dell'utente all'interno dell'app.