UUGate
← Voltar aos tutoriais

Wallets e recebimentos

Wallet exclusiva para depósitos — recomendada

Recomendado para depósitos de membros: sem valor prévio nem contagem regressiva, com crédito pelo valor recebido. Inclui painel, vinculação por API, consultas e callbacks.

Leitura de cerca de 8 minAtualizado em 2026-09-24
Assistir ao vídeo03:35 · Áudio e legendas em português

Assista em tela cheia ou escolha um capítulo. Para enviar ou receber fundos, use os dados do seu próprio painel.

Guia passo a passo

Siga as etapas no seu painel. Clique em uma imagem para ampliá-la.

  1. Para recarregar o saldo de membros, recomendamos uma wallet exclusiva. Vincule um endereço a cada membro para que ele possa fazer vários depósitos. Não é preciso informar o valor antes, e não há contagem regressiva para pagar. Isso evita problemas de correspondência por valor diferente ou pedido expirado. Rede, moeda e confirmações ainda precisam ser verificadas.

    Etapa 1 · Clique para ampliar
  2. Abra a lista de wallets, clique em Criar wallet, escolha a moeda e a rede e selecione Wallet exclusiva. Se o membro envia USDT pela rede TRON, escolha TRC20-USDT. A rede deve sempre corresponder à rede do envio. TRC20-USDT · BEP20-USDT · BEP20-USDC · SPL-USDC.

    Etapa 2 · Clique para ampliar
  3. Na informação de vinculação, informe um identificador estável e único do membro. Esse valor corresponde ao bindKey da API, não ao UID do comerciante. Para creditar o saldo automaticamente, informe a URL de callback do seu servidor. Se ficar vazia, será usada a configuração padrão. Confira a cota antes de criar a wallet. Por exemplo, MEMBER_10001 identifica o membro. notifyUrl deve ser uma URL HTTPS pública. Não forneça ao membro o endereço de recarga de taxas.

    Etapa 3 · Clique para ampliar
  4. Filtre a lista por Wallet exclusiva e confira a moeda e o endereço do membro. Wallets criadas pela API também aparecem aqui. Para o mesmo membro, rede e moeda, reutilize a vinculação existente. Não crie uma nova wallet a cada depósito.

    Etapa 4 · Clique para ampliar
  5. Abra o checkout na linha da wallet. Não há campo de valor nem contagem regressiva. Envie o endereço completo ou o link ao membro correspondente. Ele escolhe quanto depositar, e seu sistema credita o valor realmente recebido. Mantenha a wallet habilitada para receber depósitos. Antes de desativá-la, avise o membro para parar de enviar fundos ao endereço.

    Etapa 5 · Clique para ampliar
  6. Para integrar pela API, abra a ferramenta oficial e selecione Criar wallet exclusiva. Informe a moeda, o identificador do membro e a URL de callback. Não são necessários valor, prazo ou número de pedido do comerciante. O pedido é gerado quando o depósito é detectado. POST /openapi/payin/exclusive-bindings · chainCode · tokenSymbol · bindKey · label? · notifyUrl?

    Etapa 6 · Clique para ampliar
  7. Autentique no servidor com Merchant UID + API Key e os cabeçalhos x-api-key, x-merchant-uid, x-timestamp, x-nonce e x-signature. A mensagem HMAC-SHA256 tem sete linhas: UID, timestamp em milissegundos, nonce, método HTTP em maiúsculas, caminho sem query, query normalizada e body normalizado. Use o SDK oficial ou o código da ferramenta e gere um timestamp e nonce novos por requisição. Confira os dados antes de criar uma vinculação real.

    Etapa 7 · Clique para ampliar
  8. Salve bindingId, addressId, address, bindKey, chainCode, tokenSymbol e status; o status deve ser active. A mesma combinação de comerciante + rede + moeda + bindKey retorna a vinculação existente. Repetir a criação não substitui label nem notifyUrl. A resposta não inclui cashierUrl: mostre address na sua página de depósitos ou copie o link do checkout no painel.

  9. Consulte com GET /openapi/payin/exclusive-bindings/{bindKey}?chainCode=TRON&tokenSymbol=USDT&recentLimit=10. Codifique bindKey para uso na URL. GET não tem body, mas a query participa da assinatura. A resposta contém stats, recentOrders e recentTransactions. recentLimit aceita de 1 a 20 e não substitui o histórico contábil completo. Para um pedido específico, use GET /openapi/payin/orders/{orderNo}.

  10. Depois de processar o depósito, a plataforma envia o callback para notifyUrl da wallet ou para a configuração padrão, se estiver vazio. Verifique rawBody com a API Key associada ao pedido e confira comerciante, rede, moeda, bindKey e status=completed. Credite paidAmount, o valor efetivamente recebido. Use (merchantUid, orderNo) como chave única e grave a deduplicação e o aumento do saldo na mesma transação de banco de dados. Retorne HTTP 2xx após o sucesso. Confirme duplicidades sem creditar novamente. Não deduplique apenas por bindKey: isso descartaria o próximo depósito do membro.

    Etapa 10 · Clique para ampliar
  11. Nos pedidos de recebimento, filtre por endereço, etiqueta ou identificador de vinculação. Confira o valor, o status e o hash. A API também consulta pedidos e transações recentes da vinculação e os detalhes de um pedido. Abaixo, a parte escrita mostra as rotas e os exemplos. Confira o resultado com o registro da wallet e o saldo do membro no seu sistema. O botão Callback reenvia uma notificação; não abre uma consulta. Garanta a deduplicação antes de usá-lo.

    Etapa 11 · Clique para ampliar
  12. Se o saldo do membro não mudar, confira rede, moeda e confirmações. Depois, verifique o pedido, a URL de callback e os registros do seu servidor. Se a assinatura falhar, confira a normalização, o relógio e nonce. Se a vinculação não aparecer, confira comerciante, rede, moeda e bindKey. Verifique também o status da conta, a cota de endereços e o saldo de taxas.

