Skip to content

Commit

Permalink
Adiciona README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Vinícius Martins Pinto da Silva committed May 31, 2023
1 parent 4fb367e commit 7e4c259
Showing 1 changed file with 242 additions and 0 deletions.
242 changes: 242 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
# Flex Gateway

O Flex Gateway tem como objetivo viabilizar e facilitar a realização de cobranças via cartão de crédito dentro do seu sistema. Por meio de um sistema inteligente e integrado com múltiplos gateways de pagamento, a sua cobrança será realizada com maior segurança. No caso de uma falha na tentativa de cobrança em determinado gateway, é feita uma nova tentativa de cobrança no gateway seguinte, até que a operação seja realizada com sucesso.

### **Full Checkout**

Na nossa solução completa para checkout, oferecemos uma tela de checkout responsiva e já integrada com a nossa API. Basta importar no seu projeto e seguir a documentação para realização das configurações necessárias para começar a utilizar.

### **Core Checkout**

A solução "Core", possibilita manter a identidade visual da sua aplicação. O usuário terá liberdade para implementar a sua própria tela de checkout e depois utilizar a solução "Core" para fazer a integração com as APIs do Flex Gateway.

## **Guia utilização Full Checkout**

Primeiramente, importe o Flex Gateway Full Checkout para dentro da sua aplicação Web.

```html
<script defer="defer" src="https://stage3.pca.com.br/MultiGateway/Cdn/pca-multigateway.js"></script>
```
Crie a tag html onde será renderizada a tela de checkout do Flex Gateway
```html
<div
id="pca-multigateway-app"
data-api-key="1CDFC221-F9BA-4D68-AE0D-DC491B46CCAC"
data-additional-info='{
"ammount": 59.9,
"description": "Assinatura PCA",
"transactionCode": "CODIGO-TRANSACAO-1",
"customerCode": "CODIGO-CLIENTE-1",
"action": "Capture"
}'
data-onsuccess="callbackSucessoFlexGateway"
data-onerror="callbackErroFlexGateway"
>
</div>
```
* **id:** O id do elemento onde será renderizado a tela de checkout deve ser "pca-multigateway-app"
* **data-api-key:** Api Key para acesso a API e integração com o Flex Gateway
* **data-additional-info:** Json que contém parâmetros relacionados a cobrança a ser realizada, segue o schema abaixo:
* **data-onsuccess:** Nome da função callback que é chamada pelo Flex Gateway ao finalizar com sucesso uma operação.
* **data-onerror:** Nome da função callback que é chamada pelo Flex Gateway quando ocorrer uma falha em uma operação.

