Como reconhecer uma subconta de uma cobrança paga?
Para a utilização desta funcionalidade é necessário possuir a funcionalidade Subconta
A forma mais recomendada para reconhecer uma subconta de uma cobrança após o pagamento em tempo real é utilizando o nosso Webhook de cobrança paga. Nele é retornado todas as informações da cobrança, inclusive a subconta, caso a cobrança esteja atrelada à uma. Segue o exemplo do payload retornado pelo Webhook de uma cobrança atrelada à uma subconta:
{
"event": "OPENPIX:CHARGE_COMPLETED",
"charge": {
"customer": {
"name": "CONTA DE PAGAMENTO DE PIX",
"taxID": {
"taxID": "74866698000169",
"type": "BR:CNPJ"
},
"correlationID": "<correlationID>"
},
"value": 1600,
"comment": "from-script-api",
"identifier": "a74f60ba44e54c67b2cb74243971a674",
"correlationID": "<correlationID>",
"paymentLinkID": "<paymentLinkID>",
"transactionID": "a74f60ba44e54c67b2cb74243971a674",
"status": "COMPLETED",
"additionalInfo": [],
"discount": 0,
"valueWithDiscount": 1600,
"expiresDate": "2024-03-16T18:19:44.426Z",
"type": "DYNAMIC",
"createdAt": "2024-03-15T18:19:50.296Z",
"updatedAt": "2024-03-15T18:22:04.045Z",
"paidAt": "2024-03-15T18:19:50.154Z",
"payer": {
"name": "CONTA DE PAGAMENTO DE PIX",
"taxID": {
"taxID": "74866698000169",
"type": "BR:CNPJ"
},
"correlationID": "<correlationID>"
},
"brCode": "<brCode>",
"subaccount": {
"name": "[email protected]",
"pixKey": "[email protected]"
},
"expiresIn": 86400,
"pixKey": "<pixKey>",
"paymentLinkUrl": "<paymentLinkUrl>",
"qrCodeImage": "<qrCodeImage>",
"globalID": "<globalID>"
},
"pix": {
"customer": {
"name": "CONTA DE PAGAMENTO DE PIX",
"taxID": {
"taxID": "74866698000169",
"type": "BR:CNPJ"
},
"correlationID": "<correlationID>"
},
"payer": {
"name": "CONTA DE PAGAMENTO DE PIX",
"taxID": {
"taxID": "74866698000169",
"type": "BR:CNPJ"
},
"correlationID": "<correlationID>"
},
"charge": {
"customer": {
"name": "CONTA DE PAGAMENTO DE PIX",
"taxID": {
"taxID": "74866698000169",
"type": "BR:CNPJ"
},
"correlationID": "<correlationID>"
},
"value": 1600,
"comment": "from-script-api",
"identifier": "a74f60ba44e54c67b2cb74243971a674",
"correlationID": "<correlationID>",
"paymentLinkID": "<paymentLinkID>",
"transactionID": "a74f60ba44e54c67b2cb74243971a674",
"status": "COMPLETED",
"additionalInfo": [],
"fee": 50,
"discount": 0,
"valueWithDiscount": 1600,
"expiresDate": "2024-03-16T18:19:44.426Z",
"type": "DYNAMIC",
"createdAt": "2024-03-15T18:19:50.296Z",
"updatedAt": "2024-03-15T18:22:04.045Z",
"paidAt": "2024-03-15T18:19:50.154Z",
"payer": {
"name": "CONTA DE PAGAMENTO DE PIX",
"taxID": {
"taxID": "74866698000169",
"type": "BR:CNPJ"
},
"correlationID": "<correlationID>"
},
"brCode": "<brCode>",
"subaccount": {
"name": "[email protected]",
"pixKey": "[email protected]"
},
"expiresIn": 86400,
"pixKey": "<pixKey>",
"paymentLinkUrl": "<paymentLinkUrl>",
"qrCodeImage": "<qrCodeImage>",
"globalID": "<globalID>"
},
"value": 1600,
"time": "2024-03-15T18:19:50.154Z",
"endToEndId": "E231144472024031518218Xb59c4mq1x",
"transactionID": "a74f60ba44e54c67b2cb74243971a674",
"type": "PAYMENT",
"createdAt": "2024-03-15T18:22:03.843Z",
"globalID": "<globalID>"
},
"company": {
"id": "<companyID>",
"name": "master",
"taxID": "<taxID>"
},
"account": {
"clientId": "<clientId>"
}
}
Exemplo
Vamos imaginar um caso que queremos identificar a subconta pertencente a uma cobrança paga, para realizar uma transferência entre subcontas.
Para isso, vamos precisar está criando um Webhook com o evento Cobrança paga - OPENPIX:CHARGE_COMPLETED
. Para criar esse Webhook, bastar você entrar na nossa plataforma, e acessar a aba API/Plugins
via sidebar menu.
E logo em seguida, clicar no botão Novo Webhook
.
Nesse caso, eu vou está criando o Webhook com as seguintes configurações:
- Nome:
Webhook de Cobrança Paga
(Você pode está escolhendo o nome que quiser) - Evento:
Cobrança paga - OPENPIX:CHARGE_COMPLETED
(Esse evento é disparado quando uma cobrança é paga) - URL:
https://openpixteste.com/webhook
(Essa é a URL do meu serviço que estará recebendo as chamadas do Webhook)
Aqui está um exemplo de um servidor HTTP em Node.js utilizando Express, na qual possui apenas a rota que irá receber as chamadas do Webhook.
const express = require('express');
const node-fetch = require('node-fetch');
const app = express();
app.use(express.json());
// Endpoint que estará recebendo as chamadas do Webhook da OpenPix.
app.post('/webhook', (request, response) => {
const webhookResponse = request.body;
// Esse `if` garante que transferência só será feita
// se a cobrança tiver uma subconta atrelada à ela.
if (webhookResponse.charge.subaccount) {
// Valor da transferência, sempre 30% do valor da cobrança.
const transferValue = webhookResponse.charge.value * 0.3;
// Chave Pix da subconta que recebeu o pagamento da cobrança
const fromPixKey = webhookResponse.charge.subaccount.pixKey;
// Requsição que fará a transferência do valor entre subcontas.
const response = await fetch(`https://api.openpix.com.br/api/v1/subaccount/transfer`, {
method: 'POST',
"headers": {
"Content-Type": "application/json",
"Authorization": "REPLACE_WITH_YOUR_APPID"
},
body: JSON.stringify({
value: transferValue,
fromPixKey,
fromPixKeyType: 'EMAIL',
// Chave Pix da subconta que receberá o valor da transferência.
toPixKey: '[email protected]',
toPixKeyType: 'EMAIL',
});
});
const status = await response.status();
if (status === 200) {
return response.status(200).json({ success: 'Transfer done!' });
}
return response.status(400).json({ error: 'Failed to make the transfer' });
}
return response.status(200);
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Basicamente, quando o payload enviado pelo Webhook tiver o campo charge.subaccount
, ele irá fazer uma nova requisição para OpenPix realizando uma transferência de 30% do valor da cobrança para a subconta vinculada a chave Pix [email protected]
. Caso o payload não contenha esse campo, a rota apenas retorna o código de status 200.
Essa é uma forma de reconhecer uma subconta após o pagamento de uma cobrança, e executar uma ação através disso.