Use um identificador diferente para cada membro e reutilize sua vinculação na mesma rede e moeda. Credite o valor efetivamente recebido após verificar o callback e evite duplicidades por pedido.

Fluxo de depósito de um membro

O membro entra na conta e escolhe rede e moeda
→ O servidor obtém o bindKey estável do membro
→ Cria ou consulta o vínculo exclusivo e reutiliza o endereço
→ O membro escolhe quanto enviar para esse endereço
→ A plataforma detecta e confirma o depósito e gera um pedido exclusivo
→ Verifica o callback completed e credita paidAmount uma única vez por pedido
→ Concilia pedidos e extratos do painel com os créditos do membro

Node.js: criar ou reutilizar um vínculo (cria uma wallet real)

import { UUGateClient } from 'uugate-openapi-sdk';

const client = new UUGateClient({
  baseUrl: 'https://api.uugate.com',
  merchantUid: process.env.UUGATE_MERCHANT_UID,
  apiKey: process.env.UUGATE_API_KEY,
});
const binding = await client.createExclusiveBinding({
  chainCode: 'TRON',
  tokenSymbol: 'USDT',
  bindKey: 'MEMBER_10001',
  label: 'MEMBER_10001',
  notifyUrl: 'https://merchant.example.com/uugate/notify',
});

Node.js: consultar um vínculo e depósitos recentes (reutilize client)

const bindKey = 'MEMBER_10001';
const detail = await client.request('GET',
  '/openapi/payin/exclusive-bindings/' + encodeURIComponent(bindKey), {
    query: { chainCode: 'TRON', tokenSymbol: 'USDT', recentLimit: 10 },
  });

Crédito por callback (pseudocódigo; use uma transação de banco de dados)

Preserve o corpo HTTP original como rawBody
Verifique x-callback-signature com a API Key associada ao pedido:
  HMAC-SHA256(apiKey, timestamp + "." + nonce + "." + rawBody)
Valide timestamp, proteção contra repetição e campos do negócio
Exija o merchantUid correto e status == "completed"
Localize o membro por bindKey + chainCode + tokenSymbol
Na mesma transação de banco de dados:
  Registre o depósito com chave única (merchantUid, orderNo)
  Já registrado → não credite novamente
  Primeiro registro → acrescente paidAmount ao saldo com aritmética decimal
Retorne 2xx após sucesso; em caso de falha, retorne um estado diferente de 2xx e registre o erro
// bindKey identifica o membro; orderNo identifica um depósito. Não confunda os dois.

Ampliar captura