Official Links
FAQ
API DOCUMENTATION
How to integrate Lyzi ?
Whitepaper
**Last update :
11 décembre 2024
Afin d’intégrer Lyzi avec l’API, il suffit de créer une requête de paiement.
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”
Au moment d’initialiser une transaction crypto, il faut appeller la requête request
:
<https://api-dev.lyzi.fr/api/confirm_conversion/request>
{
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.
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>
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)
Un package NPM est publié et définit les interfaces permettant d’utiliser l’API et les différents endpoints décrits ci-dessous.
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'
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>
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.
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>"
}'
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'
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'
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"
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:
Steps:
🔗Consumer : Request
🔗Consumer : Accept
🔗Merchant : Confirm
Verifier le status:
Revert : within 5min
Remboursement :