Tutorial de Integração do Método de Pagamento eMola com a API de e2Payments

#### Visão Geral

A API de e2Payments permite que programadores acessem diversos recursos e realizem operações como processamento de pagamentos eMola, carteira Visa, MasterCard e outros. Para utilizar a API, você precisará das chaves `client_id` e `client_secret` disponíveis no painel administrativo. A principal característica de e2Payments é a segurança. Todas as transações são realizadas em um ambiente seguro, evitando acessos não autorizados.

Todas as requisições à API de e2Payments seguem a arquitetura REST e são realizadas via HTTP na URL base: `https://e2payments.explicador.co.mz/v1/`. A URL completa varia conforme o recurso desejado. Por exemplo, para buscar o histórico de todos os pagamentos recebidos nas carteiras eMola, o endpoint completo é: `https://e2payments.explicador.co.mz/v1/payments/emola/get/all`.

Nesta documentação, você encontrará todas as informações necessárias para realizar transações em qualquer sistema ou linguagem de programação.

---

### Credenciais da API

Para criar suas credenciais, é necessário estar autenticado com uma conta de email confirmado. A autenticação pode ser feita por uma das plataformas da Explicador. Após o login, você poderá criar suas credenciais no seguinte formato:

```json
{
  "client_id": "91fdae03-29a0-496c-9451-fb1e7dd2adffdf",
  "client_secret": "T8sHdLfujgjZBp8aAf0Gsfu3kJgDzmNRUGEdN0sdfdsf"
}
```

#### Composição das Credenciais

- **Name**: Nome que atribui às suas credenciais.
- **Redirect URL**: URL do aplicativo onde as credenciais serão usadas.
- **client_id**: Gerado automaticamente, necessário em todas as requisições.
- **client_secret**: Gerado automaticamente, necessário apenas para solicitar o token de autenticação.

---

### Token de Acesso

Para acessar a API de e2Payments, todas as requisições devem incluir um token de acesso. Este token é gerado com as credenciais `client_id` e `client_secret` e deve ser solicitado através de uma requisição POST para o endpoint `/oauth/token`.

#### Exemplo de Geração de Token

```javascript
axios.post('https://e2payments.explicador.co.mz/oauth/token', {
  grant_type: 'client_credentials',
  client_id: '91fdae03-29a0-496c-9451-fb1e7dd2adffdf',
  client_secret: 'T8sHdLfujgjZBp8aAf0Gsfu3kJgDzmNRUGEdN0sdfdsf'
})
.then(function (response) {
  storeTokenInBrowser(response.data);
})
.catch(function (err) {
  console.log('token error', err);
});
```

#### Resposta com o Token

```json
{
  "access_token": "eyJ0iJJ9.eyJWEwLTQ5NmMtOTQ1MS1mYjFlOiJlN...",
  "expires_in": 31536000,
  "token_type": "Bearer"
}
```

---

### Armazenamento do Token de Acesso

Para evitar solicitar o token de acesso em cada requisição, recomenda-se armazená-lo no navegador. Exemplo de como armazenar o token:

```javascript
async function storeTokenInBrowser(responseData) {
  let token = responseData.token_type + ' ' + responseData.access_token;
  let expires = addDaysToToken(10); // validade de 10 dias
  document.cookie = "e2payment_token=" + (token || "")  + expires + "; path=/";
}

async function addDaysToToken(totalDays) {
  Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
  }
  var date = new Date();
  return date.addDays(totalDays);
}
```

---

### Composição do Header

Todas as chamadas para a API de e2Payments são do tipo POST. O header deve incluir:

```json
{
  "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm...",
  "Accept": "application/json",
  "Content-Type": "application/json"
}
```

---

### Listar Pagamentos

Para recuperar a lista de todos os pagamentos recebidos na sua conta eMola:

```javascript
var ENDPOINT_URL = "https://e2payments.explicador.co.mz/v1/payments/emola/get/all";
var payload = {
  "client_id": "91fdae03-29a0-496c-9451-fb1e7dd2adffdf",
};
var header = {
  "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm...",
  "Accept": "application/json",
  "Content-Type": "application/json"
};

axios.post(ENDPOINT_URL, payload, {headers: header})
.then(function (response) {
  console.log(response.data); // Pagamentos buscados.
})
.catch(function (err) {
  console.log('Error buscando pagamentos', err);
});
```

---

### Recuperar Token Armazenado

Método para recuperar o token armazenado no navegador:

```javascript
async function getToken() {
  var nameEQ = "e2payment_token=";
  var ca = document.cookie.split(';');
  for(var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1, c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  }
  return null;
}

var header = {
  "Authorization": getToken(),
  "Accept": "application/json",
  "Content-Type": "application/json"
};
```

