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.
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
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
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
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
One Response
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!!!