Serviço responsável por realizar o processamento de pagamentos por meio de cartão de débito.

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.

AtributoTipoDescriçãoOcorr.Tam.
IsSandboxBooleanIdentifica 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
AuthenticateBooleanIdentifica se a transação vai ser autenticada com o banco. A maior parte dos bancos exige que a a mesma seja feita de forma autenticada.1-1
ApplicationStringUse para identificar suas aplicações nas transações.
Ex: APLICAÇÃO_TESTE_V1
1-1100
VendorStringNome do vendedor que será vinculado a essa transação.
Ex: João da Silva
0-1200
CallbackUrlStringURL de notificações de mudança de status da transação.
Ex: https://callbacks.exemplo.com.br/api/Notify
0-1200
PaymentMethodStringInformar o código da forma de pagamento Cartão de débito. Informar o valor: 4 – Cartão de débito1-1
ReferenceStringUse para identificar suas transações.
Ex: REFERENCIA_TESTE_V1
0-160
Customer ObjectDados do comprador.1-1
NameStringNome do comprador.
Ex: João da Silva
1-1200
IdentityStringDocumento do comprador
Ex: 31037942000178
1-114
EmailStringEmail do comprador
Ex: contato@dominio.com.br
0-1150
PhoneStringTelefone do comprador
Ex: 5199999999
1-1150
Address ObjectDados de endereço comprador.1-1
ZipCodeStringCEP do endereço do comprador
Ex: 90670090
1-18
StreetStringLogradouro do endereço do comprador
Ex: Av. Princesa Isabel
1-1150
NumberStringNúmero do endereço do comprador
Ex: 123
1-115
ComplementStringComplemento do endereço do comprador
Ex: Sala 801
0-1150
DistrictStringBairro do endereço do comprador
Ex: Higienopolis
1-160
StateInitialsStringUF do endereço do comprador
Ex: RS
1-12
CityNameStringCidade do endereço do comprador
Ex: Porto Alegre
1-1200
CountryNameStringPais do endereço do comprador
Ex: Brasil
1-1200
Products ArrayLista dos produtos nessa transação.1-999
Products[i].CodeStringCodigo do produto nessa transação.
Ex: 123
1-150
Products[i].DescriptionStringDescrição do produto nessa transação.
Ex: Camisa branca
1-1200
Products[i].UnitPriceDecimalValor unitário do produto nessa transação.
Ex: 25.00
1-118v2
Products[i].QuantityStringQuantidade do produto nessa transação.
Ex: 2.00
1-118v2
PaymentObject ObjectDados do cartão de débito1-1
Informe esse grupo caso o cartão de débito não esteja tokenizado
HolderStringNome impresso no cartão de débito do comprador.
Ex: João da Silva
1-1100
CardNumberStringNúmero do cartão de débito do comprador.
Ex: 4122XXXXXXXX6740
1-116
ExpirationDateStringData de expiração do cartão de débito do comprador.
Ex: MM/YYYY
1-17
SecurityCodeStringCódigo de verificação do cartão de débito.
Ex: 241
1-14
AuthenticateBooleanInformar verdadeiro para o cliente finalizar a transação no ambiente bancário.
Ex: true
1-1
Splits ArrayLista dos splits nessa transação.0-999
Splits[i].CodeTaxTypeIntTipo de repasse, informar 1 para Percentual ou 2 para Valor Ex: 11-1
Splits[i].CodeReceiverTypeStringRecebedor, informar 1 para ‘Empresa’ ou 2 ‘Subconta’ Ex: 21-1
Splits[i].IdReceiverIntCódigo da empresa no Maksu. Se enviar o IdReceiver, não precisa enviar o Identity. Ex: 350-1
Splits[i].IdentityStringDocumento do recebedor.
Ex: 12345678901234
1-114
Splits[i].NameStringNome da empresa recebedora.
Ex: Empresa de teste
1-1100
Splits[i].IsPayTaxBooleanInformar se a taxa de custo será paga pelo recebedor.1-1
Splits[i].AmountDecimalInformar o valor do repasse, em percentual ou valor. Ex: 2.301-118v2

