PayPal Android: Akzeptieren einer Zahlung per PayPal / Kreditkarte


Beispiel

In diesem Lernprogramm erfahren Sie, wie Sie das PayPal Android SDK einrichten, um eine einfache Zahlung entweder über eine PayPal-Zahlung oder einen Kreditkartenkauf abzuwickeln. Am Ende dieses Beispiels sollten Sie über eine einfache Schaltfläche in einer Anwendung verfügen, die den Benutzer nach dem Anklicken an PayPal weiterleitet, um eine festgelegte Zahlung zu bestätigen, den Benutzer anschließend an die Anwendung zurückzugeben und die Zahlungsbestätigung zu protokollieren.

Der vollständige Anwendungscode für dieses Beispiel ist im PayPal Developer Github Repository verfügbar.

Lass uns anfangen.

Der erste Schritt besteht darin , das SDK zu erhalten und zu Ihrem Projekt hinzuzufügen . Wir fügen den Bezug zu unseren build.gradle-Abhängigkeiten wie folgt hinzu:

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

Jetzt gehen wir zu unserer MainActivity.java-Datei (oder wo immer Sie die Integration der PayPal-Schaltfläche hinzufügen möchten) und fügen ein config für unsere Client-ID und die Umgebung (Sandbox) hinzu, die wir verwenden werden.

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

Jetzt erstellen wir eine Schaltfläche in unserer onCreate(...) -Methode, die es uns ermöglicht, eine Zahlung per PayPal zu onCreate(...) , sobald Sie darauf klicken.

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

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

Nun müssen wir die Funktionalität für diese Schaltfläche definieren. In Ihrer res> layout> XML-Hauptdatei können Sie die folgende Definition für die Schaltfläche hinzufügen, die den Text und den onClick-Handler für die Schaltfläche mit der paypal_button-ID definiert.

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

Wenn Sie darauf beginPayment(...) ruft die beginPayment(...) Methode beginPayment(...) . Wir können dann den Text für die Schaltfläche unserer Datei strings.xml hinzufügen, wie folgt:

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

Wenn die Schaltfläche aktiviert ist, müssen wir jetzt mit dem Klicken auf die Schaltfläche klicken, um die Zahlungsabwicklung zu starten. Fügen Sie in der folgenden beginPayment(...) -Methode unterhalb unserer vorherigen onCreate(...) -Methode hinzu.

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);
}

Was wir hier tun, ist zuerst das Service-Intent ( serviceConfig ) einzurichten, indem wir die config , die wir zuvor für unsere Client-ID und die Sandbox-Umgebung definiert hatten. Wir geben dann das Zahlungsobjekt an, das wir bearbeiten möchten. In diesem Beispiel legen wir einen statischen Preis, eine Währung und eine Beschreibung fest. In Ihrer endgültigen Anwendung sollten diese Werte von dem abgerufen werden, was der Benutzer in der Anwendung zu kaufen versucht. Schließlich setzen wir die oben paymentConfig und fügte hinzu , sowohl in der config und payment Objekte , die wir zuvor definiert hatten, und die Aktivität beginnen.

An diesem Punkt werden dem Benutzer die PayPal-Anmeldungs- und Zahlungsbildschirme angezeigt, in denen er auswählen kann, ob Sie mit PayPal oder einer Kreditkarte bezahlen möchten (über die manuelle Eingabe oder card.io, falls die Kamera verfügbar ist). Dieser Bildschirm sieht ungefähr so ​​aus:

PayPal-Bestätigungsbildschirm

Anschließend benötigen wir einen Handler, der bereit ist, wenn PayPal den Benutzer nach Bestätigung der Zahlung oder Stornierung an die Anwendung weiterleitet. Lassen Sie uns onActivityResult(...) für diesen Zweck überschreiben.

@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");
    }
}

Innerhalb der onActivityResult(...) -Methode überprüfen wir, ob der zurückgegebene resultCode RESULT_OK (vom Benutzer bestätigte Zahlung), RESULT_CANCELED (vom Benutzer stornierte Zahlung) oder RESULT_EXTRAS_INVALID (es gab ein Konfigurationsproblem) gibt. Im Falle einer gültigen Bestätigung erhalten wir das Objekt, das von der Zahlung zurückgegeben wird, und protokollieren es in diesem Beispiel. Was an uns zurückgegeben wird, sollte in etwa wie folgt aussehen:

{
    "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"
}

Wenn wir unter dem response nachsehen, können wir feststellen, dass wir einen approved state approved , was bedeutet, dass die Zahlung bestätigt wurde. An diesem Punkt sollte dieses Objekt an Ihren Server gesendet werden, um zu bestätigen, dass eine Zahlung tatsächlich ausgeführt wurde. Weitere Informationen zu diesen Schritten finden Sie in diesen Dokumenten .

Unser letzter Schritt ist das Aufräumen in unserem onDestroy(...) .

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

Das ist alles dazu. In diesem Beispiel haben wir eine einfache Schaltfläche zum Abwickeln einer Zahlung mit PayPal oder einer Kreditkarte erstellt. Von diesem Punkt aus gibt es einige weitere Schritte, um dieses Beispiel zu erweitern:

  • Dynamisches beginPayment(...) Zahlungsinformationen basierend auf der Benutzerproduktauswahl in der Methode beginPayment(...) .
  • Senden Sie die Zahlungsbestätigung an Ihren Server und überprüfen Sie, ob die Zahlung tatsächlich gelaufen ist.
  • Behandlung der Fehler- und Stornierungsanwenderfälle innerhalb der App.