SOLUÇÃO DE POSSÍVEIS ERROS | SEMANA 6 - CONSUMO DE API's TERCEIRAS

Manda um print do seu objeto de requisição … aquele lá do postman

Vou colar do jeito que está agora:

{

"MerchantOrderId": "2014111701",

"Customer": {

    "Name": "Comprador crédito completo",

    "Identity": "11225468954",

    "IdentityType": "CPF",

    "Email": "compradorteste@teste.com",

    "Birthdate": "1991-01-02",

    "Address": {

        "Street": "Rua Teste",

        "Number": "123",

        "Complement": "AP 123",

        "ZipCode": "12345987",

        "City": "Rio de Janeiro",

        "State": "RJ",

        "Country": "BRA"

    },

    "DeliveryAddress": {

        "Street": "Rua Teste",

        "Number": "123",

        "Complement": "AP 123",

        "ZipCode": "12345987",

        "City": "Rio de Janeiro",

        "State": "RJ",

        "Country": "BRA"

    },

    "Billing": {

        "Street": "Rua Neturno",

        "Number": "12345",

        "Complement": "Sala 123",

        "Neighborhood": "Centro",

        "City": "Rio de Janeiro",

        "State": "RJ",

        "Country": "BR",

        "ZipCode": "20080123"

    }

},

"Payment": {

    "ServiceTaxAmount": 0,

    "Installments": 1,

    "Interest": "ByMerchant",

    "Capture": false,

    "Authenticate": false,

    "Payment.Recurrent": false,

    "SoftDescriptor": "123456789ABCD",

    "CreditCard": {

        "CardNumber": "4551870000000183",

        "Holder": "Teste Holder",

        "ExpirationDate": "12/2022",

        "SecurityCode": "123",

        "SaveCard": "false",

        "Brand": "Visa",

        "CardOnFile": {

            "Usage": "Used",

            "Reason": "Unscheduled"

        }

    },

    "IsCryptoCurrencyNegotiation": "false",

    "Type": "CreditCard",

    "Amount": 15700,

    "AirlineData": {

        "TicketNumber": "AR988983"

    }

}

}

1 Like

Tenta passar Authenticate e Payment.Recurrent com os valores false entre aspas e IsCryptoCurrencyNegotiation": true

1 Like

Agora deu certo :v:t6:
Eu fiquei testando pra achar o erro e acabei tirando aspas de onde não precisava. Me salvou @jeanfraga

1 Like

Galera, na playlist de consumo de apis terceiras o Erik se inscreve no ambiente de testes do pagar.me mas a página está diferente e não tem mais a opção de conta de testes. Como fizeram pra se inscrever?

Solução: o problema era o número do cartão de crédito de exemplo que está informado na documentação da Cielo… troquei pelos dados do meu cartão (no JSON enviado no body da requisição de compra pelo Postman) e dai deu tudo certo!


Na aula 7, ao tentar realizar a captura da transação de compra, está retornando essa resposta:

No meu terminal está tudo ok, com status 200…
image

Mais alguém passou por esse problema?

Segue abaixo os códigos…

body do Postman
{

    "MerchantOrderId": "2014111701",

    "Customer": {

        "Name": "Comprador crédito simples"

    },

    "Payment": {

        "ServiceTaxAmount": 0,

        "Installments": 1,

        "Interest": "ByMerchant",

        "Capture": false,

        "Authenticate": "false",

        "Payment.Recurrent": "false",

        "SoftDescriptor": "123456789ABCD",

        "CreditCard": {

            "CardNumber": "4551870000000183",

            "Holder": "Teste Holder",

            "ExpirationDate": "12/2030",

            "SecurityCode": "123",

            "SaveCard": "false",

            "Brand": "Visa",

            "CardOnFile": {

                "Usage": "Used",

                "Reason": "Unscheduled"

            }

        },

        "IsCryptoCurrencyNegotiation": true,

        "Type": "CreditCard",

        "Amount": 15700,

        "AirlineData": {

            "TicketNumber": "AR988983"

        }

    }

}
cielo.js
const fetch = (...args) => import('node-fetch').then(({ default: fetch }) => fetch(...args));

class Cielo {
    static async compra(params) {
        const response = await fetch('https://apisandbox.cieloecommerce.cielo.com.br/1/sales/', {
            method: 'post',
            body: JSON.stringify(params),
            headers: {
                'Content-Type': 'application/json',
                'MerchantId': 'e8193b09-68a5-495d-b4af-a5c4793b2f00',
                'MerchantKey': 'IJAGCAZQQUWXSWNBTCUOXNATLWKRQYCQQFOHGCYD'
            }
        });
        const data = await response.json();
        return data;
    };

    static async captura(paymentId) {
        const response = await fetch(`https://apisandbox.cieloecommerce.cielo.com.br/1/sales/${paymentId}/capture`, {
            method: 'put',
            headers: {
                'Content-Type': 'application/json',
                'MerchantId': 'e8193b09-68a5-495d-b4af-a5c4793b2f00',
                'MerchantKey': 'IJAGCAZQQUWXSWNBTCUOXNATLWKRQYCQQFOHGCYD'
            }
        });
        const data = await response.json();
        return data;
    }
}

