PayPal Android: acceptera en PayPal- / kreditkortsbetalning


Exempel

I den här tutorialen kommer vi att lära dig hur du ställer in PayPal Android SDK för att behandla en enkel betalning via antingen en PayPal-betalning eller ett kreditkortköp. I slutet av det här exemplet bör du ha en enkel knapp i en applikation som vid klickning vidarebefordrar användaren till PayPal för att bekräfta en inställd betalning och sedan återvända användaren till applikationen och logga in bekräftelsen av betalningen.

Den kompletta applikationskoden för detta exempel är tillgänglig i PayPal Developer Github Repository .

Låt oss börja.

Det första steget är att skaffa och lägga till SDK till ditt projekt . Vi lägger till referensen till våra build.gradle-beroende på så sätt:

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

Nu går vi över till vår MainActivity.java-fil (eller var du än vill lägga till PayPal-knappintegrationen) och lägger till ett config för vårt klient-ID och miljön (sandlåda) som vi kommer att använda.

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

Nu ska vi skapa en knapp i vår onCreate(...) , som gör det möjligt för oss att behandla en betalning via PayPal när du klickat på den.

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

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

Vi måste nu definiera funktionaliteten för den knappen. I din res> layout> huvud XML-fil kan du lägga till följande definition för knappen, som definierar texten och onClick-hanteraren för knappen med paypal_button-ID.

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

När du klickar kommer knappen att kalla beginPayment(...) . Vi kan sedan lägga till texten för knappen i vår strings.xml-fil, så:

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

Med knappen på plats måste vi nu hantera knappklicket för att påbörja betalningsbehandlingen. Lägg till följande beginPayment(...) under vår tidigare onCreate(...) -metod.

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

Det vi gör här är att först ställa in serviceavsikten ( serviceConfig ) med den config som vi tidigare har definierat för vårt klient-ID och sandlådans miljö. Vi anger sedan det betalningsobjekt som vi vill bearbeta. För detta exempel ställer vi in ett statiskt pris, valuta och beskrivning. I din slutliga applikation bör dessa värden erhållas från vad användaren försöker köpa i applikationen. Slutligen paymentConfig vi paymentConfig , lägger till både config och payment som vi tidigare hade definierat och startar aktiviteten.

Vid denna tidpunkt kommer användaren att presenteras PayPal-inloggnings- och betalningsskärmar, vilket gör att de kan välja om de ska betala med PayPal eller ett kreditkort (via manuell inmatning eller card.io om kameran är tillgänglig). Den skärmen ser ut så här:

PayPal-bekräftelseskärm

När det är gjort måste vi ha en handlare redo för när PayPal vidarebefordrar användaren till applikationen efter bekräftelse av betalning eller avbokning. Låt oss åsidosätta onActivityResult(...) för det ändamålet.

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

Inom onActivityResult(...) kontrollerar vi om resultCode som kommer tillbaka är RESULT_OK (användarbekräftad betalning), RESULT_CANCELED (användaravbruten betalning) eller RESULT_EXTRAS_INVALID (det var ett konfigurationsproblem). Vid en giltig bekräftelse får vi objektet som returneras från betalningen och loggar det i det här exemplet. Det som kommer att returneras till oss ska se ut som följande:

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

Om vi ser under response kan vi se att vi har ett approved state , vilket innebär att betalningen bekräftades. Just nu bör objektet skickas till din server för att bekräfta att en betalning faktiskt har gått igenom. Mer information om dessa steg finns i dessa dokument .

Vårt sista steg är att rensa i vår onDestroy(...) .

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

Det är allt som finns åt det. I det här exemplet har vi skapat en enkel knapp för att behandla en betalning med antingen PayPal eller ett kreditkort. Från denna punkt finns det några nästa steg för dig att utvidga med detta prov:

  • Att dra in betalningsinformation dynamiskt baserat på användarproduktval i beginPayment(...) .
  • Skickar betalningsbekräftelsen till din server och verifierar att betalningen faktiskt har gått igenom.
  • Hantera användarfallen för fel och avbokning i appen.