---

### Carteiras

Para realizar transações, você precisará ter uma carteira eMola. É necessário criar uma conta de negócio em uma das instituições financeiras suportadas (MPesa, BIM ou StandardBank) e obter as chaves da API.

#### Listar Carteiras

Para listar todas as carteiras disponíveis na sua conta:

```javascript
var ENDPOINT_URL = "https://e2payments.explicador.co.mz/v1/wallets/emola/get/all";
var payload = {
  "client_id": "91fdae03-29a0-496c-9451-fb1e7dd2adffdf",
};
var header = {
  "Authorization": getToken(),
  "Accept": "application/json",
  "Content-Type": "application/json"
};

axios.post(ENDPOINT_URL, payload, {headers: header})
.then(function (response) {
  console.log(response.data); // Carteiras listadas.
})
.catch(function (err) {
  console.log('Error buscando carteiras', err);
});
```

---

### Transações

#### Tipos de Transação

- **c2b**: Customer to Business - Dinheiro sai da conta do cliente para a conta de negócio.
- **b2c**: Business to Customer - Dinheiro sai da conta do negócio para a conta do cliente.
- **b2b**: Business to Business - Dinheiro sai de uma conta de negócio para outra conta de negócio.

#### Transações c2b

Para realizar uma transação c2b (cliente para negócio) com eMola:

1. **Requisitos**
   - `client_id`
   - `client_secret`
   - ID da carteira

2. **URLs e Endpoints**
   - **URL do Servidor**: `https://e2payments.explicador.co.mz`
   - **Endpoint**: `/v1/c2b/emola-payment/{wallet_id}`

3. **Composição do Header**
   - Veja a sessão "Composição do Header"

4. **Payload**
   - Dados enviados na requisição POST:

```javascript
var wallet_id = 123456; // ID da carteira
var ENDPOINT_URL = "https://e2payments.explicador.co.mz/v1/c2b/emola-payment/" + wallet_id;
var payloadC2b = {
  "client_id": "91fdae03-29a0-496c-9451-fb1e7dd2adffdf",
  "amount": "30", // no intervalo de 1 a 1250000
  "phone": "848512345", // 9 dígitos
  "reference": "PrimeiroPagamento"
};
var header = {
  "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiIsIm...", // Veja o exemplo 05
  "Accept": "application/json",
  "Content-Type": "application/json"
};

axios.post(ENDPOINT_URL, payloadC2b, {headers: header})
.then(function (response) {
  console.log(response.data); // Transação realizada com sucesso.
})
.catch(function (err) {
  console.log('A transação falhou', err);
});
```

---

### Histórico de Pagamentos

Para listar o histórico de pagamentos realizados pelas suas carteiras:

```javascript
var ENDPOINT_URL = "https://e2payments.explicador.co.mz/v1/payments/emola/get/all";
var payload = {
  "client_id": "91fdae

03-29a0-496c-9451-fb1e7dd2adffdf",
};
var header = {
  "Authorization": getToken(),
  "Accept": "application/json",
  "Content-Type": "application/json"
};

axios.post(ENDPOINT_URL, payload, {headers: header})
.then(function (response) {
  console.log(response.data); // Lista dos pagamentos.
})
.catch(function (err) {
  console.log('Error buscando pagamentos', err);
});
```

---

### Paginação do Histórico de Pagamentos

Para listar o histórico limitado dos pagamentos realizados pelas suas carteiras:

```javascript
var qtdDePagamentos = 10;
var ENDPOINT_URL = "https://e2payments.explicador.co.mz/v1/payments/emola/get/all/paginate/" + qtdDePagamentos;
var payload = {
  "client_id": "91fdae03-29a0-496c-9451-fb1e7dd2adffdf",
};
var header = {
  "Authorization": getToken(),
  "Accept": "application/json",
  "Content-Type": "application/json"
};

axios.post(ENDPOINT_URL, payload, {headers: header})
.then(function (response) {
  console.log(response.data); // Lista dos pagamentos.
  console.log(response.next_page_url); // URL para obter os próximos {qtdDePagamentos} pagamentos.
})
.catch(function (err) {
  console.log('Error buscando pagamentos', err);
});
```

---

Com esses passos, você poderá integrar a API de e2Payments ao seu sistema para realizar e gerenciar pagamentos com segurança. Para dúvidas ou mais detalhes, entre em contato com a equipe de suporte do e2Payments ou participe da comunidade no WhatsApp.

Artigos Relacionados

Criar uma conta no TikTok Tecnologia

November 07, 2024