module.exports = Cielo;
compras.js
var express = require('express');
var router = express.Router();
var cielo = require('../lib/cielo');

/* POST criacao de compra */
router.post('/', function(req, res, next) {
  cielo.compra(req.body).then((result) => {
    //res.send(result);
    cielo.captura(result.Payment.PaymentId).then((result) => {
      res.send(result);
    });
  });
});

/* GET criacao de compra */
router.get('/:compraId/status', function(req, res, next) {
  res.send('Rodando Status...');
});

module.exports = router;
2 Likes

Vou só deixar a minha contribuição aqui, pois na documentação da Cielo, tem vários campos opcionais e eu deixei somente os necessários. Porém tem o campo “capture” que lá indica como “true” e dentro do objeto “Payment”, porém para a requisição ser bem sucedida, este campo deve ser false e ficar dentro do body.

Segue meu body simplificado: (Cartão gerado por um site aleatório que gera numeração de cartão)

{
            "MerchantOrderId": "2014111701",
            "Customer": {
                "Name": "TesteCompleto"
            },
            "Capture": false,
            "Payment": {
                "Installments": 1,
                "CreditCard": {
                    "CardNumber": "4556009712450999",
                    "Holder": "Teste Holder",
                    "ExpirationDate": "05/2023",
                    "SecurityCode": "767",
                    "Brand": "Visa",
                },
                "Type": "CreditCard",
                "Amount": 15700,
            }
}
3 Likes

Eu estaria totalmente perdida se não tivesse pessoas como você @jeanfraga aqui no Community!

Obrigada pelo auxílio!!

1 Like

Boa noite,
Alguém teve esse erro na aula 7?

o que está me retornando é o seguinte:

[

    {

        "Code": 999,

        "Message": "Error converting value \"9b34ea4f-2dd0-4396-9140-6d629e20a50c\" to type 'Cielo.Api.Contracts.Split.SplitCaptureModel'. Path '', line 1, position 38."

    }

]

Tirei a linha

body: JSON.stringify(paymentId),

Porém agora está me dando erro:

[

    {

        "Code": 308,

        "Message": "Transaction not available to capture"

    }

]

conseguiu resolver ?

Oi @jeanfraga, acabei trocando a requisição, usei a igual ao do professor, aí deu certo, provavelmente alguma das informações da documentação estava errada para mim…

1 Like

Fala pessoal!

Quero deixar aqui meu código funcional pra talvez retribuir a quem precisar (se é que alguém ainda pode estar fazendo esse projeto, se não sou o último rsrsrs…)

Mas antes preciso agradecer ao @jeanfraga por criar o tópico e demonstrar tanta vontade de ajudar a cada um que teve dificuldades, assim como eu.
E também aos demais que as vezes mesmo sem saber, com um simples comentário, ou alguma experiência com o código, ajudou alguém a resolver aquele bug que parecia sem solução.
Enfim, meu agradecimento também a @giovanna-mrosa, @cristiane.dsc, @Davidson.Xavier, @DeyvisonEstevan, ao @fernando.vargas, @HamiltonLopes e a @BrunaKroth.

Vocês são feras! :raised_hands:t2: :clap:t2:

Segue os códigos:

cielo.js

compras.js

users.js

Objeto de requisição com toda as soluções aqui recomendadas:

{  
   "MerchantOrderId":"2014111701",
   "Customer":{  
      "Name":"Comprador crédito completo",
      "Email":"compradorteste@teste.com",
      "Birthdate":"1991-01-02",
      "Address":{  
         "Street":"Rua Teste",
         "Number":"123",
         "Complement":"AP 123",
         "ZipCode":"12345987",
         "City":"Rio de Janeiro",
         "State":"RJ",
         "Country":"BRA"
      },
        "DeliveryAddress": {
            "Street": "Rua Teste",
            "Number": "123",
            "Complement": "AP 123",
            "ZipCode": "12345987",
            "City": "Rio de Janeiro",
            "State": "RJ",
            "Country": "BRA"
        },
        "Billing": {
            "Street": "Rua Neturno",
            "Number": "12345",
            "Complement": "Sala 123",
            "Neighborhood": "Centro",
            "City": "Rio de Janeiro",
            "State": "RJ",
            "Country": "BR",
            "ZipCode": "20080123"
  }
   },
   "Payment":{  
     "Currency":"BRL",
     "Country":"BRA",
     "ServiceTaxAmount":0,
     "Installments":1,
     "Interest":"ByMerchant",
     "Capture":false,
     "Authenticate":"false",
     "Payment.Recurrent":"false",
     "SoftDescriptor":"123456789ABCD",
      "CreditCard":{  
         "CardNumber":"1234123412341231",
         "Holder":"Teste Holder",
         "ExpirationDate":"12/2030",
         "SecurityCode":"123",
         "SaveCard":"false",
         "Brand":"Visa",
         "CardOnFile":{
            "Usage": "Used",
            "Reason":"Unscheduled"
         }
     },
     "IsCryptoCurrencyNegotiation": true,
     "Type":"CreditCard",
     "Amount":15700,
     "AirlineData":{
         "TicketNumber":"AR988983"
     }
   }
}

Requests:

5 Likes

Obrigado Marcos :wink:

1 Like