Official Links

Get to know Lyzi

FAQ

Most asked questions

API DOCUMENTATION

Lyzi Roles

Whitepaper

Introduction

Regulations & Compliance

Roadmap

Disclaimer

**Last update :

11 décembre 2024


Résumé:

Afin d’intégrer Lyzi avec l’API, il suffit de créer une requête de paiement.

Sécurité

Les autorisations suivantes doivent être ajoutées dans le header des requêtes:

 'x-api-key': apiKey,
 'x-api-secret': apiSecret,

La clé et le secret se trouvent dans le backoffice, dans la section “développeur”

Request command:

Au moment d’initialiser une transaction crypto, il faut appeller la requête request :

<https://api-dev.lyzi.fr/api/confirm_conversion/request>

Body de la requête à jour :

{
        amount: Joi.required(),
        fromAsset: Joi.string().valid('EUR', 'CHF', 'XPF').insensitive().required(),
        toAsset: Joi.string().valid('USDT', 'USDC', 'EUR').insensitive().required(),
        webhookUrl: Joi.string().allow(null, ''),
        cancelUrl: Joi.string().allow(null, '').max(256),
        returnUrl: Joi.string().allow(null, '').max(256),
        merchantIdentifier: Joi.string().allow(null, ''),
        anonymous: Joi.boolean(),
        goods: Joi.object({
          goodsName: Joi.string(),
          goodsType: Joi.string().valid('01', '02'),
          goodsCategory: Joi.string().valid('0000', '1000', '2000', '3000', '4000', '5000', '6000', '7000', '8000', '9000', 'A000', 'B000', 'C000', 'D000', 'E000', 'F000', 'Z000'),
          goodsDetail: Joi.string().max(256).allow('', null),
          goodsQuantity: Joi.string().max(256).allow('', null)
        }),
      }

Le merchantIdentifier correspond à l’identifiant de la “caisse” à laquelle attribuer le paiement. On peut le retrouver depuis l’endpoint https://api-dev.lyzi.fr/docs/#api-Sales_Points-List_Explore_Sales_Points.

En réponse à cette requête, se trouve un champ paymentUrl qui peut être utilisé pour renvoyer l’utilisateur vers notre portail de paiement pour effectuer le paiement.

Get Status

Pour récupérer le statut de la transaction :

https://api-dev.lyzi.fr/docs/#api-Conversions-get_conversion_status

<https://api-dev.lyzi.fr/api/confirm_conversion/status/:code>

Le code est récupéré dans la requête “request” décrit ci-dessus.

<aside> 💡

Il est recommandé d’appeler ce endpoint de manière périodique jusqu’à avoir un statut final de la transaction (PAID, EXPIRED ou CANCELLED)

</aside>



Documentation

Vocabulaire

Pré-conditions obligatoires

Pré-conditions pour le white label

POS (Point of Sale) Identifier

Avant de générer une URL de paiement, vous devez obtenir un identifiant POS en récupérant vos collecteurs (https://reqbin.com/c-zcrlfvsf). À partir de la réponse, choisissez l'identifiant souhaité et assurez-vous qu'il est activé.

Si vous n'en avez pas, vous pouvez créer un collecteur depuis votre Back Office.

Pour connaître les charges utiles disponibles, vous pouvez consulter cette documentation API.

Pour effectuer un paiement, vous devez passer ‘anonymous’ en “true” et utiliser ‘merchantIdentifier’ avec l’identifiant choisi. Ensuite, vous obtenez l'URL de paiement à partir de la réponse. (https://reqbin.com/c-g4brutqw)

Package NPM:

Un package NPM est publié et définit les interfaces permettant d’utiliser l’API et les différents endpoints décrits ci-dessous.

npm: lyzi-node

Procédure pour un paiement crypto

Authentification

Le manager se connecte pour obtenir son auth token et sa clé privé d’api

curl -X POST <https://api-dev.lyzi.fr/api/next/auth/login/manager> -H "Content-Type: application/json" \\
-d "{\\"email\\":\\"[email protected]\\",\\"password\\":\\"Lyzi123\\",\\"origin\\":\\"dashboard\\"}"

Example : https://reqbin.com/gknwftii

Par la suite utiliser la clé publique et clé privée pour les appels API :

--header 'x-api-key: fa392da4-3d86-49d4-9937-fadc3b471e33' \\
--header 'x-api-secret: $2b$10$wYm6jBkA3z6EqDtkphTF0.4Lpqv5Iy9vJoIk1Vtm5ATbJBwR5w2uO' \\
--header 'Content-Type: application/json'

Identifiant de caisse

Le manager obtient son identifiant de caisse

curl -X GET "<https://api-dev.lyzi.fr/api/next/collectors/list>" \\
--header 'x-api-key: fa392da4-3d86-49d4-9937-fadc3b471e33' \\
--header 'x-api-secret: $2b$10$wYm6jBkA3z6EqDtkphTF0.4Lpqv5Iy9vJoIk1Vtm5ATbJBwR5w2uO' \\
--header 'Content-Type: application/json'

<aside> ℹ️ Cet identifiant peut également être trouvé dans le backoffice

</aside>

Request

Pour initier une transaction, le manager doit faire une requête de transaction. Cela initie la transaction pour le paiement:

curl --location '<https://api-dev.lyzi.fr/api/next/confirm_conversion/request>' \\
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MzQ5YTY3ODVhMDBjN2MzNWVlMjRkMjYiLCJyb2xlIjoiU2ltcGxlVXNlciIsImlhdCI6MTY3ODA3MzE4NSwiZXhwIjoxNzA5NjMwNzg1LCJpc3MiOiJsYXRlY2gifQ.1MZ6whaA33yoMKdOnPuHmunOm5-OOIWzUvx1pBzMbNQ' \\
--header 'Content-Type: application/json' \\
--data '{
    "amount": 1,
    "anonymous": true,
    "fromAsset": "EUR", 
    "goods": {
        "goodsType": "01",
        "goodsCategory": "D000",
        "goodsName": "Ramen"
    },
    "merchantIdentifier": "5f89d29ae705ab001c0e2485_622661913a638b001d4c24a2-TESTCSPINDUSTRY-SARL-72883564"
}'

