Paiement en ligne Symfony et Payplug

Dans ce nouvel article nous allons voir comment utiliser Payplug pour effectuer nos paiements.

Cet outil souvent peu utilisé et peu connu permets de gérer efficacement les paiements par carte bancaire, sans avoir besoin de passer obligatoirement par un IPN ou de créer un compte pour le client.

Payplug propose une API Rest et une librairie php très bien documentée.

Payplug propose deux types de paiements, le premier redirige l’utilisateur sur leurs serveurs, on entre sa carte bancaire et on est redirigé sur notre site.
Le deuxième paiement est en javascript, pour éviter de rediriger l’utilisateur en dehors de votre site. Ce mode de paiement est accessible avec l’option Premium.

Nous allons regarder ici seulement la première solution.

La librairie Payplug nous propose une première méthode static `Paiement::create`. Grâce à elle on peut simplement créer un paiement, par exemple :


$parameters = [
      'amount'   => 200 * 100, // 200€ * 100, pour convertir en centimes
      'currency' => 'EUR',
      'customer' => [ // optionnel
           'email'      => $email,
           'first_name' => $firstName,
           'last_name'  => $lastName,
      ],
      'metadata' => [ // optionnel
           'order_id' => '42,
           'customer_id' => $user->getId(),
      ],
      'hosted_payment' => [
           'return_url' => '/payment/success/42',
           'cancel_url' => '/payment/error/42',
      ]
];
$payment = Payment::create($parameters);

La méthode s’occupe en arrière plan de contacter l’API et de nous renvoyer entre autre l’ID du paiement dont nous aurons besoin.

  • La clef `hosted_payment` nous permet de renseigner les urls de redirection en cas d’annulation ou pour continuer.
  • La clef `metadata` permet de stocker des informations complémentaires.
  • La clef `customer` permet de stocker les informations sur l’utilisateur, elle est optionnelle également.

Elle nous renvoie également l’url de paiement, on peut ainsi rediriger l’utilisateur sur cette url.
S’il y a des erreurs, la librairie Payplug a pensé à tout :



try {
    $payment = Payment::create($parameters);
} catch (ConnectionException $e) {
    $this->log("Connection  with the PayPlug API failed.");
} catch (InvalidPaymentException $e) {
    $this->log("Payment object provided is invalid.");
} catch (UndefinedAttributeException $e) {
    $this->log("Requested attribute is undefined.");
} catch (HttpException $e) {
    $this->log("Http errors.");
} catch (PayplugException $e) {
    $this->log($e->getMessage());
} catch (\Exception $e) {
    $this->log($e->getMessage());
}

Une fois le paiement validé côté Payplug, celui-ci redirige l’utilisateur via `return_url` passé en paramètre, dès lors on peut utiliser la seconde méthode static `ResourcePayment::retrieve`, celle-ci prends en paramètre l’ID du paiement. Nous l’avions obtenu lorsque nous avions fait appel à la méthode `create`, il convenait donc de la sauvegarder avant de rediriger l’utilisateur vers Payplug !

Avec ce paiement, on peut maintenant savoir si le paiement a été payé ou non grâce aux informations reçues.
Si tout va bien, on sauvegarde les informations, ça peut servir.
Dans le cas contraire, on enregistre également les informations, ça peut servir, et on peut récupérer la cause de l’erreur dans la réponse.

Et voilà !
Plutôt rapide et efficace !

Question :
Peut-on enregistrer la carte bancaire du client ?

Oui, lorsque vous avez des paiements réccurents ou des commandes fréquentes, il est possible d’enregistrer la carte bancaire pour pouvoir effectuer un paiement immédiat la prochaine fois.

Par contre Payplug propose une solution peu orthodoxe, en effet l’option permettant d’enregistrer la carte bancaire affichera une case à cocher informant l’utilisateur que sa carte sera enregistrée. Mais si l’utilisateur décoche cette case, alors Payplug bloquera le paiement sur sa page.

Pour laisser le choix au client d’enregistrer sa carte bancaire ou non, on peut contourner ce problème en…créant deux liens distincts !

L’un pour le paiement normal, et l’autre pour un paiement immédiat, ou 1-click. Comme cela le client reste libre de choisir.

Techniquement, lorsqu’on va faire un appel via Payment::create, on va simplement passer le paramètre `save_card` à true, également il faut obligatoirement passer le paramètre `customer` ainsi que `hosted_payment`. Une fois sur la page de paiement de Payplug, la fameuse case à cocher apparaît !

A la validation du paiement, Payplug retourne un token correspondant à la carte bancaire de l’utilisateur.

On enregistre donc tout ça.

A présent lors du prochain paiement, si l’utilisateur possède ce précieux token, on va modifier les paramètres envoyer lors du Payment::create.


if ($this->hasCardToken()) {
    $parameters['payment_method'] = $userCardToken;
    $parameters['save_card'] = false;
} else {
    $parameters['save_card'] = true;
    $parameters['hosted_payment'] = [
        'return_url' => '/payment/success/42',
        'cancel_url' => '/payment/error/42',
    ];
}

Et voilà ! Le reste du code ne change pas, et le paiement a été effectué automatiquement.

J’espère que cet article vous aura donné envie d’utiliser Payplug pour une mise en place rapide et efficace de vos paiements !

ps: Non non je ne travaille pas pour eux !

Partagez cet article