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

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)

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.

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 documentação é limitadíssima. Motivo pelo qual recurri aos foruns

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.

Estou seguindo o manual escrito no github:


O que deveria funcionar.

// …
// 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();
}

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.

De que forma posso corrigir isso ?

De que forma posso corrigir isso ??

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.

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);

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)

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

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.