Skip to content

Commit c5a2d07

Browse files
committed
Rebase tokenizacao de bandeira sobre master
1 parent e214c52 commit c5a2d07

8 files changed

Lines changed: 1101 additions & 160 deletions

File tree

Readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,9 @@ $response = $getnet->customRequest('GET', '/v1/customers?page=1&limit=5');
336336
print_r($response['customers']);
337337
```
338338

339+
#### TOCKENIZAÇÃO DE BANDEIRA
340+
[Documentação sobre Tokenização](docs/tockenizacao.md)
341+
339342
### Possíveis status de resposta de uma transação
340343
|Status|Descrição|
341344
| ------- | --------- |

docs/tockenizacao.md

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
#### Descrição
2+
Adicionar uma nova funcionalidade ao projeto para implementar as rotinas de geração de token e criptograma de cartão, com foco no suporte completo ao protocolo de tokenização de bandeira Visa. Essa funcionalidade é essencial para aumentar a segurança nas transações de e-commerce, substituindo o número do cartão por um token exclusivo de bandeira combinado com um criptograma.
3+
4+
Importante: Identificamos que os testes para a tokenização da bandeira Visa ainda não estão presentes no projeto. A Visa tem incentivado a adoção dos tokens por estabelecimentos e passou a aplicar uma multa sobre o valor das transações realizadas sem token. Assim, a implementação dessa funcionalidade é prioritária para garantir conformidade com os padrões da bandeira e evitar custos adicionais para os clientes.
5+
6+
---
7+
8+
### **1. Geração do Token do Cartão**
9+
#### Descrição
10+
A rotina deve enviar os dados do cartão e do comprador para o endpoint `/v1/tokenization/token`, que retornará um token exclusivo associado ao cartão.
11+
12+
#### Detalhes do Endpoint
13+
**URL:** `/v1/tokenization/token`
14+
**Método:** `POST`
15+
16+
**Request Body:**
17+
```json
18+
{
19+
"customer_id": "customer_45678900, 123.456.789-00 ou 12345678900",
20+
"card_pan": "4622943120000493",
21+
"card_pan_source": "ON_FILE, MANUALLY_ENTERED ou VIA_APPLICATION",
22+
"card_brand": "VISA, MASTERCARD",
23+
"expiration_year": "2023",
24+
"expiration_month": "07",
25+
"security_code": 1234,
26+
"email": "tokenizacao_bandeira@getnet.com.br"
27+
}
28+
```
29+
30+
---
31+
32+
### **2. Geração do Criptograma do Cartão**
33+
#### Descrição
34+
A rotina deve enviar o token gerado previamente (`network_token_id`) e os dados adicionais da transação para o endpoint responsável por gerar o criptograma.
35+
36+
#### Detalhes do Endpoint
37+
**URL:** `/v1/cryptogram/generate`
38+
**Método:** `POST`
39+
40+
**Request Body:**
41+
```json
42+
{
43+
"network_token_id": "1b110aaa71934ae492bff48baab9af81",
44+
"transaction_type": "CIT ou MIT",
45+
"cryptogram_type": "VISA_TAVV ou MC_DSRP_LONG",
46+
"amount": 1000,
47+
"customer_id": "customer_45678900",
48+
"email": "tokenizacao_bandeira@getnet.com.br",
49+
"card_brand": "VISA ou MASTERCARD"
50+
}
51+
```
52+
53+
#### Exemplo de transação
54+
```php
55+
<?php
56+
57+
use Getnet\API\Getnet;
58+
use Getnet\API\Tokenization;
59+
use Getnet\API\Transaction;
60+
use Getnet\API\Environment;
61+
use Getnet\API\Token;
62+
use Getnet\API\BrandToken;
63+
use Getnet\API\BrandCryptToken;
64+
use Getnet\API\Credit;
65+
use Getnet\API\Customer;
66+
use Getnet\API\Card;
67+
use Getnet\API\Order;
68+
69+
include 'vendor/autoload.php';
70+
71+
$client_id = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxx";
72+
$client_secret = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxx";
73+
$seller_id = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxx";
74+
$environment = Environment::sandbox();
75+
76+
//Opicional, passar chave se você quiser guardar o token do auth na sessão para não precisar buscar a cada trasação, só quando expira
77+
$keySession = null;
78+
79+
//Autenticação da API
80+
$getnet = new Getnet($client_id, $client_secret, $environment, $keySession);
81+
82+
$brandToken = new BrandToken(
83+
"customer_210818263",
84+
"customer@email.com.br",
85+
"VISA",
86+
"MANUALLY_ENTERED",
87+
"4622943123039761",
88+
"722",
89+
"12",
90+
"2025",
91+
$getnet
92+
);
93+
94+
$transaction = new Transaction();
95+
$transaction->setSellerId($getnet->getSellerId());
96+
$transaction->setCurrency("BRL");
97+
$transaction->setAmount(103.03);
98+
99+
//Adicionar dados do Pedido
100+
$transaction->order("123456")
101+
->setProductType(Order::PRODUCT_TYPE_SERVICE)
102+
->setSalesTax(0);
103+
104+
//Criar token Cartão
105+
$tokenCard = new Token("4622943123039761", "customer_210818263", $getnet);
106+
107+
108+
//Adicionar dados do Pagamento
109+
$transaction->credit()
110+
->setAuthenticated(false)
111+
->setDynamicMcc("1799")
112+
->setSoftDescriptor("LOJA*TESTE*COMPRA-123")
113+
->setDelayed(false)
114+
->setPreAuthorization(false)
115+
->setNumberInstallments(3)
116+
->setSaveCardData(false)
117+
->setTransactionType(Credit::TRANSACTION_TYPE_INSTALL_WITH_INTEREST)
118+
->card($tokenCard)
119+
->setBrand(Card::BRAND_MASTERCARD)
120+
->setExpirationMonth("12")
121+
->setExpirationYear(date('y')+1)
122+
->setCardholderName("Jax Teller")
123+
->setSecurityCode("123");
124+
125+
//Adicionar dados do cliente
126+
$transaction->customer("customer_210818263")
127+
->setDocumentType(Customer::DOCUMENT_TYPE_CPF)
128+
->setEmail("customer@email.com.br")
129+
->setFirstName("Jax")
130+
->setLastName("Teller")
131+
->setName("Jax Teller")
132+
->setPhoneNumber("5551999887766")
133+
->setDocumentNumber("12345678912")
134+
->billingAddress()
135+
->setCity("São Paulo")
136+
->setComplement("Sons of Anarchy")
137+
->setCountry("Brasil")
138+
->setDistrict("Centro")
139+
->setNumber("1000")
140+
->setPostalCode("90230060")
141+
->setState("SP")
142+
->setStreet("Av. Brasil");
143+
144+
//Adicionar dados de entrega
145+
$transaction->shipping()
146+
->setFirstName("Jax")
147+
->setEmail("customer@email.com.br")
148+
->setName("Jax Teller")
149+
->setPhoneNumber("5551999887766")
150+
->setShippingAmount(0)
151+
->address()
152+
->setCity("Porto Alegre")
153+
->setComplement("Sons of Anarchy")
154+
->setCountry("Brasil")
155+
->setDistrict("São Geraldo")
156+
->setNumber("1000")
157+
->setPostalCode("90230060")
158+
->setState("RS")
159+
->setStreet("Av. Brasil");
160+
161+
$brandCryptToken = new BrandCryptToken(
162+
$brandToken->getNetworkTokenId(),
163+
BrandCryptToken::TYPE_MERCHANT,
164+
BrandCryptToken::TYPE_VISA,
165+
103.03,
166+
"customer_210818263",
167+
"customer@email.com.br",
168+
"VISA",
169+
$getnet
170+
);
171+
172+
$transaction->tokenization()
173+
->setType(Tokenization::TYPE_MASTER)
174+
->setCryptogram($brandCryptToken->getCryptogram())
175+
->setRequestorId($brandToken->getRequestId());
176+
177+
//Ou pode adicionar entrega com os mesmos dados do customer
178+
//$transaction->addShippingByCustomer($transaction->getCustomer())->setShippingAmount(0);
179+
180+
//Adiciona o dispositivo
181+
$transaction->device("device_id")->setIpAddress("127.0.0.1");
182+
183+
$response = $getnet->authorize($transaction);
184+
185+
print_r($response->getStatus()."\n");
186+
```
187+
188+
---
189+
190+
### **Referências**
191+
- Documentação da API: [[link para a documentação](https://developers.getnet.com.br/idempotency#tag/Tokenizacao-Bandeira)]

docs/tokenizacao.md

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
#### Descrição
2+
Adicionar uma nova funcionalidade ao projeto para implementar as rotinas de geração de token e criptograma de cartão, com foco no suporte completo ao protocolo de tokenização de bandeira Visa. Essa funcionalidade é essencial para aumentar a segurança nas transações de e-commerce, substituindo o número do cartão por um token exclusivo de bandeira combinado com um criptograma.
3+
4+
Importante: Identificamos que os testes para a tokenização da bandeira Visa ainda não estão presentes no projeto. A Visa tem incentivado a adoção dos tokens por estabelecimentos e passou a aplicar uma multa sobre o valor das transações realizadas sem token. Assim, a implementação dessa funcionalidade é prioritária para garantir conformidade com os padrões da bandeira e evitar custos adicionais para os clientes.
5+
6+
---
7+
8+
### **1. Geração do Token do Cartão**
9+
#### Descrição
10+
A rotina deve enviar os dados do cartão e do comprador para o endpoint `/v1/tokenization/token`, que retornará um token exclusivo associado ao cartão.
11+
12+
#### Detalhes do Endpoint
13+
**URL:** `/v1/tokenization/token`
14+
**Método:** `POST`
15+
16+
**Request Body:**
17+
```json
18+
{
19+
"customer_id": "customer_45678900, 123.456.789-00 ou 12345678900",
20+
"card_pan": "4622943120000493",
21+
"card_pan_source": "ON_FILE, MANUALLY_ENTERED ou VIA_APPLICATION",
22+
"card_brand": "VISA, MASTERCARD",
23+
"expiration_year": "2023",
24+
"expiration_month": "07",
25+
"security_code": 1234,
26+
"email": "tokenizacao_bandeira@getnet.com.br"
27+
}
28+
```
29+
30+
---
31+
32+
### **2. Geração do Criptograma do Cartão**
33+
#### Descrição
34+
A rotina deve enviar o token gerado previamente (`network_token_id`) e os dados adicionais da transação para o endpoint responsável por gerar o criptograma.
35+
36+
#### Detalhes do Endpoint
37+
**URL:** `/v1/cryptogram/generate`
38+
**Método:** `POST`
39+
40+
**Request Body:**
41+
```json
42+
{
43+
"network_token_id": "1b110aaa71934ae492bff48baab9af81",
44+
"transaction_type": "CIT ou MIT",
45+
"cryptogram_type": "VISA_TAVV ou MC_DSRP_LONG",
46+
"amount": 1000,
47+
"customer_id": "customer_45678900",
48+
"email": "tokenizacao_bandeira@getnet.com.br",
49+
"card_brand": "VISA ou MASTERCARD"
50+
}
51+
```
52+
53+
#### Exemplo de transação
54+
```php
55+
<?php
56+
57+
use Getnet\API\Getnet;
58+
use Getnet\API\Tokenization;
59+
use Getnet\API\Transaction;
60+
use Getnet\API\Environment;
61+
use Getnet\API\BrandToken;
62+
use Getnet\API\BrandCryptToken;
63+
use Getnet\API\Credit;
64+
use Getnet\API\Customer;
65+
use Getnet\API\Card;
66+
use Getnet\API\Order;
67+
68+
include 'vendor/autoload.php';
69+
70+
$client_id = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxx";
71+
$client_secret = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxx";
72+
$seller_id = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxx";
73+
$environment = Environment::sandbox();
74+
75+
//Opicional, passar chave se você quiser guardar o token do auth na sessão para não precisar buscar a cada trasação, só quando expira
76+
$keySession = null;
77+
78+
//Autenticação da API
79+
$getnet = new Getnet($client_id, $client_secret, $environment, $keySession);
80+
81+
$brandToken = new BrandToken(
82+
"customer_210818263",
83+
"customer@email.com.br",
84+
"VISA",
85+
"MANUALLY_ENTERED",
86+
"4622943123039761",
87+
"722",
88+
"12",
89+
"2025",
90+
$getnet
91+
);
92+
93+
$transaction = new Transaction();
94+
$transaction->setSellerId($getnet->getSellerId());
95+
$transaction->setCurrency("BRL");
96+
$transaction->setAmount(103.03);
97+
98+
//Adicionar dados do Pedido
99+
$transaction->order("123456")
100+
->setProductType(Order::PRODUCT_TYPE_SERVICE)
101+
->setSalesTax(0);
102+
103+
//Adicionar dados do Pagamento
104+
$card = (new Card())
105+
->setNumberToken($brandToken->getNetworkTokenId())
106+
->setBrand(Card::BRAND_VISA)
107+
->setExpirationMonth("12")
108+
->setExpirationYear(date('y')+1)
109+
->setCardholderName("Jax Teller")
110+
->setSecurityCode("123");
111+
112+
$transaction->credit()
113+
->setAuthenticated(false)
114+
->setDynamicMcc("1799")
115+
->setSoftDescriptor("LOJA*TESTE*COMPRA-123")
116+
->setDelayed(false)
117+
->setPreAuthorization(false)
118+
->setNumberInstallments(3)
119+
->setSaveCardData(false)
120+
->setTransactionType(Credit::TRANSACTION_TYPE_INSTALL_WITH_INTEREST)
121+
->setCard($card);
122+
123+
//Adicionar dados do cliente
124+
$transaction->customer("customer_210818263")
125+
->setDocumentType(Customer::DOCUMENT_TYPE_CPF)
126+
->setEmail("customer@email.com.br")
127+
->setFirstName("Jax")
128+
->setLastName("Teller")
129+
->setName("Jax Teller")
130+
->setPhoneNumber("5551999887766")
131+
->setDocumentNumber("12345678912")
132+
->billingAddress()
133+
->setCity("São Paulo")
134+
->setComplement("Sons of Anarchy")
135+
->setCountry("Brasil")
136+
->setDistrict("Centro")
137+
->setNumber("1000")
138+
->setPostalCode("90230060")
139+
->setState("SP")
140+
->setStreet("Av. Brasil");
141+
142+
//Adicionar dados de entrega
143+
$transaction->shipping()
144+
->setFirstName("Jax")
145+
->setEmail("customer@email.com.br")
146+
->setName("Jax Teller")
147+
->setPhoneNumber("5551999887766")
148+
->setShippingAmount(0)
149+
->address()
150+
->setCity("Porto Alegre")
151+
->setComplement("Sons of Anarchy")
152+
->setCountry("Brasil")
153+
->setDistrict("São Geraldo")
154+
->setNumber("1000")
155+
->setPostalCode("90230060")
156+
->setState("RS")
157+
->setStreet("Av. Brasil");
158+
159+
$brandCryptToken = new BrandCryptToken(
160+
$brandToken->getNetworkTokenId(),
161+
BrandCryptToken::TYPE_MERCHANT,
162+
BrandCryptToken::TYPE_VISA,
163+
103.03,
164+
"customer_210818263",
165+
"customer@email.com.br",
166+
"VISA",
167+
$getnet
168+
);
169+
170+
$transaction->tokenization()
171+
->setType(Tokenization::TYPE_VISA)
172+
->setCryptogram($brandCryptToken->getCryptogram())
173+
->setRequestorId($brandToken->getRequestId());
174+
175+
//Ou pode adicionar entrega com os mesmos dados do customer
176+
//$transaction->addShippingByCustomer($transaction->getCustomer())->setShippingAmount(0);
177+
178+
//Adiciona o dispositivo
179+
$transaction->device("device_id")->setIpAddress("127.0.0.1");
180+
181+
$response = $getnet->authorize($transaction);
182+
183+
print_r($response->getStatus()."\n");
184+
```
185+
186+
---
187+
188+
### **Referências**
189+
- Documentação da API: [[link para a documentação](https://developers.getnet.com.br/idempotency#tag/Tokenizacao-Bandeira)]

0 commit comments

Comments
 (0)