Dans la réponse se trouve le “paymentUrl” où le client doit être redirigé pour compléter la transaction.

Accepter

Dans le portail de paiement, le client va accepter la transaction, lorsqu’il choisit sa plateforme de cryptomonnaies qu’il veut utiliser

<aside> ℹ️ Cette requête est effectuée au niveau du consommateur. Elle ne doit pas être effectuée par le commerçant

</aside>

curl --location '<https://api-dev.lyzi.fr/api/next/confirm_conversion/accept/><CONVERSION_ID>' \\
--data '{
	anonymous: true,
	cancelUrl: "<https://my-website.com>",
	paymentChannel: "binance"
	returnUrl: "<https://my-website.com>"
}'

Confirmation

Le manager scan la valeur du voucher pour CONFIRMER la conversion (c’est l’acte de collecte du commerçant au consommateur, c'est l'acte de burn du voucher).

L’identifiant dans l’URL (confirm/${id}) correspond au numéro du voucher produit par l’utilisateur dans l’étape précédente.

curl -X POST '<https://api-dev.lyzi.fr/api/next/confirm_conversion/confirm/25356565699000112790223030604220600000000100>' \\
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1Zjg5ZDI5YWU3MDVhYjAwMWMwZTI0ODIiLCJyb2xlIjoiTWFuYWdlciIsImlhdCI6MTY3NTk0NjYzMCwiZXhwIjoxNzA3NTA0MjMwLCJpc3MiOiJsYXRlY2gifQ.PevlKQlb0jRxHT7ssgMQyhmq7R4qk4D1PSngztefZyw' \\
--header 'Content-Type: application/x-www-form-urlencoded' \\
--data-urlencode 'pos=5f89d29ae705ab001c0e2485_622661913a638b001d4c24a2-TESTCSPINDUSTRY-SARL-74640667'

REVERT un paiement

L’identifiant dans l’URL (revert/${id}) correspond au numéro du voucher produit par l’utilisateur dans l’étape précédente.

curl -X POST '<https://api-dev.lyzi.fr/api/next/confirm_conversion/revert/25356565699000112137123032209211200000000010>' \\
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1Zjg5ZDI5YWU3MDVhYjAwMWMwZTI0ODIiLCJyb2xlIjoiTWFuYWdlciIsImlhdCI6MTY3NTk0NjYzMCwiZXhwIjoxNzA3NTA0MjMwLCJpc3MiOiJsYXRlY2gifQ.PevlKQlb0jRxHT7ssgMQyhmq7R4qk4D1PSngztefZyw'

Refund

Demande de remboursement auprès de Lyzi par le marchand:

curl -X POST "<https://api-dev.lyzi.fr/api/next/claims/claim_refund/25356565699000117981823033008422400000000010?amount=0.01>" \\
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1Zjg5ZDI5YWU3MDVhYjAwMWMwZTI0ODIiLCJyb2xlIjoiTWFuYWdlciIsImlhdCI6MTY4MDUzMjg2OCwiZXhwIjoxNzEyMDkwNDY4LCJpc3MiOiJsYXRlY2gifQ.nI-Nz-RoxHTDnrDsDY6u7Ejz-5XeritAtaqQZsHR-I0" \\
-H "Content-Type: application/json" \\
-H "Content-Length: 0"

Statut

Connaître le STATUS d’un voucher (Par exemple : pour un call back, pour un Cron, ou loop ping)

curl -X GET "[<https://api-dev.lyzi.fr/api/next/confirm_conversion/status/25356565699000113814923022123434700000000010>](<https://api-dev.lyzi.fr/api/next/confirm_conversion/status/25356565699000113814923022123434700000000010>)"

<aside> 💡 Voici les statuts que peuvent avoir les conversions :

ORDER_STATUS:

Exemples sur Reqbin

Steps:

🔗Consumer : Request

🔗Consumer : Accept

🔗Merchant : Confirm

Verifier le status:

🔗Check

Revert : within 5min

🔗Revert

Remboursement :

🔗Remboursement