PayPal Android: accepter un paiement PayPal / carte de crédit


Exemple

Dans ce tutoriel, nous allons apprendre à configurer le SDK Android de PayPal pour traiter un paiement simple via un paiement PayPal ou un achat par carte de crédit. À la fin de cet exemple, vous devriez avoir un bouton simple dans une application qui, une fois cliquée, transmettra l'utilisateur à PayPal pour confirmer un paiement défini, puis le renverra à l'application et enregistrera la confirmation du paiement.

Le code d'application complet de cet exemple est disponible dans le référentiel Github des développeurs PayPal .

Commençons.

La première étape consiste à obtenir et à ajouter le SDK à votre projet . Nous ajoutons la référence à nos dépendances build.gradle comme ceci:

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

Nous allons maintenant nous rendre sur notre fichier MainActivity.java (ou sur l’endroit où vous souhaitez ajouter l’intégration du bouton PayPal) et ajouter un objet de config pour notre ID client et l’environnement (sandbox) que nous allons utiliser.

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

Nous allons maintenant créer un bouton dans notre onCreate(...) , ce qui nous permettra de traiter un paiement via PayPal une fois cliqué.

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

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

Nous devons maintenant définir les fonctionnalités de ce bouton. Dans votre fichier XML principal res> layout>, vous pouvez ajouter la définition suivante pour le bouton, qui définira le gestionnaire de texte et onClick pour le bouton avec 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" />

Lorsque vous cliquez dessus, le bouton appelle la beginPayment(...) . Nous pouvons alors ajouter le texte du bouton à notre fichier strings.xml, comme ceci:

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

Avec le bouton en place, nous devons maintenant gérer le clic du bouton pour commencer le traitement du paiement. Ajoutez la beginPayment(...) ci-dessous sous notre précédente méthode 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);
}

Ce que nous faisons ici est d’abord de définir l’intention de service ( serviceConfig ), en utilisant la config que nous avions définie précédemment pour notre ID client et l’environnement sandbox. Nous spécifions ensuite l'objet de paiement que nous souhaitons traiter. Dans cet exemple, nous définissons un prix, une devise et une description statiques. Dans votre application finale, ces valeurs doivent être obtenues à partir de ce que l'utilisateur essaie d'acheter dans l'application. Enfin, nous avons configuré le paymentConfig , en ajoutant les objets de config et de payment précédemment définis et en démarrant l'activité.

À ce stade, l'utilisateur se verra présenter les écrans de connexion et de paiement PayPal, lui permettant de choisir entre payer avec PayPal ou une carte de crédit (via une saisie manuelle ou card.io si la caméra est disponible). Cet écran ressemblera à ceci:

Écran de confirmation de paiement PayPal

Une fois cela fait, nous devons avoir un gestionnaire prêt pour que PayPal renvoie l'utilisateur à l'application après confirmation du paiement ou de l'annulation. onActivityResult(...) à cette fin.

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

Dans la onActivityResult(...) , nous resultCode si le resultCode qui revient est RESULT_OK (paiement confirmé par l'utilisateur), RESULT_CANCELED (paiement annulé par l'utilisateur) ou RESULT_EXTRAS_INVALID (problème de configuration). Dans le cas d'une confirmation valide, nous récupérons l'objet renvoyé par le paiement et, dans cet exemple, le consignons. Ce qui nous sera retourné devrait ressembler à ceci:

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

Si nous regardons sous l'objet de response , nous pouvons voir que nous avons un state approved , ce qui signifie que le paiement a été confirmé. À ce stade, cet objet doit être envoyé à votre serveur pour confirmer qu'un paiement a bien été effectué. Pour plus d'informations sur ces étapes, consultez ces documents .

Notre dernière étape est de onDestroy(...) notre onDestroy(...) .

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

C'est tout ce qu'on peut en dire. Dans cet exemple, nous avons créé un bouton simple pour traiter un paiement avec PayPal ou une carte de crédit. A partir de là, il y a quelques étapes à suivre pour développer cet exemple:

  • Extraction dynamique des informations de paiement en fonction de la sélection du produit utilisateur dans la beginPayment(...) .
  • Envoi de la confirmation de paiement à votre serveur et vérification du paiement effectif.
  • Gestion des erreurs et des cas d'utilisateurs d'annulation dans l'application.