Channel: 2
Provider: SafetyPay
Payment Method: APM
Available Currencies
Name | Code | Country |
---|---|---|
Chilean Pesos | CLP | Chile |
Peruvian Sol | PEN | Peru |
US Dollar | USD | Peru, Ecuador |
Mexican peso | MXN | Mexico |
Brazilian real | BRL | Brazil |
Request example
curl --request POST \
--url http://paymentscert.alps.cl/justpay/check-out/SecurePayment \
--data public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks \
--data time=2022-10-13T14:39:09 \
--data channel=2 \
--data amount=100 \
--data currency=CLP \
--data trans_id=1 \
--data time_expired=120 \
--data url_ok=https://bit.ly/3S4I7iR \
--data url_error=https://bit.ly/3S5aOwc \
--data signature=9bddd509e1173b8f36615cc0e28490187eb0d14030377289c8920ddcd1c7acdb
--data 'shopper_information={"name_shopper": "Jon","last_name_Shopper": "Snow","type_doc_identi": "DNI","Num_doc_identi": "92738009","email": "[email protected]","country_code": "+56","Phone": "999763655"}'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "http://paymentscert.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 => "public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks&time=2022-10-13T14%3A39%3A09&channel=2&amount=100¤cy=CLP&trans_id=1&time_expired=120&url_ok=https%3A%2F%2Fbit.ly%2F3S4I7iR&url_error=https%3A%2F%2Fbit.ly%2F3S5aOwc&signature=9bddd509e1173b8f36615cc0e28490187eb0d14030377289c8920ddcd1c7acdb&shopper_information=%7B%22name_shopper%22%3A%20%22Jon%22%2C%22last_name_Shopper%22%3A%20%22Snow%22%2C%22type_doc_identi%22%3A%20%22DNI%22%2C%22Num_doc_identi%22%3A%20%2292738009%22%2C%22email%22%3A%20%22no-reply%40alps.cl%22%2C%20%22country_code%22%3A%20%22%2B56%22%2C%20%22Phone%22%3A%20%22999763655%22%7D",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "http://paymentscert.alps.cl/justpay/check-out/SecurePayment"
payload = "public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks&time=2022-10-13T14%3A39%3A09&channel=2&amount=100¤cy=CLP&trans_id=1&time_expired=120&url_ok=https%3A%2F%2Fbit.ly%2F3S4I7iR&url_error=https%3A%2F%2Fbit.ly%2F3S5aOwc&signature=9bddd509e1173b8f36615cc0e28490187eb0d14030377289c8920ddcd1c7acdb&shopper_information=%7B%22name_shopper%22%3A%20%22Jon%22%2C%22last_name_Shopper%22%3A%20%22Snow%22%2C%22type_doc_identi%22%3A%20%22DNI%22%2C%22Num_doc_identi%22%3A%20%2292738009%22%2C%22email%22%3A%20%22no-reply%40alps.cl%22%2C%20%22country_code%22%3A%20%22%2B51%22%2C%20%22Phone%22%3A%20%22999763655%22%7D"
response = requests.request("POST", url, data=payload)
print(response.text)
const qs = require("querystring");
const http = require("http");
const options = {
"method": "POST",
"hostname": "paymentscert.alps.cl",
"port": null,
"path": "/justpay/check-out/SecurePayment",
"headers": {}
};
const req = http.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: 'zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks',
time: '2022-10-13T14:39:09',
channel: '2',
amount: '100',
currency: 'CLP',
trans_id: '1',
time_expired: '120',
url_ok: 'https://bit.ly/3S4I7iR',
url_error: 'https://bit.ly/3S5aOwc',
signature: '9bddd509e1173b8f36615cc0e28490187eb0d14030377289c8920ddcd1c7acdb',
shopper_information:'{"name_shopper": "Jon","last_name_Shopper": "Snow","type_doc_identi": "DNI","Num_doc_identi": "92738009","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 |
amount | True | Double | The amount of the transaction. Use 2 decimals. |
currency | True | String (3) | Transaction currency code |
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 Cash: 2 hours For Brazil: Online: 2 hours Cash 24 hrs |
url_ok | True | String (255) | URL where shopper will be redirected from the online banking if payment was successful (Must be Https) |
url_error | True | String (255) | URL where shopper will be redirected from the online banking if payment was wrong.(Must be Https) |
signature | True | String (255) | Signature hash256: Review signature calculation |
direct_integration | False | Boolean | Make direct integration to respond JSON format |
shopper_information | True | JSON String | JSON String Data: Review JSON index & format |
shopper_information
JSON format
shopper_information
JSON formatField shopper_information must be send in string format (JSON encode).
'{"name_shopper": "Jon", "last_name_Shopper": "Snow", "type_doc_identi": "DNI", "Num_doc_identi": "92738009", "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 (4) | Country's phone code (Ex. +57) |
Phone | True | String (20) | Shopper's phone number |
country | False | String (3) | Country ISO code ['CHL', 'MEX', 'PER', 'ECU'] |
For channel 1 and 2 you can filter the bank using the filter_by field.
The list of banks is available at the following link: https://payments.alps.cl/justpay/api/banks
The value to send is list of bank IDs separated by commas. For example: 8216, 8066, 8014, 8015.
Direct integration
You have the option to create a direct checkout, for this integration you'll receive a JSON Object instead of the checkout url.
Aditional fields for direct integration
Attribute | Mandatory | Data type | Description |
---|---|---|---|
direct_integration | True | Integer | Send 1 for direct integration |
country | True | String(3) | ISO Country code: [MEX, PER, BRA, CHL, ECU] |
user_bank_code | True | Integer | bank id from https://payments.alps.cl/justpay/api/banks/safetypay |
Available country codes:
- Chile:
CHL
- Peru:
PER
- Ecuador:
ECU
- Mexico:
MEX
- Brazil:
BRA
Safetypay banks request
- Production URL: https://payments.alps.cl/justpay/api/banks/safetypay
- Sandbox URL: https://paymentscert.alps.cl/justpay/api/banks/safetypay
Attribute | Mandatory | Data type | Description |
---|---|---|---|
channel | True | Integer | 2 for cash payments |
country | True | String(3) | Country ISO code |
public_key | True | Integer | Your public key |
curl --request GET \
--url 'http://paymentscert.alps.cl/justpay/api/banks/safetypay?channel=2&country=PER&public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "http://paymentscert.alps.cl/justpay/api/banks/safetypay?channel=2&country=PER&public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "http://paymentscert.alps.cl/justpay/api/banks/safetypay"
querystring = {"channel":"2","country":"PER","public_key":"zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks"}
response = requests.request("GET", url, params=querystring)
print(response.text)
const http = require("http");
const options = {
"method": "GET",
"hostname": "paymentscert.alps.cl",
"port": null,
"path": "/justpay/api/banks/safetypay?channel=2&country=PER&public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks",
"headers": {}
};
const req = http.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.end();
Request example for direct integration
curl --request POST \
--url http://localhost/justpay/check-out/SecurePayment \
--data public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks \
--data time=2022-10-13T14:39:09 \
--data channel=2 \
--data amount=30 \
--data currency=CLP \
--data trans_id=1 \
--data time_expired=120 \
--data url_ok=http://bit.ly/3S4I7iR \
--data url_error=https://bit.ly/3S5aOwc \
--data signature=3c8e8d6b03d4639e1ffc06741eb52579354a03171d3d05dba0c113e1bbf975cd \
--data 'shopper_information={"name_shopper": "Jon","last_name_Shopper": "Snow","type_doc_identi": "DNI","Num_doc_identi": "92738009","email": "[email protected]", "Phone": "999763655"}' \
--data direct_integration=1 \
--data country_code=PER \
--data user_bank_code=1002
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "http://localhost/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 => "public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks&time=2022-10-13T14%3A39%3A09&channel=2&amount=30¤cy=CLP&trans_id=1&time_expired=120&url_ok=http%3A%2F%2Fbit.ly%2F3S4I7iR&url_error=https%3A%2F%2Fbit.ly%2F3S5aOwc&signature=3c8e8d6b03d4639e1ffc06741eb52579354a03171d3d05dba0c113e1bbf975cd&shopper_information=%7B%22name_shopper%22%3A%20%22Jon%22%2C%22last_name_Shopper%22%3A%20%22Snow%22%2C%22type_doc_identi%22%3A%20%22DNI%22%2C%22Num_doc_identi%22%3A%20%2292738009%22%2C%22email%22%3A%20%22no-reply%40alps.cl%22%2C%20%22Phone%22%3A%20%22999763655%22%7D&direct_integration=1&country_code=PER&user_bank_code=1002",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "http://localhost/justpay/check-out/SecurePayment"
payload = "public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks&time=2022-10-13T14%3A39%3A09&channel=2&amount=30¤cy=CLP&trans_id=1&time_expired=120&url_ok=http%3A%2F%2Fbit.ly%2F3S4I7iR&url_error=https%3A%2F%2Fbit.ly%2F3S5aOwc&signature=3c8e8d6b03d4639e1ffc06741eb52579354a03171d3d05dba0c113e1bbf975cd&shopper_information=%7B%22name_shopper%22%3A%20%22Jon%22%2C%22last_name_Shopper%22%3A%20%22Snow%22%2C%22type_doc_identi%22%3A%20%22DNI%22%2C%22Num_doc_identi%22%3A%20%2292738009%22%2C%22email%22%3A%20%22no-reply%40alps.cl%22%2C%20%22Phone%22%3A%20%22999763655%22%7D&direct_integration=1&country_code=PER&user_bank_code=1002"
response = requests.request("POST", url, data=payload)
print(response.text)
const qs = require("querystring");
const http = require("http");
const options = {
"method": "POST",
"hostname": "localhost",
"port": null,
"path": "/justpay/check-out/SecurePayment",
"headers": {}
};
const req = http.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: 'zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks',
time: '2022-10-13T14:39:09',
channel: '2',
amount: '30',
currency: 'CLP',
trans_id: '1',
time_expired: '120',
url_ok: 'http://bit.ly/3S4I7iR',
url_error: 'https://bit.ly/3S5aOwc',
signature: '3c8e8d6b03d4639e1ffc06741eb52579354a03171d3d05dba0c113e1bbf975cd',
shopper_information: '{"name_shopper": "Jon","last_name_Shopper": "Snow","type_doc_identi": "DNI","Num_doc_identi": "92738009","email": "[email protected]", "Phone": "999763655"}',
direct_integration: '1',
country_code: 'PER',
user_bank_code: 1002
}));
req.end();
Response for direct integration
{
"request_id": "prdcpr_028c7d5e-e791-491b-b8d1-1bda9e4e4c69",
"response_datetime": "2023-01-24T16:34:16",
"operation_id": "0123024337013713",
"transaction_id": "337013",
"payment_expiration_datetime": "terça-feira 24 de janeiro 03:34pm (Brasilia)",
"payment_expiration_datetime_utc": "2023-01-24T18:34:17",
"payable_amounts": [
{
"amount": {
"value": 6,
"currency_code": "BRL"
},
"additional_info": null
}
],
"payment_locations": [
{
"location_url": "http://www.caixa.gov.br/atendimento/Paginas/encontre-a-caixa.aspx",
"location_id": "8176",
"location_name": "Lotéricas",
"bank_subsidiary_code": "8176_CASH",
"payment_instructions": [
{
"name": "TransactionID",
"value": "337013",
"display_label": "Identificador do cliente"
},
{
"name": "PaymentReference",
"value": "337013",
"display_label": ""
},
{
"name": "AgreementCode",
"value": "30911745",
"display_label": "Número do Convenio PEC"
}
],
"howto_pay_steps": [
{
"step_number": 1,
"step_instruction": "Dirija-se a uma Casa Lotérica ou Agência da CAIXA Econômica Federal. Informe o [Convênio PEC SafetyPay Brasil 30911745]"
},
{
"step_number": 2,
"step_instruction": "Forneça o identificador do cliente [337013]"
},
{
"step_number": 3,
"step_instruction": "Finalmente, confirme o valor do pagamento [R$ 6.00]"
},
{
"step_number": 4,
"step_instruction": "IMPORTANTE: Os Pagamentos acima de R$ 2.000,00 só podem ser feitos nas agências da Caixa Econômica Federal"
}
],
"status": 1
},
{
"location_url": "http://www.caixa.gov.br/atendimento/Paginas/encontre-a-caixa.aspx",
"location_id": "8176",
"location_name": "Lotéricas",
"bank_subsidiary_code": "8176_CASH_B2B",
"payment_instructions": [
{
"name": "TransactionID",
"value": "337013",
"display_label": "Identificador do cliente"
},
{
"name": "PaymentReference",
"value": "337013",
"display_label": ""
},
{
"name": "AgreementCode",
"value": "30911745",
"display_label": "Número do Convenio PEC"
}
],
"howto_pay_steps": [
{
"step_number": 1,
"step_instruction": "Dirija-se a uma Casa Lotérica ou Agência da CAIXA Econômica Federal. Informe o [Convênio PEC SafetyPay Brasil 30911745]"
},
{
"step_number": 2,
"step_instruction": "Forneça o identificador do cliente [337013]"
},
{
"step_number": 3,
"step_instruction": "Finalmente, confirme o valor do pagamento [R$ 6.00]"
},
{
"step_number": 4,
"step_instruction": "IMPORTANTE: Os Pagamentos acima de R$ 2.000,00 só podem ser feitos nas agências da Caixa Econômica Federal"
}
],
"status": 1
},
{
"location_url": "https://banco.bradesco/html/classic/atendimento/rede-de-atendimento/index.shtm#",
"location_id": "8326",
"location_name": "Bradesco Pague Facil",
"bank_subsidiary_code": "8326_CASH",
"payment_instructions": [
{
"name": "TransactionID",
"value": "00337013",
"display_label": "Código de Transação"
},
{
"name": "PaymentReference",
"value": "00337013",
"display_label": ""
},
{
"name": "AgreementCode",
"value": "SafetyPay Brasil",
"display_label": "Convênio Pague Fácil"
}
],
"howto_pay_steps": [
{
"step_number": 1,
"step_instruction": "Dirija-se um Bradesco Expresso ou Terminais de Autoatendimento Bradesco Dia & Noite (BDN), localize o correspondente bancário mais próximo em https://www.safetypay.com/pt/bradesco-cash/"
},
{
"step_number": 2,
"step_instruction": "Indique que você fará um pagamento Pague Fácil Bradesco a Empresa [SafetyPay Brasil]"
},
{
"step_number": 3,
"step_instruction": "Mencionar o Código de Transação [00337013]"
},
{
"step_number": 4,
"step_instruction": "Confirme o valor do pagamento [R$ 6,00]"
}
],
"status": 1
},
{
"location_url": "https://banco.bradesco/html/classic/atendimento/rede-de-atendimento/index.shtm#",
"location_id": "8326",
"location_name": "Bradesco Pague Facil",
"bank_subsidiary_code": "8326_CASH_B2B",
"payment_instructions": [
{
"name": "TransactionID",
"value": "00337013",
"display_label": "Código de Transação"
},
{
"name": "PaymentReference",
"value": "00337013",
"display_label": ""
},
{
"name": "AgreementCode",
"value": "SafetyPay Brasil",
"display_label": "Convênio Pague Fácil"
}
],
"howto_pay_steps": [
{
"step_number": 1,
"step_instruction": "Dirija-se um Bradesco Expresso ou Terminais de Autoatendimento Bradesco Dia & Noite (BDN), localize o correspondente bancário mais próximo em https://www.safetypay.com/pt/bradesco-cash/"
},
{
"step_number": 2,
"step_instruction": "Indique que você fará um pagamento Pague Fácil Bradesco a Empresa [SafetyPay Brasil]"
},
{
"step_number": 3,
"step_instruction": "Mencionar o Código de Transação emphasize"
},
{
"step_number": 4,
"step_instruction": "Confirme o valor do pagamento [R$ 6,00]"
}
],
"status": 1
}
],
"digest_check": "0857315E9A7391F0AE59C4ADC6AE6F5D71A7A779026AFACA5C45C333E2687114",
"error": null,
"custom_data": null
}
All values between
[]
must be replace on the merchant site to emphasize this information. For example: [337013] must be replace by 337013 on your HTML code.
Filters
Using the parameter filter_by
you may filter to show only the desire banks. You may use a comma separated files with bank ids.
Get Bank ids
Create a GET request to /api/banks/safetypay
to obtain all available bank ids by country
Parameter | Mandatory | Data Type | Description |
---|---|---|---|
channel | True | Integer | Channel number [1, 2] |
country | True | String (3) | [CHL, PER, BRA, ECU, MEX] |
public_key | True | String (255) | Public key, unique value that identifies the commerce |
Request example
curl --request GET \
--url 'https://paymentscert.alps.cl/justpay/api/banks/safetypay?channel=2&country=CHL&public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks'
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://paymentscert.alps.cl/justpay/api/banks/safetypay?channel=2&country=CHL&public_key=zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "https://paymentscert.alps.cl/justpay/api/banks/safetypay"
querystring = {"channel":"2","country":"CHL","public_key":"zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks"}
response = requests.request("GET", url, params=querystring)
print(response.text)
const request = require('request');
const options = {
method: 'GET',
url: 'https://paymentscert.alps.cl/justpay/api/banks/safetypay',
qs: {
channel: '2',
country: 'CHL',
public_key: 'zyssglikvtltbd2se2hudwl50jjomil2uytp7tpvjtxyfdw469jagk8yvnex9jks'
}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Test Transactions
Simulate Payment
Once the notification URL is configured, please follow the steps below to begin the tests.
-
Create a Transaction: The first thing you need to do is create a transaction, you will be redirected to SafetyPay.
-
Log In: Enter the following credential and then log in:
- url: http://sandbox-demobank.safetypay.com/Default/Login.aspx?ReturnUrl=%2fDefault%2fPayment.aspx
- username: test
- password: test
-
Select currency, and enter Transaction ID and amount. Where Transaction ID is the Código Identificador from step 1
-
Click confirm to mark the transaction as paid
-
The transaction will be marked as paid and will receive the success webhook notification