Payin sans redirection
Le payin sans redirection est une méthode de paiement de l'API LigdiCash qui permet à un marchand de collecter des paiements auprès de ses clients sans qu'ils ne quittent votre plateforme.
Cette méthode de paiement est particulièrement utile pour les marchands qui souhaitent offrir une expérience de paiement personnalisée à leurs clients, tout en bénéficiant de la sécurité et de la simplicité de l'API LigdiCash.
Cependant, le marchand doit gérer lui-même la logique de paiement et de confirmation de la transaction pour tous les opérateurs de paiement qu'il utilise.
Mise en place
Pour éffectuer un paiement sans redirection, vous devez disposer d'un projet API activé. Suivez le guide pour créer un projet API.
Afin de collecter des paiements sans redirection, le marchand doit au préalable connaître le mode de fonctionnement de l'opérateur de paiement (OTP, Approbation, etc) que le client a choisi.
Dans ce guide, nous allons prendre en compte le système OTP (One Time Password) et le système d'approbation.
Le système OTP(One Time Password) consiste à envoyer un code unique par SMS au client pour valider une transaction.
Nous prendrons le cas du Wallet Ligdicash et de Orange Money Burkina pour illustrer le fonctionnement du payin sans redirection avec le système OTP.
Initier la transaction
Acteurs
: Marchand + Client => LigdiCash
Afin d'initier la transaction, le marchand doit recueillir le numéro de téléphone du client et le montant de la transaction. Ces informations sont envoyées à LigdiCash qui génère un code OTP et le renvoie au client par SMS.
Pour ce faire, le marchand doit effectuer une requête GET vers l'API LigdiCash.
1curl --location 'https://app.ligdicash.com/pay/v02/debitotp/{phone_number}/{amount}' \
2--header 'Apikey: 81J...DH8C' \
3--header 'Authorization: Bearer eyJ0eXAiO...4LyaRolhw' \
4--header 'Accept: application/json' \
5--header 'Content-Type: application/json'
Réponse
1{
2 "error": false,
3 "message": "OTP sent. Please check your phone."
4}
Valider la transaction
Acteurs
: Client => Marchand => LigdiCash
Une fois le code OTP obtenu, le client le communique au marchand qui devra l’ajouter dans le corps de sa requête vers l’API de Ligdicash.
Cette requête permettra de valider la transaction en débitant le compte LigdiCash du client et en créditant le compte marchand LigdiCash du marchand.
1curl --location 'https://app.ligdicash.com/pay/v01/straight/checkout-invoice/create' \
2--header 'Apikey: 81J...DH8C' \
3--header 'Authorization: Bearer eyJ0eXAiO...4LyaRolhw' \
4--header 'Accept: application/json' \
5--header 'Content-Type: application/json' \
6--data-raw '{
7 "commande": {
8 "invoice": {
9 "items": [
10 {
11 "name": "Premier produit",
12 "description": "__description_du_produit__",
13 "quantity": 1,
14 "unit_price": 1000,
15 "total_price": 1000
16 },
17 {
18 "name": "Deuxieme produit",
19 "description": "__description_du_produit__",
20 "quantity": 3,
21 "unit_price": 5000,
22 "total_price": 5000
23 }
24 ],
25 "total_amount": 16000,
26 "devise": "XOF",
27 "description": "Achat de produits sur https://masuperboutique.com",
28 "customer": "226XXXXXXXX", // <--- Numéro de téléphone utilisé pour obtenir le code OTP. Préfixé par l'indicatif du pays
29 "customer_firstname": "Cheik",
30 "customer_lastname": "Cissé",
31 "customer_email": "cheikcisse@gmail.com",
32 "external_id": "",
33 "otp": "XXXXXX" // <--- Code OTP obtenu par le client
34 },
35 "store": {
36 "name": "Ma boutique",
37 "website_url": "https://masuperboutique.com"
38 },
39 "actions": {
40 "cancel_url": "",
41 "return_url": "",
42 "callback_url": "https://backend.masuperboutique.com/callback"
43 },
44 "custom_data": {
45 "order_id": "ORD-1234567890",
46 "transaction_id": "ORD-1234567890"
47 }
48 }
49}'
Nous vous recommandons fortement d'implémenter le endpoint de callback pour recevoir les détails de la transaction après le paiement.
Cela vous permettra de mettre à jour le statut de la commande dans votre système et d'offrir le service ou le produit à votre client sans qu'il ne soit obligé de revenir sur votre site.
Réponse
1{
2 "response_code": "00",
3 "token": "eyJ0eXAiOiJKV1QiLCJh...GlyeV9kYXRlIjoxNzE2Mzc2NTE3fQ.7iwLZVmG_Hw_ncFUcF5Hzk8cB2BSUqroF9rGqym_qSw",
4 "response_text": "",
5 "description": "",
6 "custom_data": {
7 "logfile": "20240521131517664c9e65689a3"
8 },
9 "wiki": "https://client.ligdicash.com/wiki/createInvoice"
10}
11
Vérifier le statut de la transaction
Une fois que la reponse obtenue, vous devrez alors vérifier le statut de la transaction pour confirmer réellement le statut du paiement.
Pour vérifier le statut de la transaction, vous devez utiliser le token retourné lors de la création de la facture, et effectuer la requête suivante:
1curl --location 'https://app.ligdicash.com/pay/v01/redirect/checkout-invoice/confirm/?invoiceToken=eyJ0eXAiOiJK...nk159cWyokRv6wAlh3g' \
2--header 'Apikey: 81J...IDH8C' \
3--header 'Authorization: Bearer eyJ0eXAiOiJ...4LyaRolhw' \
4--data ''
Interpréter la réponse
Lorsque vous recevez la réponse de la requête de vérification du statut de la transaction, vous devez vous assurez que response_code == 00
et que status == completed
avant de valider la transaction et de livrer le service ou le produit à votre client.
1{
2 "date": "2023-10-29 09:46:27+00",
3 "response_code": "00",
4 "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUz...bdqRzL_aOJ1SYzY",
5 "description": "”,
6 "amount": "100",
7 "montant": "100",
8 "response_text": null,
9 "status": "completed",
10 "custom_data": [
11 {
12 "id_invoice": 29505444,
13 "keyof_customdata": "order_id",
14 "valueof_customdata": "MonSiteOrder234"
15 }
16 ],
17 "operator_name": "ORANGE BURKINA",
18 "operator_id": "11",
19 "customer": “”,
20 "transaction_id": “TRNS.36887”,
21 "external_id": null,
22}
23