API-3.0-PHP icon indicating copy to clipboard operation
API-3.0-PHP copied to clipboard

Retornar PaymentID na recorrência

Open sdanieljose opened this issue 6 years ago • 2 comments

Olá, como vão, gostaria de saber se alguém consegue me dar uma força, sou novo na implementação Cielo e quando preciso trabalhar na recorrência não estou conseguindo ter acesso ao PaymentID, postei o código completo para que fique mais fácil (acredito eu) para análise. Desde já agradeço.

<?php
require '../../../../vendor/autoload.php';
use Cielo\API30\Merchant;
use Cielo\API30\Ecommerce\Environment;
use Cielo\API30\Ecommerce\Sale;
use Cielo\API30\Ecommerce\CieloEcommerce;
use Cielo\API30\Ecommerce\Payment;
use Cielo\API30\Ecommerce\Request\CieloRequestException;
use Cielo\API30\Ecommerce\RecurrentPayment;
// ...
// Configure o ambiente
$environment = $environment = Environment::sandbox();
// Configure seu merchant
$merchant = new Merchant('31273469-7cf1-4507-90ba-7fa760bfe725', 'LISLYOBKEATAIPHMKZVTPNOTTLPHICHXGVTRPPKW'); //sandbox
// Crie uma instância de Sale informando o ID do pagamento
$sale = new Sale('912');
// Crie uma instância de Customer informando o nome do cliente
$customer = $sale->customer('Fulano de Tal');
// Configure a recorrência
$recurrent = new RecurrentPayment(true);
$recurrent = $recurrent->setInterval(RecurrentPayment::INTERVAL_MONTHLY)
                        ->setAuthorizeNow(true);
// Crie uma instância de Payment informando o valor do pagamento
$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->setRecurrentPayment($recurrent)
        ->setType(Payment::PAYMENTTYPE_CREDITCARD)
        ->creditCard("123", "Visa")
        ->setExpirationDate("12/2026")
        ->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))->createSale($sale);
    // Com a venda criada na Cielo, já temos o ID do pagamento, TID e demais
    // dados retornados pela Cielo
    $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))->captureSale($paymentId, 15700, 0);

    print_r($paymentId);
    echo $paymentId;
    echo json_encode($paymentId);
    print_r(json_encode($paymentId));    

    print_r($sale);
    echo $sale;
    echo json_encode($sale);
    print_r(json_encode($sale));
    // E também podemos fazer seu cancelamento, se for o caso
    // $sale = (new CieloEcommerce($merchant, $environment))->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.
    $error = $e->getCieloError();
    print_r($error);
}
?>

sdanieljose avatar Jan 04 '19 20:01 sdanieljose

Oi, eu fiz uma forma diferente e funciona. voce pode armazenar um token para o cartao do cliente no seu banco de dados e entao criar a recorrencia da forma que voce precisar. Voce vai precisar guardar o token que pode ser acessado dessa forma --> $cardToken = $sale->getPayment()->getCreditCard()->getCardToken(); E entao criar uma rotina para debitar do cartao no momento que precisar, no meu caso especifico eu precisava que a recorrencia fosse em um dia especifico todo mes, e a cielo nao trata recorrencia dessa forma, ela apenas adiciona o tempo de recorrencia em cima da data da captura.

devasia2112 avatar Mar 16 '19 05:03 devasia2112

Olá!

Sei que o problema foi postado há 6 meses, mas caso alguem se depare com o mesmo problema:

Executei o mesmo código que o seu aqui na minha máquina, mas mudei o número do cartão para um cartão válido (5371542802050634, gerado randomicamente num site que gera cartões validos para testes) (tirei tb a linha "echo $sale;" pois acusava um erro de converter a $sale pra string). Caso não conheça, use o comando dd($sale) para visualizar os dados da venda de um jeito mais apresentável.

O que está acontecendo é q o cartão é invalido (msm terminando com 1). Estava com o mesmo problema bem no começo, e me deparei com a solução aqui

Espero ter ajudado a você ou alguem com o mesmo erro.

(edit 1: alterei uma frase para ficar mais clara)

ArthurYdalgo avatar Jul 28 '20 11:07 ArthurYdalgo