Conteúdo de envio

Confira nos exemplos abaixo o conteúdo que será enviado no body da requisição.

{
    "IsSandbox": true,
    "Authenticate": true,
    "Application": "Aplicação de teste",
    "Vendor": "João da Silva",
    "CallbackUrl": "https://callbacks.exemplo.com.br/api/Notify",
    "PaymentMethod": "4",
    "Reference": "34844115", 
    "Customer": {
        "Name": "João da silva",
        "Identity": "18978393080",
        "Phone": "51999999999",
        "Email": "contato@dominio.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": 5,
            "Quantity": 1
        }
    ],
    "PaymentObject": {
        "Holder": "João da Silva",
        "CardNumber": "4024007153763191",
        "ExpirationDate": "12/2020",
        "SecurityCode": "241",
        "Authenticate": true
    },
        "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
        }
    ]
}

Status de retorno para transação de Débito.

Status da TransaçãoMensagem de RetornoDescrição
Pendente (1)Pagamento PendentePara finalizar a operação, você deve concluir a operação no ambiente bancário.
Recusado (8)Transação não autorizada.Autenticação não foi realizada.

Exemplo de um cartão de teste: 4024 0071 5376 3191

Bancos aceitos.

Confira na lista abaixo as bandeiras e os bancos aceitos em uma transação de débito.

MastercardVisa
BradescoBradesco
Banco do BrasilBanco do Brasil
SantanderSantander
ItaúItaú
CitiBankCitiBank
BRB
Caixa
BancooB

O Código de Verificação e a Validade podem ser aleatórias, respeitando o formato dos campos.

Estrutura do conteúdo de resposta

Confira nos exemplos abaixo a estrutura do conteúdo de resposta desse serviço.

AtributoTipoDescrição
HasErrorBooleanIndica se ocorreu erro na operação.
ErrorStringEm caso de erro, esse atributo detalhará o problema.
ResponseDetail ObjectObjeto de retorno da requisiçãoTodos
ResponseDetail.IdTransactionIntCódigo identificador da transação.
ResponseDetail.TokenStringToken de confirmação da transação.
ResponseDetail.DescriptionStringDescrição detalhada do Status da transação.
ResponseDetail.StatusIntCódigo do Status da transação.
ResponseDetail.MessageStringDescrição resumida do Status da transação.
ResponseDetail.AuthenticationUrlStringUrl para realizar a autenticação e confirmação do débito bancário.
DebitCard ObjectDados do cartão de débito
ResponseDetail.CardNumberStringNúmero do cartão de débito
ResponseDetail.BrandIntCódigo da bandeira do cartão.

Conteúdo de resposta

Confira nos exemplos abaixo o conteúdo de resposta desse serviço.

Em caso de sucesso:

{
    "ResponseDetail": {
        "IdTransaction": 1067288,
        "Token": "b9ecbfe1-aacd-4b8c-b200-ca77a7a1f6a8",
        "Description": "Para finalizar a operação, você deve concluir a operação no ambiente bancário.",
        "Status": 1,
        "Message": "Pagamento Pendente",
        "DebitCard": {
            "CardNumber": "40242******3191",
            "Brand": 0
        },
        "AuthenticationUrl": "https://api.maksu.com.br/qf3HYcJq1Dceo"
    },
    "HasError": false
}

Em caso de erro:

{
    "ResponseDetail": {
        "IdTransaction": 1067281,
        "Token": "b9ecbfe1-aacd-4b8c-b200-ca77a7a1f6a8",
        "Description": "Transação não autorizada. Autenticação não foi realizada.",
        "Status": 8,
        "Message": "Pagamento Recusado"
    },
    "HasError": false
}

Em caso de erro:

{
  "HasError": true,
  "ErrorCode": "123",
  "Error": "O valor mínimo de uma transação é de R$ 5,00."
}