Official Links
FAQ
API DOCUMENTATION
How to integrate Lyzi ?
Whitepaper
Tutorial and context about Lyzi integration using the API (in english):
General information about the API:
Source | Url | Script load example |
---|---|---|
Stable | https://pay.lyzi.io/assets/buy-button/sdk-v2.js | <script src="https://pay.lyzi.io/assets/buy-button/sdk-v2.js" defer></script> |
Dev | https://pay-dev.lyzi.io/assets/buy-button/sdk-v2.js | <script src="https://pay-dev.lyzi.io/assets/buy-button/sdk-v2.js" defer></script> |
We recommend to use Stable source even in the development stage, you can still change the button environment in the SDK configuration.
function/method | type | params | return type |
---|---|---|---|
construct | function | buttonId,buttonName,orderRef,price,goods,callbackUrl,returnUrl, currency, env | object |
config | getter | - | object |
conversionCode | getter | - | string |
paymentState | getter | - | object |
buttonUrl | getter | - | string |
htmlSnippet | getter | - | string |
function/method | type | params | return type |
---|---|---|---|
init | function | {buttonId,buttonName,orderRef,price,goods,callbackUrl,returnUrl, currency, env} | void |
variable | type | required | note |
---|---|---|---|
buttonId | string | yes | |
buttonName | string | no | *1A |
orderRef | string | no | *1B |
price | string | no | *1A |
goods | object | no | • *1A; |
• object refer to https://api-dev.lyzi.fr/docs/#api-Conversions-Request_conversion | |||
callbackUrl | string | no | • *1A; *2A; *2B; *2C; *2D; |
• URL that will open after successful/failed payment | |||
returnUrl | string | no | • *2A; *2B; *2C; |
• URL that will open after successful payment | |||
cancelUrl | string | no | • *2A; *2B; *2C; |
• URL that will open after failed payment | |||
env | enum string | no | available value: ‘local’, ‘develop’, ‘staging’, ‘production’ |
currency | string | no | *1A; |
PS:
Callback
The callback will be executed on the client by opening the url in a browser tab,
The payment data will be attached in your specified url as query strings.
<aside> 💡
callbackUrl
is ignored if returnUrl
and cancelUrl
are defined in SDK configuration.
If returnUrl
and cancelUrl
are NOT defined, then callbackUrl
will be called.
</aside>
Executed callback url example:
<https://preprod.freemiumplay.com/services/payment?_id=65a7c3a920ff3a001d031f2b&goods[_id]=65a7c3a920ff3a001d031f2c&goods[goodsCategory]=Z000&goods[goodsName]=anu&goods[goodsType]=02&goods[referenceGoodsId]=25356565699000117914166585012401173902000010&fromAsset=EUR&toAsset=USDT&fromAmount=0.1&toAmount=0.11199222&exchangeInfo[_id]=65a7c3a920ff3a001d031f2d&exchangeInfo[symbol]=EURUSDT&exchangeInfo[price]=1.08730308&code=25356565699000117914166585012401173902000010&shortCode=EDBX47D6&status=PAID&expireTime=1705493735861&webhookUrl=https%3A%2F%2Fpreprod.freemiumplay.com%2Fservices%2Fpayment%3FextraParams%3Dlyzi%7C65a7c3a464eb1d55bbcb3899&paymentChannel=binance&createdAt=2024-01-17T12%3A10%3A17.212Z&updatedAt=2024-01-17T12%3A10%3A50.534Z&payer[_id]=649421dfa92ff3001d4ed6d8&payer[firstName]=Lyzi&payer[lastName]=Tester&payer[email]=testuser%40lyzi.fr&payer[phoneNumber]=12345678&payer[cashbackBalance]=0&confirm[_id]=65a7c3b720ff3a001d031f8a&confirm[order]=65a7c3a920ff3a001d031f2b&confirm[manager]=62bc1c651a8eda001c72845c&confirm[type]=WEBSITE&confirm[merchant][_id]=65157c845b85c20dd565d211&confirm[merchant][url]=https%3A%2F%2Flyzi.fr&confirm[merchant][user]=62bc1c651a8eda001c72845c&confirm[merchant][__v]=0&confirm[merchant][id]=65157c845b85c20dd565d211&confirm[createdAt]=2024-01-17T12%3A10%3A31.754Z&confirm[updatedAt]=2024-01-17T12%3A10%3A31.754Z&confirm[__v]=0&confirm[id]=65a7c3b720ff3a001d031f8a&id=65a7c3a920ff3a001d031f2b&extraParams=lyzi%7C65a7c3a464eb1d55bbcb3899>
Webhooks
Webhook will be called from our backend via HTTPS request with POST method to the defined webhookUrl
, you can retrieve payment data from the request body.
Webhook example through CURL:
curl --location '<https://preprod.freemiumplay.com/services/payment?extraParams=lyzi%7C65a7c24864eb1d55bbcb3860>' \\
--header 'Content-Type: application/json' \\
--data-raw '{"_id":"65a7c24a20ff3a001d031daa","goods":{"_id":"65a7c24a20ff3a001d031dab","goodsCategory":"Z000","goodsName":"anu","goodsType":"02","referenceGoodsId":"25356565699000114981103580012401173902000010"},"fromAsset":"EUR","toAsset":"USDT","fromAmount":"0.1","toAmount":"0.11199428","exchangeInfo":{"_id":"65a7c24a20ff3a001d031dac","symbol":"EURUSDT","price":"1.08732311"},"code":"25356565699000114981103580012401173902000010","shortCode":"8E4G47A3","status":"PAID","expireTime":1705493371640,"paymentChannel":"binance","createdAt":"2024-01-17T12:04:26.084Z","updatedAt":"2024-01-17T12:07:49.418Z","__v":0,"payer":{"_id":"649421dfa92ff3001d4ed6d8","firstName":"Lyzi","lastName":"Tester","email":"[email protected]","phoneNumber":"12345678","cashbackBalance":0},"confirm":{"_id":"65a7c24b20ff3a001d031dd4","order":"65a7c24a20ff3a001d031daa","manager":"62bc1c651a8eda001c72845c","type":"WEBSITE","merchant":{"_id":"65157c845b85c20dd565d211","url":"<https://lyzi.fr>","user":"62bc1c651a8eda001c72845c","__v":0,"id":"65157c845b85c20dd565d211"},"createdAt":"2024-01-17T12:04:27.982Z","updatedAt":"2024-01-17T12:04:27.982Z","__v":0,"pos":null,"id":"65a7c24b20ff3a001d031dd4"},"refund":null,"id":"65a7c24a20ff3a001d031daa"}'
Implementation Example 1
<script src="<https://pay.lyzi.io/assets/buy-button/sdk-v2.js>"></script>
<div id="lyzi-pay-button"></div>
<script>
var myButton = new lyziBuyButtonSdk();
myButton.init(
{
buttonId: "mybuttonid",
orderRef: "ref-order-20241201-100",
price: 0.1,
currency: "EUR",
callbackUrl:
"<https://webhook.site/fa5f2664-9f3d-4737-b649-3cc7c4c1a005>",
returnUrl: "<https://my-site.com/success>",
cancelUrl: "<https://my-site.com/failed>",
env: "dev",
buttonName: "Button Name",
goods: {
goodsName: "Gigabyte RX 570",
goodsCategory: "1000",
goodsType: "01",
},
},
document.getElementById("lyzi-pay-button")
);
</script>
Implementation Example 2
<script src="<https://pay.lyzi.io/assets/buy-button/sdk-v2.js>"></script>
<div id="lyzi-pay-button"></div>
<script>
window.lyziBuyButton.init(
{
buttonId: "mybuttonid",
orderRef: "ref-order-20241201-100",
price: 0.1,
callbackUrl:
"<https://webhook.site/fa5f2664-9f3d-4737-b649-3cc7c4c1a005>",
returnUrl: "<https://my-site.com/success>",
cancelUrl: "<https://my-site.com/failed>",
env: "dev",
},
document.getElementById("lyzi-pay-button")
);
</script>
Implementation Example 3
<script src="<https://pay.lyzi.io/assets/buy-button/sdk-v2.js>"></script>
<a id="lyzi-pay-button">Pay with lyzi</a>
<script>
var myButton = new lyziBuyButtonSdk();
myButton.init({
buttonId: "mybuttonid",
orderRef: "ref-order-20241201-100",
price: 0.1,
callbackUrl:
"<https://webhook.site/fa5f2664-9f3d-4737-b649-3cc7c4c1a005>",
returnUrl: "<https://my-site.com/success>",
cancelUrl: "<https://my-site.com/failed>",
env: "dev",
});
document.getElementById("lyzi-pay-button").href = myButton.buttonUrl;
</script>
Implementation Example 4
<script src="<https://pay.lyzi.io/assets/buy-button/sdk-v2.js>"></script>
<a id="lyzi-pay-button">Pay with lyzi</a>
<script>
var myButton = new lyziBuyButtonSdk(
"mybuttonid",
"Button Name",
"ref-order-20241201-100",
"0.1",
{
"goodsName": "Gigabyte RX 570",
"goodsCategory": "1000",
"goodsType": "01",
},
"<https://webhook.site/fa5f2664-9f3d-4737-b649-3cc7c4c1a005>",
"<https://my-site.com/success>",
"<https://my-site.com/failed>",
"EUR",
"dev"
);
document.getElementById("lyzi-pay-button").href = myButton.buttonUrl;
</script>
Implementation Example 5
<script src="<https://pay.lyzi.io/assets/buy-button/sdk-v2.js>"></script>
<div id="lyzi-pay-button"></div>
<script>
var myButton = new lyziBuyButtonSdk(
"mybuttonid",
"Button Name",
"ref-order-20241201-100",
"0.1",
null,
"<https://webhook.site/fa5f2664-9f3d-4737-b649-3cc7c4c1a005>",
"<https://my-site.com/success>",
"<https://my-site.com/failed>",
"EUR",
"dev"
);
var myButtonSnippet = document.createRange().createContextualFragment(myButton.htmlSnippet);
document.getElementById("lyzi-pay-button").append(myButtonSnippet);
</script>
Implementation Example 6
<script src="<https://pay.lyzi.io/assets/buy-button/sdk-v2.js>"></script>
<div id="lyzi-pay-button"></div>
<script>
var myButton = new lyziBuyButtonSdk();
myButton.init(
{
buttonId: "mybuttonid",
orderRef: "ref-order-20241201-100",
price: 0.1,
callbackUrl:
"<https://webhook.site/fa5f2664-9f3d-4737-b649-3cc7c4c1a005>",
returnUrl: "<https://my-site.com/success>",
cancelUrl: "<https://my-site.com/failed>",
env: "dev",
},
document.getElementById("lyzi-pay-button")
);
setInterval(() => {
console.log('conversion code', myButton.conversionCode)
console.log('payment state', myButton.paymentState)
}, 2000);
</script>
I can’t get the correct data from query params!
We have decoded the url before we hit this, somehow at some point the web browser encodes this url again.
You can try to decode the url twice to fix this issue, e.g:
decodeURIComponent(decodeURIComponent(url));
I didn't receive a callback and the transaction wasn't updated on my end!
We remind you again that the callback is executed on the client side by opening the url in a browser tab, at some point the client browser may block the popup or url redirection.
To avoid this, you must set “returnUrl” and “cancelUrl” in the SDK configuration, so these urls will only be used as redirect URLs on successful/failed payments. Then you can handle the status of your transaction using the payment data we send to the specified webhookUrl
.
You can easily upgrade to V2 SDK by changing the SDK source
---
<script src="https:/pay.lyzi.io/assets/buy-button/sdk.js"></script>
---
+++
<script src="https:/pay.lyzi.io/assets/buy-button/sdk-v2.js"></script>
+++