Como exibir o formulário (SmartForm)
Requisitos Iniciais
Configurar WebhooksSerá obrigatório configurar um webhook para receber o resultado do pagamento. Verifique nessa documentação a seção WEBHOOKS.
Configurar um servidorPor normas de segurança, a chamada para criação do smartform deve ser feita a partir do seu servidor, e não de uma maquina local ou frontend, pois exige a chave de API secreta (public_key).
Agora basta seguir o passo a passo!
Passo a Passo
Abaixo um resumo do fluxo para exibição do SmartForm.
- Iniciar uma venda do tipo (
type) PAYMENT, e o meio de pagamento (payments.payment_method) como smartform.
Caso tenha dúvidas sobre os tipos de vendas, verifique a seção na documentação MODELOS DE COBRANÇA. - Armazenar os campos retornados no objeto
smart_form, pois serão obrigatórios para exibir o formulário:public_keyetoken. - Exibir o formulário conforme exemplo nessa documentação, preenchendo os campos
kr-public-keyekr-form-tokencom os valores dos campos retornados anteriormente no objetosmart_form.- Ao renderizar o formulário, será criada uma venda com status DUE (pendente).
- Enviamos o primeiro webhook sinalizando a criação da venda.
- Após realizada a tentativa de pagamento, iremos enviar o resultado da tentativa através dos webhooks configurados.
Validade do TokenO token retornado em
smart_form.tokenpossui a validade máxima de 15 minutos.
Envio de WebhooksAo renderizar o formulário, enviamos o primeiro webhook de venda com status pendente.
Após a tentativa de pagamento, retornamos um segundo webhookcom as informações da tentativa, seja de uma transação recusada ou autorizada.
1. Criar Venda
Para iniciar uma venda será necessário realiza realizar a chamada na rota /v1/charges.
Para mais detalhes verifique na seção FORMULÁRIO INTELIGENTE > Iniciar venda.
Exemplo de requisição - Venda Avulsa
{
"amount": 100,
"order_id": "BR0000-63062677",
"order_info": "charge description",
"currency": "BRL",
"type": "PAYMENT",
"payments": [
{
"payment_method": "smartform",
"enable_3ds": false,
"amount": 100
}
],
"customer": {
"name": "Scott Veum",
"email": "[email protected]",
"phone": "551198570711",
"mobile_phone": "5511985270748",
"birth_date": "2000-01-01",
"document_type": "CPF",
"document_number": "62286843023"
}
}Exemplo de requisição - Tokenização de Cartão Avulsa
{
"amount": 0,
"order_id": "BR0000-{{$randomBankAccount}}",
"order_info": "charge description",
"currency": "BRL",
"type": "TOKENIZATION",
"payments": [
{
"payment_method": "smartform",
"create_token": true,
"amount": 0,
"installments": 1
}
],
"customer": {
"name": "David Champlin",
"email": "[email protected]",
"phone": "551198570711",
"mobile_phone": "5511985270748",
"birth_date": "2000-01-01",
"document_type": "CPF",
"document_number": "62286843023"
}
}Exemplo de resposta
{
"uuid": "a49bf43e-d937-4dcd-b569-f46d2e635c84",
"type": "PAYMENT",
"due_date": "2024-10-28T14:39:33",
"expiry_date": "2024-10-30T14:39:33",
"status": "DUE",
"order_id": "BR0000-63062677",
"order_info": "charge description",
"currency": "BRL",
"original_amount": 100,
"amount": 100,
"paid": 0,
"due": 100,
"refunded": 0,
"attempts": 1,
"max_attempts": 5,
"drop_reason": "",
"surcharge": false,
"client_ip": null,
"soft_descriptor": null,
"smart_form": {
"public_key": "62XXXX:publickey_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXrSK7kHJ",
"token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"customer": {
"uuid": "71b73bc2-eee1-4c88-9035-fe94aea3fc17",
"name": "Scott Veum",
"email": "[email protected]",
"birth_date": "2000-01-01",
"phone": "551198570711",
"mobile_phone": "5511985270748",
"document_type": "CPF",
"document_number": "62286843023",
"created_at": "2024-10-28T14:39:33.479Z",
"updated_at": "2024-10-28T14:39:33.479Z"
},
"transactions": [],
"created_at": "2024-10-28T14:39:33.471Z",
"updated_at": "2024-10-28T14:39:33.471Z"
}2. Exibir o formulário
Criar o formulário em html, carregando os scripts necessários e inserir a public_key e token retornados no objeto smart_form da requisição feita em /v1/charges
<!DOCTYPE html>
<html>
<head>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- Biblioteca javascript. Deve ser inserida no header -->
<script
src="https://static.payzen.eu/static/js/krypton-client/V4.0/stable/kr-payment-form.min.js"
kr-public-key="------------------INSIRA A PUBLIC_KEY AQUI------------------"
kr-post-url-success="paid.html">
</script>
<!-- Temas e plugins. Devem ser carregados após o script. -->
<!-- Não é obrigatório mas ajuda na carregamento do formulário -->
<link rel="stylesheet"
href="https://static.payzen.eu/static/js/krypton-client/V4.0/ext/neon-reset.css">
<script
src="https://static.payzen.eu/static/js/krypton-client/V4.0/ext/neon.min.js">
</script>
</head>
<body>
<!-- SMARTFORM -->
<div class="kr-smart-form"
kr-form-token="---------------INSIRA O TOKEN AQUI ---------------------------">
<!-- campos para inserir o cartão -->
<div class="kr-pan"></div>
<div class="kr-expiry"></div>
<div class="kr-security-code"></div>
<!-- botão para finalizar -->
<button class="kr-payment-button"></button>
<!-- seção de erro -->
<div class="kr-form-error"></div>
</div>
</body>
</html>Exemplo JSFiddle
Webhook da venda
Após realizada a tentativa de pagamento, será retornado o webhook com a situação do pagamento.
{
"uuid": "8aef5c56-a168-48ed-8634-1cb8172e2ebd",
"type": "PAYMENT",
"due_date": "2024-10-24T20:02:55Z",
"expiry_date": "2024-10-26T20:02:55Z",
"status": "PAID",
"order_id": "BR0000-68563008",
"order_info": "charge description",
"currency": "BRL",
"original_amount": 100,
"amount": 100,
"paid": 100,
"due": 0,
"refunded": 0,
"attempts": 2,
"max_attempts": 5,
"drop_reason": "",
"surcharge": false,
"client_ip": null,
"soft_descriptor": null,
"customer": {
"uuid": "4222e88b-fd4d-4a6b-8a68-7af08bfbc08e",
"name": "Sara Gibson III",
"email": "[email protected]",
"birth_date": "2000-01-01",
"phone": "551198570711",
"mobile_phone": "5511985270748",
"document_type": "CPF",
"document_number": "62286843023",
"created_at": "2024-10-24T20:02:55Z",
"updated_at": "2024-10-24T20:02:55Z"
},
"transactions": [
{
"uuid": "333f52c0-8953-4b99-9ae6-87d827bedc82",
"charge_uuid": "8aef5c56-a168-48ed-8634-1cb8172e2ebd",
"gateway_id": "50606df221754430a49fe42b33122cbf",
"amount": 100,
"paid_amount": 100,
"status": "PAID",
"payment_option": "CARD",
"scheme": "MAESTRO",
"external_id": "10492410241702572412",
"transaction_id_reference": null,
"expected_capture_date": "2024-10-24T20:04:53Z",
"payment_at": "2024-10-24T20:04:53Z",
"captured_at": null,
"auth_num": "892881",
"auth_response_code": "0",
"operation_type": "DEBIT",
"extra": null,
"payment_number": "550209XXXXXX3646",
"payer_info": "",
"expiry_month": 8,
"expiry_year": 2028,
"acquirer_network": "REDE",
"nsu": "254956625",
"tid": "",
"token": null,
"create_token": false,
"detailed_status": "CAPTURED",
"currency": "BRL",
"document_type": null,
"document_number": null,
"installments": 1,
"auth_3ds": null,
"created_at": "2024-10-24T20:05:50.763Z",
"updated_at": "2024-10-24T20:05:50.763Z"
}
],
"created_at": "2024-10-24T20:02:55Z",
"updated_at": "2024-10-24T20:02:55Z"
}