Erro ao realizar uma integração com o api da cielo 3.0

14 respostas
java
A

Estou realizando uma integração com api da cielo porém recebendo uma mensagem de erro:

Exception in thread “main” java.lang.Error: Unresolved compilation problems:
Type mismatch: cannot convert from SaleResponse to Sale
Type mismatch: cannot convert from SaleResponse to Sale

at cieloecommerce.sdk.ecommerce.Teste1.main(Teste1.java:49)

14 Respostas

D

Cara, o erro está bem claro, você está tentando obter o valor de algo em um objeto que não é daquela classe/interface e nem estende ou implementa ela.
Precisa rever a documentação e identificar como obter esse valor.

M

Talvez o retorno do método cancelSale não seja do mesmo tipo da variavel sale que é da classe “Sale”, tente criar uma variável compatível com o retorno do método cancelSale!

A

A documentação é limitadíssima. Motivo pelo qual recurri aos foruns

D

Este é um problema recorrente de biblioteca de terceiros.
Porém, você precisa ver que os tipos são, realmente, incompatíveis, seria o mesmo que tentar atribuir um valor de List a uma variável String.

A

Estou seguindo o manual escrito no github:


O que deveria funcionar.

A

// …
// Configure seu merchant
Merchant merchant = new Merchant(“MERCHANT ID”, “MERCHANT KEY”);

// Crie uma instância de Sale informando o ID do pagamento
Sale sale = new Sale(“ID do pagamento”);

// Crie uma instância de Customer informando o nome do cliente
Customer customer = sale.customer(“Comprador Teste”);

// Crie uma instância de Payment informando o valor do pagamento
Payment payment = sale.payment(15700);

// Crie  uma instância de Credit Card utilizando os dados de teste

// esses dados estão disponíveis no manual de integração

payment.creditCard(123, Visa).setExpirationDate(12/2018)

.setCardNumber(0000000000000001)

.setHolder(Fulano de Tal);
// Crie o pagamento na Cielo

try {

// Configure o SDK com seu merchant e o ambiente apropriado para criar a venda

sale = new CieloEcommerce(merchant, Environment.SANDBOX).createSale(sale);
// Com a venda criada na Cielo, já temos o ID do pagamento, TID e demais
// dados retornados pela Cielo
String paymentId = sale.getPayment().getPaymentId();

// Com o ID do pagamento, podemos fazer sua captura, se ela não tiver sido capturada ainda
sale = new CieloEcommerce(merchant, Environment.SANDBOX).captureSale(paymentId, 15700, 0);

// E também podemos fazer seu cancelamento, se for o caso
sale = new CieloEcommerce(merchant, Environment.SANDBOX).cancelSale(paymentId, 15700);
} catch (CieloRequestException e) {

// Em caso de erros de integração, podemos tratar o erro aqui.

// os códigos de erro estão todos disponíveis no manual de integração.

CieloError error = e.getError();

} catch (IOException e) {

e.printStackTrace();

}
D

Cara, aí o ideal é tentar alguém da equipe de suporte deles.
Eu vi as classes Sale e SaleResponse, uma é bem diferente da outra. Além disso, conferi a classe CieloEcommerce e, definitivamente, tem um erro bem grosseiro nesse exemplo:

public SaleResponse cancelSale(String paymentId, Integer amount) throws IOException, CieloRequestException {
		UpdateSaleRequest updateSaleRequest = new UpdateSaleRequest("void", merchant, environment);

		updateSaleRequest.setHttpClient(httpClient);
		updateSaleRequest.setAmount(amount);

		SaleResponse sale = updateSaleRequest.execute(paymentId);

		return sale;
	}

O que é devolvido é, sim, um SaleResponse.

A

De que forma posso corrigir isso ?

A

De que forma posso corrigir isso ??

D

Olha, você precisaria trocar o Sale por um objeto de SaleResponse.
Realmente, eu não entendi o que o Sale (entendo que se trata do registro de venda) tem com o cancelamento.
Seria algo como

SaleResponse response = new CieloEcommerce(merchant, Environment.SANDBOX).cancelSale(paymentId, 15700);

Por exemplo.

A

Fiz dessa forma:
SaleResponse sale2 = new CieloEcommerce(merchant, Environment.SANDBOX).captureSale(paymentId, 15700, 0);

// E também podemos fazer seu cancelamento, se for o caso
	    //s sale = new CieloEcommerce(merchant, Environment.SANDBOX).cancelSale(paymentId, 15700);
	    SaleResponse sale3 = new CieloEcommerce(merchant, Environment.SANDBOX).cancelSale(paymentId, 15700);
A

Porém estou recebendo uma mensagem de erro:

Cielo: Unknown status: 401Exception in thread “main” java.lang.NullPointerException
at cieloecommerce.sdk.ecommerce.Teste1.main(Teste1.java:46)

D

Alguma coisa está nula aí… Tem que ver o que é.

P

Eu sugiro que você use a API ao invés do SDK. O SDK não possui documentação, apenas um exemplo, que inclusive está errado(O método captureSale da Classe CieloEcommerce retorna um Objeto do Tipo SaleResponse e não Sale como demonstra o exemplo ). Já a documentação da API possui todas as informações necessárias para realizar a integração.

Criado 14 de agosto de 2018
Ultima resposta 24 de ago. de 2018
Respostas 14
Participantes 4