> For the complete documentation index, see [llms.txt](https://docs.pixcord.shop/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pixcord.shop/plugins/request-na-api.md).

# Sites e aplicativos (Request na API)

## Passo-a-passo demonstrativo

### 1. No Pixcord...

#### Configurando o Produto

Após realizar as configurações básicas do produto, crie uma ação do tipo **Request em API**

<figure><img src="/files/dRrfSmDf9n5n2sQ6Blj0" alt=""><figcaption></figcaption></figure>

### 2. No Website...

No exemplo estaremos utilizando um website feito em [Express](https://expressjs.com/pt-br/) e [Mongoose](https://mongoosejs.com/), mas utilize o que for mais adequado para você!

Crie uma rota API do tipo POST, como por exemplo `/premiumactive`

```javascript
app.post("/api/premiumactive", async (req, res) => {

})
```

### 3. No Pixcord...

#### Configurando o Produto

* Após realizar as configurações básicas do produto, crie uma ação do tipo **Request em API**\
  ![](/files/ChGjAPHcT2y63azvwTz9)
* Defina a URL com a rota criada para seu aplicativo\
  ![](/files/St3JRzCERyB40lUJ4tDy)
* Pronto! A configuração do produto já está pronta! Agora basta salvar.\
  ![](/files/eaqeOfb5ML11XghQBJr1)

### 4. No Website...

Por segurança, todas as requisições feitas pelo Pixcord contém `x-pixcord-key` nos seus `headers`. Isso evita que pessoas não autorizadas realizem um request válido em sua API.

Salve a chave encontrada na página **Chaves** do Pixcord em um arquivo seguro. Como por exemplo, em um arquivo `.env`.

```properties
PIXCORD_KEY=PIXCORD_KEY-1234567890_abcdefghijklmnopqrstuvwxyz
```

> **Atenção!** Alguém com esta chave conseguirá realizar requisições maliciosas em seu website! Guarde com segurança.

Voltando para a rota da API, verifique se a chave enviada nos `headers` do request é igual à chave salva. Caso não seja, retorne com um erro.

```javascript
app.post("/api/premiumactive", async (req, res) => {
    const pixcordKey = req.headers["x-pixcord-key"];
    if (pixcordKey != process.env.PIXCORD_KEY) return res.status(403).json({ message: "Chave do Pixcord inválida." })
})
```

### 5. Estrutura do request

Os requests enviados pelo Pixcord contém as seguintes infomações:

```json
headers: {
  "x-purchase-id": "ID da compra",
  "x-pixcord-key": "Chave de segurança do Pixcord citada acima",
  "x-guild-id": "ID do servidor da compra"
}, 
body: {
  fields: {
    "nome do campo": "valor do campo"
  },
  purchase: {
    id: "ID da compra",
    payment_method: "Método de pagamento",
    productId: "Id produto",
    status: "Status da compra",
    subtotal_value: "Valor total da compra, sem desconto",
    total_value: "Valor total da compra",
    discount_value: "Valor do desconto",
    usedCouponCode: "Código do cupom utilizado" || null,
    usedCouponId: "ID do cupom utilizado" || null,
    unit_value: "Preço da unidade do produto",
    quantity: "Quantidade comprada",
    loggedUser: "ID do usuário logado" || null
  }
 }
```

Sabendo disso, crie os campos necessários no produto do Pixcord para que o usuário seja informado, e o acesse utilizando `<Request>.body.fields["nome do campo"]` em sua API.

### 6. Continuando nosso código...

* Obtenha o username utilizando `req.body.fields["username"]`
* Procure pelo usuário no banco de dados. (`await UserSchema.findOne({ username: username })`)
* Caso não encontre, retorne um erro informando.
* Defina que o usuário é premium (`user.premium = true`)
* Salve o usuário! (`user.save()`)
* Retorne uma mensagem indicando sucesso! E pronto! Todo o sistema está pronto, sua integração com o [Pixcord](https://pixcord.shop/) já está funcionando! Em alguns simples passos, você já pode vender produtos em seu website!

```javascript
app.post("/api/premiumactive", async (req, res) => {
    const pixcordKey = req.headers["x-pixcord-key"];
    if (pixcordKey != process.env.PIXCORD_KEY) return res.status(403).json({ message: "Chave do Pixcord inválida." });
    
    const username = req.body.fields["username"];
    
    const user = await UserSchema.findOne({ username: username });
    if (!user) return res.status(404).json({ message: "Usário não encontrado" });
    
    user.premium = true;
    await user.save();
    
    return res.status(200).json({ message: `Premium ativado com sucesso para ${user.username}!` })
})
```

Este é um exemplo simples, mas com seu código o céu é o limite!
