# 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!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.pixcord.shop/plugins/request-na-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
