Skip to content

Instantly share code, notes, and snippets.

@jefferson-julio
Created April 8, 2020 20:38
Show Gist options
  • Save jefferson-julio/3c776fe9b30a513aaef3692048911e90 to your computer and use it in GitHub Desktop.
Save jefferson-julio/3c776fe9b30a513aaef3692048911e90 to your computer and use it in GitHub Desktop.
mercadopago-problemas2

Mecadopago API

Erro no pagamento - security_code_id

Fiz a adição do type "customer" à requisição do payment, estou usando a biblioteca dx-php 1.2.1 (mas também testei no postman)

<?php 
$url = "https://api.mercadopago.com/v1/card_tokens?public_key=$this->publicToken"; 
$data = [ "card_id" => $card->id ]; 
$client = new Client(); // HTTP Client 
$result = $client->request("POST", $url, [ 'json' => $data ])->getBody();
$cardToken = json_decode($result->getContents(), true); 
$paymentMethodId = $card->payment_method->id; 
$this->logger->debug([ $card->id, $cardToken['id'] ]); 
$this->logger->debug("\n"); 
$payment = new MercadoPago\Payment(); 
$payment->transaction_amount = 121; 
$payment->token = $cardToken['id']; 
$payment->statement_descriptor = "Assinatura"; 
$payment->description = "Assinatura do serviço tal"; 
$payment->installments = 1; 
$payment->payment_method_id = $paymentMethodId; 
$payment->payer = [ 'id' => $customer->id, 'type' => 'customer' ];
$payment->notification_url = $this->notificationUrl; 
$payment->capture = true; 
$payment->binary_mode = true; 
$payment->save(); 

no entanto ocorre o erro:

{ "message": "security_code_id cant be null", 
    "error": "bad_request", 
    "status": 400, 
    "cause": [ 
   	 { 
   		 "code": 3031, 
   		 "description": "security_code_id cant be null", 
   		 "data": null 
   	 }
    ]
}

Tanto no php quanto no postman.

Não achei nada na documentação quanto a isso. Esse erro só ocorre quando eu uso o card token gerado na rota card_tokens, ele não ocorre usando um card token gerado pelo formulário do browser.

Collection no postman

@lfeitosa
Copy link

lfeitosa commented Apr 13, 2020

Bom dia, voce precisa adicionar o security_code ao gerar o segundo cardtoken, exemplo:

function gerarCardTokenCustomer($idCard){
       try {
   $card_token = new MercadoPago\CardToken();
   $card_token->card_id= $idCard;
   $card_token->security_code= “123”;
   $card_token->public_key = $GLOBALS[‘public_key’];
   if($card_token->save()){
      return $card_token->id;
   }
       } catch (\Throwable $th) {
         $this->assertEquals($th->getMessage(), “Nao gerou cardToken”);
         return null;
      }
       }

Veja essa documentação: https://www.mercadopago.com.br/developers/pt/guides/payments/api/advanced-integration

@jefferson-julio
Copy link
Author

Bom dia, voce precisa adicionar o security_code ao gerar o segundo cardtoken, exemplo:

function gerarCardTokenCustomer($idCard){
       try {
   $card_token = new MercadoPago\CardToken();
   $card_token->card_id= $idCard;
   $card_token->security_code= “123”;
   $card_token->public_key = $GLOBALS[‘public_key’];
   if($card_token->save()){
      return $card_token->id;
   }
       } catch (\Throwable $th) {
         $this->assertEquals($th->getMessage(), “Nao gerou cardToken”);
         return null;
      }
       }

Veja essa documentação: https://www.mercadopago.com.br/developers/pt/guides/payments/api/advanced-integration

Obrigado pela resposta, eu preciso reter o código de segurança do cartão no meu banco de dados para futuras requisições a novos tokens?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment