Channel: 42
Provider: Lyra (Klap acquirer)
Payment Method: Debit / Credit Card
Available Currencies
| Name | Code | Country |
|---|---|---|
| Chilean Pesos | CLP | Chile |
How it works
The shopper pays without leaving the ALPS checkout: the card form is embedded in the ALPS payment page and the card data is captured and tokenized directly by Lyra. Neither ALPS nor the merchant ever receives the card number.
- The merchant creates the transaction with
channel=42. - The shopper is taken to the ALPS checkout, where the card form is displayed.
- The shopper enters the card data and pays.
- Result:
- Approved: the shopper is redirected to
url_ok. - Rejected: the shopper is redirected to
url_error. - Cancelled (the shopper clicks the cancel button): the transaction is cancelled and the shopper is redirected to
url_error.
- Approved: the shopper is redirected to
Note: the browser redirect is not a payment confirmation. The final status is always the one sent to your notification URL (see Notifications).
Request example
curl --request POST \
--url https://uat-payments.alps.cl/justpay/check-out/SecurePayment \
--data public_key=YOUR_PUBLIC_KEY \
--data time=2026-10-21T14:39:09 \
--data channel=42 \
--data amount=300 \
--data currency=CLP \
--data trans_id=1 \
--data time_expired=120 \
--data url_ok=https://example.com/ok \
--data url_error=https://example.com/error \
--data signature=YOUR_SIGNATURE \
--data shopper_information='{"name_shopper": "Jon","last_name_Shopper": "Snow","type_doc_identi": "RUT","Num_doc_identi": "11111111-1","email": "[email protected]","country_code": "+56","Phone": "999763655"}'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://uat-payments.alps.cl/justpay/check-out/SecurePayment",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => http_build_query([
'public_key' => 'YOUR_PUBLIC_KEY',
'time' => '2026-10-21T14:39:09',
'channel' => 42,
'amount' => 300,
'currency' => 'CLP',
'trans_id' => '1',
'time_expired' => 120,
'url_ok' => 'https://example.com/ok',
'url_error' => 'https://example.com/error',
'signature' => 'YOUR_SIGNATURE',
'shopper_information' => json_encode([
'name_shopper' => 'Jon',
'last_name_Shopper' => 'Snow',
'type_doc_identi' => 'RUT',
'Num_doc_identi' => '11111111-1',
'email' => '[email protected]',
'country_code' => '+56',
'Phone' => '999763655',
]),
]),
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import json
import requests
url = "https://uat-payments.alps.cl/justpay/check-out/SecurePayment"
payload = {
"public_key": "YOUR_PUBLIC_KEY",
"time": "2026-10-21T14:39:09",
"channel": "42",
"amount": "300",
"currency": "CLP",
"trans_id": "1",
"time_expired": "120",
"url_ok": "https://example.com/ok",
"url_error": "https://example.com/error",
"signature": "YOUR_SIGNATURE",
"shopper_information": json.dumps({
"name_shopper": "Jon",
"last_name_Shopper": "Snow",
"type_doc_identi": "RUT",
"Num_doc_identi": "11111111-1",
"email": "[email protected]",
"country_code": "+56",
"Phone": "999763655",
}),
}
response = requests.post(url, data=payload)
print(response.text)const qs = require("querystring");
const https = require("https");
const options = {
"method": "POST",
"hostname": "uat-payments.alps.cl",
"port": null,
"path": "/justpay/check-out/SecurePayment",
"headers": {
"Content-Type": "application/x-www-form-urlencoded"
}
};
const req = https.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(qs.stringify({
public_key: 'YOUR_PUBLIC_KEY',
time: '2026-10-21T14:39:09',
channel: '42',
amount: '300',
currency: 'CLP',
trans_id: '1',
time_expired: '120',
url_ok: 'https://example.com/ok',
url_error: 'https://example.com/error',
signature: 'YOUR_SIGNATURE',
shopper_information: JSON.stringify({
name_shopper: 'Jon',
last_name_Shopper: 'Snow',
type_doc_identi: 'RUT',
Num_doc_identi: '11111111-1',
email: '[email protected]',
country_code: '+56',
Phone: '999763655'
})
}));
req.end();Mandatory Data
| Attribute | Mandatory | Data type | Description |
|---|---|---|---|
public_key | True | String (255) | Public key, unique value that identifies the commerce |
time | True | Datetime | Request data time |
channel | True | Integer | Payment Channel. Use 42 |
amount | True | Integer | The amount of the transaction. CLP does not allow decimals: send whole pesos (e.g. 300). Amounts with a fractional part are rejected (NO_DECIMALS) |
currency | True | String (3) | Transaction currency code. Only CLP |
trans_id | True | String (255) | Transaction id |
time_expired | True | String (255) | Time in minutes to expire the token. Value given in minutes. Minimum Suggested: Online: 30 minutes |
url_ok | True | String (255) | URL where shopper will be redirected if payment was successful (Must be Https) |
url_error | True | String (255) | URL where shopper will be redirected if payment was rejected or cancelled (Must be Https) |
signature | True | String (255) | Signature hash256: Review signature calculation |
shopper_information | True | JSON String | JSON String Data: Review JSON index & format |
shopper_information JSON format
shopper_information JSON format{
"name_shopper": "Jon",
"last_name_Shopper": "Snow",
"type_doc_identi": "RUT",
"Num_doc_identi": "11111111-1",
"email": "[email protected]",
"country_code": "+56",
"Phone": "999763655"
}The shopper_information field is a column corresponding to a json with the next keys:
| Parameter | Mandatory | Data Type | Description |
|---|---|---|---|
name_shopper | True | String (255) | Shopper's name |
last_name_Shopper | True | String (255) | Shopper's last name |
type_doc_identi | True | String (255) | Identification document [RUT,DNI,CI, ID etc.] |
Num_doc_identi | True | String (255) | Identification document number |
email | True | String (255) | Shopper's e-mail |
country_code | True | String (10) | Country's phone code (Ex. +56) |
Phone | True | String (20) | Shopper's phone number |
Notifications
The final status of the transaction is sent to the merchant's notification URLs once Lyra confirms the payment.
| Lyra result | Notification sent to | Content |
|---|---|---|
| Payment authorised/captured | Success notification URL | Standard ALPS success notification |
| Payment refused | Rejection notification URL | rejection_message: status reported by Lyra (e.g. REFUSED). rejection_code: 0 |
| Any other non-approved state | Rejection notification URL | rejection_message: status reported by Lyra. rejection_code: 0 |
Notifications always include channel=42.
Test Transactions
Simulate payment
Once the notification URL is configured, please follow the steps below to begin the tests.
- Create Transaction with
channel=42. You will be taken to the ALPS checkout with the embedded card form. - Enter one of the Testing Cards below (card number, expiration date, CVV and cardholder name) and click on the Pay button.
- You will be redirected to
url_ok(approved) orurl_error(rejected), and the notification will be sent to your notification URL.
Credit and Debit TEST Cards CLP
TODO (ALPS): test cards pending confirmation with Lyra/Klap for the UAT shop. Do not use the Transbank (channel 3) test cards — they do not apply to this channel.
| Brand | Type | Card Number | CVV | Exp Date | Status |
|---|---|---|---|---|---|
| — | — | — | — | — | — |
Errors
To better error handling, we'll return the errors in the response body using the following fields:
{
"error":{
"code":"NO_DECIMALS",
"message":"The currency[CLP] does not allow decimal values - {currency}"
}
}Request validation errors
| Code | Message |
|---|---|
INVALID_CHANNEL | Invalid channel - {channel} |
INVALID_AMOUNT | Amount must be a valid number - {amount} |
NEGATIVE_AMOUNT | Amount must be greater than zero - {amount} |
NO_DECIMALS | The currency[CLP] does not allow decimal values - {currency} |
INVALID_CURRENCY | Invalid currency. {currency} |
INVALID_CURRENCY_CHANNEL | Currency code not allowed for this channel - {currency} |
