Escolar Documentos
Profissional Documentos
Cultura Documentos
$w.onReady(function () {
controleDeCartaoDeCredito()
setValorDaVenda('700')//Esta função define o valor da venda
});
//public/cartaoDeCredito.js
import { aplicarMascara } from 'public/mascaras'
import { sincronzar, sincronizarDropdown } from 'public/checkout/controle'
import { pagarComCartao } from 'backend/mercadoPago'
import { validarEmail, validarDocumento } from 'backend/validador'
import { bandeiras } from 'public/checkout/bandeiras'
//Ação do botão
$w('#btnPagar').onClick(() => {
$w('#stateBoxBotaoPagar').changeState('loading')
$w('#htmlSdkMercadoPago').postMessage({ 'id': 'submit' })
})
//Iniciando o DocType
$w('#htmlSdkMercadoPago').postMessage({ 'id': 'docType', 'value': 'CPF' })
listarAnos()
aplicarMascara($w('#tbNumeroCartao'), 'cartão')
aplicarMascara($w('#tbNumeroDoDocumento'), 'cpf')
sincronzar($w('#tbNumeroCartao'), 'cardNumber')
sincronzar($w('#tbCvv'), 'securityCode')
sincronizarDropdown($w('#ddMesExpiracao'), 'cardExpirationMonth')
sincronizarDropdown($w('#ddAnoExpiracao'), 'cardExpirationYear')
sincronzar($w('#tbEmail'), 'email')
sincronzar($w('#tbTitular'), 'cardholderName')
sincronizarDropdown($w('#ddTipoDocumento'), 'docType')
sincronzar($w('#tbNumeroDoDocumento'), 'docNumber')
$w('#ddTipoDocumento').onChange(() => {
if ($w('#ddTipoDocumento').value === 'CPF') {
$w('#tbNumeroDoDocumento').maxLength = 13
aplicarMascara($w('#tbNumeroDoDocumento'), 'cpf')
} else {
$w('#tbNumeroDoDocumento').maxLength = 18
aplicarMascara($w('#tbNumeroDoDocumento'), 'cnpj')
}
})
$w('#htmlSdkMercadoPago').onMessage((event) => {
tratamentoDeDados(event.data)
})
function tratamentoDeDados(dado) {
switch (dado.tipo) {
case 'paymentMethod':
paymentMethod = dado.valor
} else {
$w('#imgPngFlag').hide()
}
break;
case 'parcelas':
$w('#ddParcelas').options = dado.valor
$w('#ddParcelas').value = dado.valor[0].value
$w('#ddParcelas').enable()
break;
case 'bancos':
bancoCod = dado.valor
break;
case 'erro':
tratamentoDeErros(dado, 'form')
break;
case 'sucesso':
gerarPagamento(dado.token)
break;
default:
break;
}
mostrarErro(saida)
function mostrarErro(saida) {
$w('#stateBoxBotaoPagar').changeState('botao')
}, 1000)
}
}
function gerarPagamento(token) {
validarEmail($w('#tbEmail').value)
.then((validEmail) => {
console.log('EMAIL', validEmail)
if (validEmail) {
validarDocumento($w('#ddTipoDocumento').value.toLowerCase(), $w('
#tbNumeroDoDocumento').value.replace('.', '').replace('.', '').replace('.', '').repla
ce('-', '').replace('/', ''))
.then((data) => {
if (data) {
$w('#stateBoxPagamentos').changeState('processandoPag
amento')
finalizar()
} else {
$w('#htmlSdkMercadoPago').postMessage({ 'id': 'submit
Erro' })
$w('#txtErro').text = 'O ' + $w('#ddTipoDocumento').v
alue.toLowerCase() + ' é inválido'
mostrarErro()
}
})
} else {
$w('#htmlSdkMercadoPago').postMessage({ 'id': 'submitErro' })
$w('#txtErro').text = 'E-mail inválido'
mostrarErro()
}
})
function finalizar() {
let data = {
token: token,
paymentMethodId: paymentMethod,
issuer_id: bancoCod,
email: $w('#tbEmail').value,
docType: $w('#ddTipoDocumento').value,
parcelas: $w('#ddParcelas').value,
valor: Number(valorDaVenda),
docNumber: $w('#tbNumeroDoDocumento').value.replace('.', '').replace(
'.', '').replace('.', '').replace('-', '').replace('/', '')
}
pagarComCartao(data)
.then((data) => {
console.log('RETORNO', data)
} else {
if (data.valor.body.status === 'approved') {
$w('#stateBoxPagamentos').changeState('sucesso')
} else {
$w('#stateBoxPagamentos').changeState('processamento')
}
}
})
}
function listarAnos() {
//public/mascaras.js
export function mascara(tipo, campoInput) {
switch (tipo) {
case "telefone": {
campoInput.value = campoInput.value.replace(/\D/g, ""); //Remove tudo o que n
ão é dígito
campoInput.value = campoInput.value.replace(/^(\d{2})(\d)/g, "($1) $2"); //Co
loca parênteses em volta dos dois primeiros dígitos
campoInput.value = campoInput.value.replace(/(\d)(\d{4})$/, "$1-
$2"); //Coloca hífen entre o quarto e o quinto dígitos
break;
}
case "cpf": {
campoInput.value = campoInput.value.replace(/\D/g, ""); //Remove tudo o que n
ão é dígito
campoInput.value = campoInput.value.replace(/^(\d{3})(\d)/g, "$1.$2");
campoInput.value = campoInput.value.replace(/(\d)(\d{5})$/, "$1.$2");
campoInput.value = campoInput.value.replace(/(\d)(\d{2})$/, "$1-$2");
break;
}
case "cnpj": {
campoInput.value = campoInput.value.replace(/\D/g, "")
campoInput.value = campoInput.value.replace(/^(\d{2})(\d)/, "$1.$2")
campoInput.value = campoInput.value.replace(/^(\d{2})\.(\d{3})(\d)/, "$1.$2.$
3")
campoInput.value = campoInput.value.replace(/\.(\d{3})(\d)/, ".$1/$2")
campoInput.value = campoInput.value.replace(/(\d{4})(\d)/, "$1-$2")
break;
}
case "cep": {
campoInput.value = campoInput.value.replace(/\D/g, "")
campoInput.value = campoInput.value.replace(/^(\d{5})(\d)/, "$1-$2")
break;
}
case "moeda": {
campoInput.value = campoInput.value.replace(/\D/g, "")
var tmp = campoInput.value + '';
tmp = tmp.replace(/([0-9]{2})$/g, ",$1");
if (tmp.length > 6)
tmp = tmp.replace(/([0-9]{3}),([0-9]{2}$)/g, ".$1,$2");
// campoInput.value = campoInput.value.replace(/(\d)(\d{2})$/,"$1.$2") //Desc
omentar para usar pontos
campoInput.value = 'R$ ' + tmp
break;
}
case "data": {
campoInput.value = campoInput.value.replace(/\D/g, "")
campoInput.value = campoInput.value.replace(/(\d{2})(\d)/, "$1/$2")
campoInput.value = campoInput.value.replace(/(\d{2})(\d)/, "$1/$2")
break;
}
case "placa": {
//campoInput.value = campoInput.value.replace(/\D/g, "")
campoInput.value = campoInput.value.replace(/^(\d{3})(\d)/, "$1-$2")
break;
}
case "cartão": {
let v = campoInput.value
v = v.replace(/\D/g, "");
v = v.replace(/^(\d{4})(\d)/g, "$1 $2");
v = v.replace(/^(\d{4})\s(\d{4})(\d)/g, "$1 $2 $3");
v = v.replace(/^(\d{4})\s(\d{4})\s(\d{4})(\d)/g, "$1 $2 $3 $4");
campoInput.value = v;
}
}
}
let alinhar
mascara(tipo, $input)
$input.onKeyPress(() => {
$w('#boxErro').hide()
if (alinhar) {
clearTimeout(alinhar)
}
alinhar = 'undefined'
})
//public/checkout/controle
//checkout é uma pasta
// Filename: public/Checkout/controle.js
let alinhar
export function sincronzar($input, campoDoForm) {
$input.onKeyPress(() => {
$w('#boxErro').hide()
if (alinhar) {
clearTimeout(alinhar)
}
alinhar = 'undefined'
})
$input.onChange(() => {
$w('#boxErro').hide()
})
//backend/mercadoPago
export async function pagarComCartao(dataVenda) {
mercadopago.configurations.setAccessToken("SUA CREDENCIAL");
var payment_data = {
transaction_amount: dataVenda.valor,
token: dataVenda.token,
description: "produto teste",
installments: Number(dataVenda.parcelas),
payment_method_id: dataVenda.paymentMethodId,
issuer_id: dataVenda.issuer_id,
payer: {
email: dataVenda.email,
identification: {
type: dataVenda.docType,
number: dataVenda.docNumber
}
}
};
})
.catch(async function (error) {
console.log(error)
return await { 'tipo': 'erro', 'valor': await error }
});
//backend/validador
//Instalar o pacote NPM 'cpf-cnpj-
//validator'
import { cpf } from 'cpf-cnpj-validator';
import { cnpj } from 'cpf-cnpj-validator';
}
//public/bandeiras.js
export let bandeiras = {
"diners": {
"image": "https://static.wixstatic.com/media/3a8958_a03eed01e3ee455795a26fc56
cda40e4~mv2.gif"
},
"elo": {
"image": "https://static.wixstatic.com/media/3a8958_4a729431d4a94525bfe9b6a0d
b5f5bff~mv2.gif"
},
"hiper": {
"image": "https://static.wixstatic.com/media/3a8958_a12bb5929a21489088de1ef42
b61c34f~mv2.gif"
},
"hipercard": {
"image": "https://static.wixstatic.com/media/3a8958_a12bb5929a21489088de1ef42
b61c34f~mv2.gif"
},
"master": {
"image": "https://static.wixstatic.com/media/3a8958_5434ebffae0547b99bfe6d73c
88f6fbe~mv2.gif"
},
"visa": {
"image": "https://static.wixstatic.com/media/3a8958_4b3630817760468ba1a592c59
f4aaf8f~mv2.gif"
},
"amex": {
"image": "https://static.wixstatic.com/media/3a8958_3e5cd8f3cdd240f79f2c11086
d76010c~mv2.gif"
},
}
<head>
</head>
<img src="https://yt3.googleusercontent.com/cmFrex7B0vUrC-Tu_dD1EyFDpamtb-
SmV45S9lbisLjCZtYMVi79E-hpb9O3x5-c1u-UZgTS=s900-c-k-c0x00ffffff-no-rj"
width="100%" height="auto" />
</script>
<!--DOCUMENTOS-->
<input id="email" name="email" type="hidden" />
<select id="docType" name="docType" data-checkout="docType" style="display:
none;">
<option value="CPF">cpf</option>
<option value="CNPJ">cpf</option>
</select>
<input id="docNumber" name="docNumber" data-checkout="docNumber"
type="hidden" />
<!--DATA DE EXPIRAÇÃO-->
<input type="hidden" placeholder="MM" id="cardExpirationMonth" data-
checkout="cardExpirationMonth">
<input type="hidden" placeholder="YY" id="cardExpirationYear" data-
checkout="cardExpirationYear">
<!--NÚMERO DO CARTÃO-->
<input type="hidden" id="cardNumber" data-checkout="cardNumber">
<!--CVV DO CARTÃO-->
<input id="securityCode" data-checkout="securityCode" type="hidden">
<!--BANCO-->
<select id="issuer" name="issuer" data-checkout="issuer" style="display:
none;"></select>
<!--PARCELAS-->
<select style="display: none;" id="installments"
name="installments"></select>
<!--DADOS EXTRAS-->
<input type="hidden" name="transactionAmount" id="transactionAmount" />
<input type="hidden" name="paymentMethodId" id="paymentMethodId" />
<input type="hidden" name="description" id="description" />
<br>
<button type="submit" id="finalPagar" style="display: none;">Pagar</button>
<br>
</div>
</div>
</form>
<script type="text/javascript">
window.Mercadopago.getIdentificationTypes();
document.getElementById('cardNumber').addEventListener('keyup',
guessPaymentMethod);
document.getElementById('paymentMethodId').value = paymentMethod.id;
getIssuers(paymentMethod.id);
} else {
window.parent.postMessage({ 'tipo': 'erro', 'codigo': '001',
'mensagem': 'Número do cartão inválido' }, '*')
}
}
function getIssuers(paymentMethodId) {
window.Mercadopago.getIssuers(
paymentMethodId,
setIssuers
);
}
response.forEach((issuer, i) => {
let opt = document.createElement('option');
opt.text = issuer.name;
opt.value = issuer.id;
issuerSelect.appendChild(opt);
if (i === response.length - 1) {
window.parent.postMessage({ 'tipo': 'bancos', 'valor':
issuer.id }, '*')
}
});
getInstallments(
document.getElementById('paymentMethodId').value,
document.getElementById('transactionAmount').value,
issuerSelect.value
);
} else {
alert(`issuers method info error: ${response}`);
}
}
let optOutput = []
response[0].payer_costs.forEach((payerCost, i) => {
let opt = document.createElement('option');
opt.text = payerCost.recommended_message;
opt.value = payerCost.installments;
document.getElementById('installments').appendChild(opt);
if (i === response[0].payer_costs.length - 1) {
window.parent.postMessage({ 'tipo': 'parcelas', 'valor':
optOutput }, '*')
}
});
} else {
alert(`installments method info error: ${response}`);
}
}
doSubmit = false;
document.getElementById('paymentForm').addEventListener('submit',
getCardToken);
function getCardToken(event) {
event.preventDefault();
if (!doSubmit) {
let $form = document.getElementById('paymentForm');
window.Mercadopago.createToken($form, setCardTokenAndPay);
return false;
}
};
</body>
</html>