Serviço responsável por realizar o processamento de pagamentos por meio de Criptomoedas.
https://api.maksu.com.br/Payment
Exemplos de código
Confira nos exemplos abaixo como esse serviço deve ser consumido em sua aplicação.
string url = "https://api.maksu.com.br/Payment"
// O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
string json = "{\n \"IsSandbox\": true,\n ...}";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Headers.Add("X-API-KEY", "[INFORME_SEU_TOKEN]");
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
Console.Write(streamReader.ReadToEnd());
}
}
var request = require("request");
var options = { method: 'POST',
url: 'https://api.maksu.com.br/Payment',
headers: { 'x-api-key': '[INFORME_SEU_TOKEN]', 'content-type': 'application/json' },
// O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
body: "{\n \"IsSandbox\": true,\n ...}" };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
require 'uri'
require 'net/http'
url = URI("https://api.maksu.com.br/Payment")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'
request["x-api-key"] = '[INFORME_SEU_TOKEN]'
# O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
request.body = "{\n \"IsSandbox\": true,\n ...}"
response = http.request(request)
puts response.read_body
// O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
var data = "{\n \"IsSandbox\": true,\n ...}";
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://api.maksu.com.br/Payment");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("x-api-key", "[INFORME_SEU_TOKEN]");
xhr.send(data);
import requests
url = "https://api.maksu.com.br/Payment"
# O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
payload = "{\n \"IsSandbox\": true,\n ...}"
headers = {
'content-type': "application/json",
'x-api-key': "[INFORME_SEU_TOKEN]"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
String url = "https://api.maksu.com.br/Payment";
// O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
String payload = "{\n \"IsSandbox\": true,\n ...}";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Content-Length", String.valueOf(payload.length()));
con.setRequestProperty("X-API-KEY", "[INFORME_SEU_TOKEN]");
OutputStream os = con.getOutputStream();
os.write(payload.getBytes());
var request = URLRequest(url: 'https://api.maksu.com.br/Payment')
request.setValue("[INFORME_SEU_TOKEN]", forHTTPHeaderField: "X-API-KEY")
request.httpMethod = "POST"
// O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
let payload: [String: Any] = ["{\n \"IsSandbox\": true,\n ...}"]
let jsonData = try? JSONSerialization.data(withJSONObject: json)
request.httpBody = jsonData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}
let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
if let responseJSON = responseJSON as? [String: Any] {
print(responseJSON)
}
}
task.resume()
// O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
$payload = array(
'FormaPagamento' => 1,
...
);
$opts = array(
'http'=>array(
'method'=>"POST",
'header'=>"X-API-KEY: [INFORME_SEU_TOKEN]\r\n" .
"Content-type: application/json\r\n",
'content'=> json_encode($payload)
)
);
$context = stream_context_create($opts);
$result = file_get_contents('https://api.maksu.com.br/Payment', false, $context);
if ($result === FALSE) { /* Handle error */ }
var_dump($result);
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.maksu.com.br/Payment"
payload := strings.NewReader("{\n \"IsSandbox\": true,\n ...}");
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("x-api-key", "[INFORME_SEU_TOKEN]")
req.Header.Add("Host", "payment.safe2pay.com.br")
req.Header.Add("Connection", "keep-alive")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
}
curl --request POST \
--url https://api.maksu.com.br/Payment \
--header 'content-type: application/json' \
--header 'x-api-key: [INFORME_SEU_TOKEN]' \
# O exemplo do objeto completo está detalhado abaixo na sessão "Conteúdo de Envio".
--data "{\n \"IsSandbox\": true,\n ...}"
Estrutura do conteúdo de envio
Confira nos exemplos abaixo a estrutura do conteúdo de envio desse serviço que será enviado no body da requisição.
| Atributo | Tipo | Descrição | Ocorr. | Tam. |
|---|---|---|---|---|
| IsSandbox | Boolean | Identifica se a transação vai ser realizada em ambiente sandbox ou não. Quando True deve-se obrigatoriamente informar a chave de API de Sandbox | 1-1 | – |
| Application | String | Use para identificar suas aplicações nas transações. Ex: APLICAÇÃO_TESTE_V1 | 1-1 | 100 |
| Vendor | String | Nome do vendedor que será vinculado a essa transação. Ex: João da Silva | 0-1 | 200 |
| CallbackUrl | String | URL de notificações de mudança de status da transação. Ex: https://callbacks.exemplo.com.br/api/Notify | 0-1 | 200 |
| PaymentMethod | String | Informar o código da forma de pagamento Criptomoedas. Informar o valor: 3 – Criptomoedas | 1-1 | – |
| PaymentObject | Object | Dados da Criptomoeda. Opcional: caso não seja enviado, a transação será realizada em BTC. | 0-1 | – |
| Symbol | String | Tipo de Criptomoeda: BTC para BitCoin. BCH para BitCoin Cash. LTC para LiteCoin. Ex: LTC | 1-1 | 3 |
| Reference | String | Use para identificar suas transações. Ex: REFERENCIA_TESTE_V1 | 0-1 | 60 |
| Customer | Object | Dados do comprador. | 1-1 | – |
| Name | String | Nome do comprador. Ex: João da Silva | 1-1 | 200 |
| Identity | String | Documento do comprador Ex: 31037942000178 | 1-1 | 14 |
| String | Email do comprador Ex: contato@dominio.com.br | 0-1 | 150 | |
| Phone | String | Telefone do comprador Ex: 5199999999 | 1-1 | 150 |
| Address | Object | Dados de endereço comprador. | 1-1 | – |
| ZipCode | String | CEP do endereço do comprador Ex: 90670090 | 1-1 | 8 |
| Street | String | Logradouro do endereço do comprador Ex: Av. Princesa Isabel | 1-1 | 150 |
| Number | String | Número do endereço do comprador Ex: 123 | 1-1 | 15 |
| Complement | String | Complemento do endereço do comprador Ex: Sala 801 | 0-1 | 150 |
| District | String | Bairro do endereço do comprador Ex: Higienopolis | 1-1 | 60 |
| StateInitials | String | UF do endereço do comprador Ex: RS | 1-1 | 2 |
| CityName | String | Cidade do endereço do comprador Ex: Porto Alegre | 1-1 | 200 |
| CountryName | String | Pais do endereço do comprador Ex: Brasil | 1-1 | 200 |
| Products | Array | Lista dos produtos nessa transação. | 1-999 | – |
| Products[i].Code | String | Codigo do produto nessa transação. Ex: 123 | 1-1 | 50 |
| Products[i].Description | String | Descrição do produto nessa transação. Ex: Camisa branca | 1-1 | 200 |
| Products[i].UnitPrice | Decimal | Valor unitário do produto nessa transação. Ex: 25.00 | 1-1 | 18v2 |
| Products[i].Quantity | String | Quantidade do produto nessa transação. Ex: 2.00 | 1-1 | 18v2 |
| Splits | Array | Lista dos splits nessa transação. | 0-999 | – |
| Splits[i].CodeTaxType | Int | Tipo de repasse, informar 1 para Percentual ou 2 para Valor Ex: 1 | 1-1 | – |
| Splits[i].CodeReceiverType | String | Recebedor, informar 1 para ‘Empresa’ ou 2 ‘Subconta’ Ex: 2 | 1-1 | – |
| Splits[i].IdReceiver | Int | Código da empresa no Safe2Pay. Se enviar o IdReceiver, não precisa enviar o Identity. Ex: 35 | 0-1 | – |
| Splits[i].Identity | String | Documento do recebedor. Ex: 12345678901234 | 1-1 | 14 |
| Splits[i].Name | String | Nome da empresa recebedora. Ex: Empresa de teste | 1-1 | 100 |
| Splits[i].IsPayTax | Boolean | Informar se a taxa de custo será paga pelo recebedor. | 1-1 | – |
| Splits[i].Amount | Decimal | Informar o valor do repasse, em percentual ou valor. Ex: 2.30 | 1-1 | 18v2 |
Conteúdo de envio
Confira nos exemplos abaixo o conteúdo que será enviado no body da requisição.
{
"IsSandbox": true,
"Application": "Aplicação de teste",
"Vendor": "João da Silva",
"CallbackUrl": "https://callbacks.exemplo.com.br/api/Notify",
"PaymentMethod": "3",
"Reference": "34844115",
"Customer": {
"Name": "João da silva",
"Identity": "18978393080",
"Phone": "51999999999",
"Email": "safe2pay@safe2pay.com.br",
"Address": {
"ZipCode": "90670090",
"Street": "Logradouro",
"Number": "123",
"Complement": "Complemento",
"District": "Higienopolis",
"CityName": "Porto Alegre",
"StateInitials": "RS",
"CountryName": "Brasil"
}
},
"Products": [
{
"Code": "001",
"Description": "Teste 1",
"UnitPrice": 1.99,
"Quantity": 10
},
{
"Code": "002",
"Description": "Teste 1",
"UnitPrice": 1.99,
"Quantity": 10
},
{
"Code": "002",
"Description": "Teste 1",
"UnitPrice": 1.99,
"Quantity": 10
}
],
"Splits": [
{
"CodeTaxType": 1,
"CodeReceiverType": 1,
"Identity": "78310447000154",
"Name": "EMPRESA DE TESTE",
"IsPayTax": false,
"Amount": 5.95
},
{
"CodeTaxType": 1,
"CodeReceiverType": 1,
"Identity": "78310447000154",
"Name": "EMPRESA DE TESTE",
"IsPayTax": false,
"Amount": 5.95
}
]
}
Estrutura do conteúdo de resposta
Confira nos exemplos abaixo a estrutura do conteúdo de resposta desse serviço.
| Atributo | Tipo | Descrição |
|---|---|---|
| HasError | Boolean | Indica se ocorreu erro na operação. |
| Error | String | Em caso de erro, esse atributo detalhará o problema. |
| ResponseDetail | Object | Objeto de retorno da requisição |
| ResponseDetail.IdTransaction | String | Código identificador da transação. |
| ResponseDetail.Status | Int | Código do Status da transação. |
| ResponseDetail.Message | String | Descrição resumida do Status da transação. |
| ResponseDetail.Description | String | Descrição detalhada do Status da transação. |
| ResponseDetail.QrCode | String | Url da imagem do QRCode de pagamento. |
| ResponseDetail.AmountBTC | Decimal | Valor da transação convertido em criptomoeda. O BTC será substituído pelo símbolo da criptomoeda utilizada, se for LTC (AmountLTC) ou BCH (AmountBCH). |
| ResponseDetail.Symbol | Decimal | Indica a sigla da criptomoeda |
| ResponseDetail.WalletAddress | String | Endereço da Wallet que o valor será depositado. |
Conteúdo de resposta
Confira nos exemplos abaixo o conteúdo de resposta desse serviço.
Em caso de sucesso:
{
"ResponseDetail": {
"IdTransaction": "9_200808221517",
"Status": "1",
"Message": "Pagamento Pendente",
"Description": "Estamos aguardando a transferência do valor em bitcoins. Após a transferência, o pagamento pode levar até 15 minutos para ser compensado.",
"QrCode": "https://logotipos.blob.core.windows.net/logotipos/e37797e8-39c2-4518-b35e-f7967d5ed413.png",
"Symbol": "BTC",
"AmountBTC": 0.00096696,
"WalletAddress": "1ASZ4KrC1KQynvf6Dcg9FMgMiJsTCkpiw"
},
"HasError": false
}
Em caso de erro:
{
"HasError": true,
"ErrorCode": "123",
"Error": "O valor mínimo de uma transação é de R$ 5,00."
}