### **data-additional-info**
```json
{
"ammount": number, // Valor que será cobrado
"description": string, // Descrição do que será cobrado, aparecerá na tela de checkout
"transactionCode": string, // Código da transação para controle das suas transações realizadas
"customerCode": string, // Código do cliente para identificação e controle do cliente que realizou o pagamento
"action": "Capture" | "Tokenize", // Capture: Cobrança é realizada imediatamente após submit das informações | Tokenize: É apenas realizada a Tokenização do cartão para cobranças futuras por meio das APIs do Flex Gateway. Quando marcado "Tokenize" é interessante salvar o token retornado no callback de sucesso para poder realizar futuras cobranças.
}
```
### Exemplo:
```html
<script>
function callbackSucessoFlexGateway(resultado) {
console.log(resultado);
}
function callbackErroFlexGateway(resultado) {
console.log(resultado)
}
const pcaFlexGatewayElement = document.getElementById("pca-multigateway-app");
pcaFlexGatewayElement.setAttribute("data-api-key", "<SUA-API-KEY>");
pcaFlexGatewayElement.setAttribute("data-additional-info", "<INFORMACOES_COBRANCA>");
pcaFlexGatewayElement.setAttribute("data-onsuccess", "callbackSucessoFlexGateway");
pcaFlexGatewayElement.setAttribute("data-onerror", "callbackErroFlexGateway");
</script>
```
### **Model parâmetros funções callback Sucesso e Erro**
A model retornada na função de callback segue o schema abaixo:
```ts
// Resultado
{
success: boolean;
message?: string;
creditCardToken?: string; // Token cartão de crédito que poderá ser utilizado para futuras cobranças por meio das APIs do Flex Gateway
fieldErrors?: Array<IFieldValidation>;
}

// IFieldValidation
{
property: string;
message: string;
}
```
### **Informações complementares**
Uma vez obtido o token do cartão de crédito, é possível realizar cobranças futuras por meio da utilização da nossa API. A sua api key será utilizada na autenticação e o token do cartão de crédito gerado será utilizado para efetuar cobranças. Portanto, para realizar cobranças recorrentes sem precisar solicitar novamente ao cliente dados de cartão de crédito, uma opção é armazenar o token do cartão a fim de utilizar em futuras cobranças. Para mais informações, acesse a documentação da nossa api [clicando aqui](https://stage3.pca.com.br/MultiGateway/ClientApi/swagger)

## **Guia utilização Core Checkout**

### Importação no projeto

```html
<script defer="defer" src="https://stage3.pca.com.br/MultiGateway/Cdn/pca-multigateway-core.js"></script>
```

### Inicializando
```js
const mgConnector = new MultiGatewayConnector();
await mgConnector.init('<SUA_API_KEY>');
```
### Métodos **MultiGatewayConnector**

```
# Inicializa configurações
- init(apiKey: string): Promise<IInitResult>
# Gera token cartão para cobranças futuras
- tokenize(data: ITokenizationRequest): Promise<ITokenizeResult>
# Efetua a cobrança no cartão de crédito a partir do token de cartão gerado
- capture(data: IChargeModel): Promise<ICustomResponse<IChargeResponseModel>>
```

### Propriedades **MultiGatewayConnector**
```ts
config?: IMultigatewayConfig;

interface IMultigatwayConfig {
cardsConfiguration: ICardConfiguration[];
}

export default interface ICardConfiguration {
brand: string;
name: string;

/*
Regex que pode ser utilizado para identificar a bandeira do cartão a partir do número informado
*/
numberFormat: string;

numberMaxLength: number[];

/*
Exemplo: [[4, 4, 4], [4, 3, 5], [3, 3, 3]].
Cada elemento é um tipo de máscara que pode ser aplicado ao número do cartão dependendo da qtd de dígitos.
[4, 4, 4, 4]: 1234 1234 1234 1234(16 dígitos)
[4, 6, 4]: 1234 123 12345 (14 dígitos)
[3, 3, 3]: 123 123 123 (9 dígitos)
*/
cardNumberMask: number[][];

cvvMaxLength: number[];
image: string; // Imagem bandeira do cartão
}
```

### **Schemas**
```ts
interface IInitResult {
success: boolean;
message?: string;
}

interface ITokenizationRequest {
cardNumber: string;
holderName: string;
expiryMonth: string;
expiryYear: string;
customerName: string;
holderDocument: string;
cardFlag: string;
amount: number;
cvv: string | null;
transactionCode: string;
customerCode: string;
action: 'Tokenize' | 'Capture';
}

interface ITokenizeResult {
success: boolean;
fieldErrors?: Array<IFieldValidation>;
message?: string;
token?: string;
}

interface IChargeModel {
transaction: ITransactionModel;
customer: ICustomerModel;
token: string;
}

interface ICustomResponse<IChargeResponseModel> {
status: number;
statusText: string;
headers: any;
success: boolean;
data?: IChargeResponseModel;
errorData?: any;
message?: string;
}

interface IChargeResponseModel {
transaction: ITransactionModel;
customer: ICustomerModel;
token: string;
identifier: string;
captureInfo: ICaptureInfoModel;
}

interface ITransactionModel {
code?: string;
amount: number;
}

interface ICustomerModel {
name?: string;
document?: string;
code?: string;
}

interface ICaptureInfoModel {
captured: boolean;
message?: string;
code?: string;
}

```

### **Utilização do MultiGatewayConnector**
Uma vez instanciado, e carregado as configurações, é possível utilizar os métodos **tokenize** e **capture** para efetuar as operações com cartão de crédito.

### Exemplo:
```ts
const mgConnector = new MultiGatewayConnector();
await mgConnector.init('<SUA_API_KEY>');

// Realiza tokenização (Gera token do cartão que será utilizado para cobrança)
const dadosTokenizacao: ITokenizationRequest = obterDadosFormularioCheckout();
const resultadoTokenizacao = await mgConnector.tokenize(dadosTokenizacao);

// Efetua cobrança
const dadosCapture: IChargeModel = obterDadosCaptureFromResultadoTokenizacao(resultadoTokenizacao);
const resultadoCobranca = await mgConnector.capture(chargeModel);
```
### **Informações complementares**
No Flex Gateway Core Checkout, toda a implementação e validação do formulário de checkout ficará sob responsabilidade do usuário do Flex Gateway. Nas configurações do **MultiGatewayConnector** estarão disponíveis as bandeiras permitidas e configurações de máscaras de cartão que poderão ser utilizadas como dados complementares para montar o formulário de checkout.

## **Demonstração**
Está disponibilizado também uma demonstração explicativa do Flex Gateway Core Checkout e Full Checkout, para que todos consigam testar e interagir com o Flex Gateway ([acessar demonstração](https://pcaeng.github.io/flexgateway-yourform)). O código fonte desta demonstração poderá ser utilizado também como documentação e guia para os desenvolvedores e está disponível em https://github.com/pcaeng/flexgateway-yourform

0 comments on commit 7e4c259

Please sign in to comment.