Carrinho De Compras – Pagamentos

Nas matérias anteriores iniciamos um assunto em carrinho de compras e hoje temos muitos pedidos solicitando para falarmos sobre tais assuntos.

Após focarmos no pagamento através do Paypal, estudamos um assunto fundamental que é o “cartões de crédito”.

Como encontramos muitas empresas ganhando dinheiro com este tipo de script, não vamos fornecê-lo por completo (como fazemos com vários sistemas), mas vamos focar este assunto detalhadamente em várias matérias, para que Programadores iniciantes e experientes possam elaborar este tipo de sistema.

Abaixo vamos descrever uma rotina para checar os números do cartão de crédito e em anexo você poderá pegar o script para analisar.

Pagamento Online Cartão de Cŕedito

Rotina Para Checar Os Números Do Cartão De Crédito

Quem desenvolve sistemas para receber pagamentos através de cartões de créditos, precisa elaborar várias rotinas para concluir o recebimento dos valores com êxito.

Alguns dos procedimentos são:

  • O Internauta preenche o formulário (com validações para ele não esquecer nenhum campo)
  • Verificar se o número foi repassado corretamente pelo formulário
  • Verificar se a quantidade de caracteres são adequadas para um cartão de crédito
  • Verifica se os números estão corretos
  • Dá andamento a procedimento de cobrança.

Até para facilitar, vamos definir passo a passo como funciona esta parte do código!

O trecho abaixo valida por array cada tipo de cartão de crédito e informa se ele é um tipo de cartão válido.


function checkCreditCard ($cardnumber, $cardname, &$errornumber, &$errortext) {

  $cards = array (  array ('name' => 'American Express',
                          'length' => '15',
                          'prefixes' => '34,37',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Diners Club Carte Blanche',
                          'length' => '14',
                          'prefixes' => '300,301,302,303,304,305',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Diners Club',
                          'length' => '14,16',
                          'prefixes' => '305,36,38,54,55',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Discover',
                          'length' => '16',
                          'prefixes' => '6011,622,64,65',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Diners Club Enroute',
                          'length' => '15',
                          'prefixes' => '2014,2149',
                          'checkdigit' => true
                         ),
                   array ('name' => 'JCB',
                          'length' => '16',
                          'prefixes' => '35',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Maestro',
                          'length' => '12,13,14,15,16,18,19',
                          'prefixes' => '5018,5020,5038,6304,6759,6761',
                          'checkdigit' => true
                         ),
                   array ('name' => 'MasterCard',
                          'length' => '16',
                          'prefixes' => '51,52,53,54,55',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Solo',
                          'length' => '16,18,19',
                          'prefixes' => '6334,6767',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Switch',
                          'length' => '16,18,19',
                          'prefixes' => '4903,4905,4911,4936,564182,633110,6333,6759',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Visa',
                          'length' => '13,16',
                          'prefixes' => '4',
                          'checkdigit' => true
                         ),
                   array ('name' => 'Visa Electron',
                          'length' => '16',
                          'prefixes' => '417500,4917,4913,4508,4844',
                          'checkdigit' => true
                         ),
                   array ('name' => 'LaserCard',
                          'length' => '16,17,18,19',
                          'prefixes' => '6304,6706,6771,6709',
                          'checkdigit' => true
                         )
                );

O trecho abaixo definirá se o cartão digitado é inválido, desconhecido, etc.


  $ccErrorNo = 0;

  $ccErrors [0] = "Unknown card type";
  $ccErrors [1] = "No card number provided";
  $ccErrors [2] = "Credit card number has invalid format";
  $ccErrors [3] = "Credit card number is invalid";
  $ccErrors [4] = "Credit card number is wrong length";

Sabendo que tipo de cartão estamos trabalhando, vamos dar andamento no script!

O trecho abaixo verificará se o tipo de cartão é válido.



  $cardType = -1;
  for ($i=0; $i<sizeof($cards); $i++) {

    if (strtolower($cardname) == strtolower($cards[$i]['name'])) {
      $cardType = $i;
      break;
    }
  }

Se o tipo de cartão não funcionar, reporta um erro.


  if ($cardType == -1) {
     $errornumber = 0;    
     $errortext = $ccErrors [$errornumber];
     return false;
  }
  
  if (strlen($cardnumber) == 0)  {
     $errornumber = 1;    
     $errortext = $ccErrors [$errornumber];
     return false;
  }

O trecho abaixo deverá retirar espaços em branco do cartão de crédito.

  
$cardNo = str_replace (' ', '', $cardnumber);  

O trecho abaixo verifica se o conteúdo digitado é numérico e se está correto.


  if (!eregi('^[0-9]{13,19}$',$cardNo))  {
     $errornumber = 2;    
     $errortext = $ccErrors [$errornumber];
     return false;
  }

O trecho abaixo verifica os módulos digitados (se for solicitado).



  if ($cards[$cardType]['checkdigit']) {
    $checksum = 0;                                  
    $mychar = "";                                  
    $j = 1;                                        
  
    for ($i = strlen($cardNo) - 1; $i >= 0; $i--) {
    
      $calc = $cardNo{$i} * $j;
    
      if ($calc > 9) {
        $checksum = $checksum + 1;
        $calc = $calc - 10;
      }
    
      $checksum = $checksum + $calc;
    
      if ($j ==1) {$j = 2;} else {$j = 1;};
    }
  
    if ($checksum % 10 != 0) {
     $errornumber = 3;    
     $errortext = $ccErrors [$errornumber];
     return false;
    }
  }  

O trecho abaixo lê o array e verifica se os prefixos são válidos para este cartão.


  $prefix = split(',',$cards[$cardType]['prefixes']);
      
  $PrefixValid = false;
  for ($i=0; $i<sizeof($prefix); $i++) {
    $exp = '^' . $prefix[$i];
    if (ereg($exp,$cardNo)) {
      $PrefixValid = true;
      break;
    }
  }

O trecho abaixo valida o prefixo e aponta para o local correto.


  
  if (!$PrefixValid) {Cartão de Crédito,
     $errornumber = 3;    
     $errortext = $ccErrors [$errornumber];
     return false;
  }

O trecho abaixo verifica se o que foi digitado é válido para cartão.


  $LengthValid = false;
  $lengths = split(',',$cards[$cardType]['length']);Cartão de Crédito,
  for ($j=0; $j<sizeof($lengths); $j++) {
    if (strlen($cardNo) == $lengths[$j]) {
      $LengthValid = true;
      break;
    }
  }

O trecho abaixo verifica se tudo está ok e se o que foi digitado é válido.


  if (!$LengthValid) {
     $errornumber = 4;    
     $errortext = $ccErrors [$errornumber];
     return false;
  };  

O trecho abaixo informa que o cartão de crédito é válido.

 
  return true;

Espero que esta matéria lhe ajude em algo ao elaborar seu Projeto.

Não deixe de acompanhar nossas próximas matérias, pois estaremos pouco a pouco falando sobre transações através dos cartões de crédito e as demais formas de pagamento.

Download do código utilizado neste tutorial: Carrinho De Compras – Pagamentos

Be Sociable, Share!

1 Comentários

  1. SÉRGIO LEANDRO

    ola gostei do site, tenho uma duvida estou fazendo um projeto com carrinho de compras mas tenho que colocar estoque para o cliente nao comprar mais que esta na loja.
    como posso fazer isso. abraços!!!

Participa! Comenta...