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

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
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 crédito. Informar o valor: 2 – Cartão de crédito1-1
ReferenceStringUse para identificar suas transações.
Ex: REFERENCIA_TESTE_V1
0-160
ShouldUseAntiFraudBooleanUse para identificar se a transação deve ou não passar pela análise do antifraude. No seu painel deve estar sinalizado que a análise será “por transação”. Ao enviar como falso, você está assumindo o risco de chargeback.
Ex: false
0-1
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 crédito1-1
InstallmentQuantityIntNúmero de parcelas.
Ex: 03
0-12
IsPreAuthorizationBoolRealizar a pré-autorização de uma transação com cartão de crédito, sem realizar a captura.
Ex: true
0-1
IsApplyInterestBoolSe deve cobrar juros ao valo da compra.
Ex: true
0-1
InterestRateDecimalValor, em percentual (%), de juros que deve ser cobrado.
Ex: 2.50
0-1
Informe esse grupo caso o cartão de crédito não esteja tokenizado
HolderStringNome impresso no cartão de crédito do comprador.
Ex: João da Silva
1-1100
CardNumberStringNúmero do cartão de crédito do comprador.
Ex: 4122XXXXXXXX6740
1-116
ExpirationDateStringData de expiração do cartão de crédito do comprador.
Ex: MM/YYYY
1-17
SecurityCodeStringCódigo de verificação do cartão de crédito.
Ex: 241
1-14
Informe esse grupo caso o cartão de crédito já esteja tokenizado
TokenStringToken de identificação do cartão de crédito. Como criar?
Ex: 23e2dfdc6ea14c3aaeca924d1397e2c20
1-142
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
ClientRateBooleanInforma se a taxa de parcelamento será cobrada do cliente.1-1
AdvancePaymentBooleanInforma se deseja antecipar os recebíveis.1-1

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": "2",
    "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": 50.00,
            "Quantity": 1
        }
    ],
    "PaymentObject": {
        "Holder": "João da Silva",
        "CardNumber": "5105 1051 0510 5100",
        "ExpirationDate": "12/2020",
        "SecurityCode": "241",
        "InstallmentQuantity": "05"
    },
    "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
        }
    ],
    "ClientRate": true,
    "AdvancePayment": false
}

Status de retorno para transação de Crédito.

Status da TransaçãoMensagem de RetornoDescrição
Autorizado (3)Pagamento AutorizadoO seu pagamento foi autorizado pela operadora do cartão de crédito.
Recusado (8)Pagamento Recusado.Essa operação foi recusada pela operadora do cartão de crédito.
Pagamento Recusado.Transação não autorizada. Cartão Inválido.
Pagamento Recusado.Transação não autorizada. Limite excedido/sem saldo.

Exemplo de um cartão de teste: 5105 1051 0510 5100 / 4444 3333 2222 1111.

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.
CreditCard ObjectDados do cartão de crédito
ResponseDetail.CardNumberStringNúmero do cartão de crédito
ResponseDetail.BrandIntCódigo da bandeira do cartão.
ResponseDetail.InstallmentsIntNúmero de vezes em que essa transação foi parcelada.

Conteúdo de resposta

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

Em caso de sucesso:

{
    "ResponseDetail": {
        "IdTransaction": "9_200808214427",
        "Token": "7ab7de32-4c9e-4157-a20c-f76faee6a8e8",
        "Description": "O seu pagamento foi autorizado pela operadora do cartão de crédito.",
        "Status": 3,
        "Message": "Pagamento Autorizado",
        "CreditCard": {
            "CardNumber": "510510******5100",
            "Brand": 0,
            "Installments": 5
        }
    },
    "HasError": false
}

Em caso de erro:

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