Se você deseja apenas concluir a primeira integração, esta página é suficiente: gere cabeçalhos assinados, crie uma ordem de pagamento, verifique o retorno de chamada e retorne uma resposta 2xx.
Os exemplos usam a criação de ordem de pagamento por padrão. Os pedidos de pagamento usam a mesma assinatura, cabeçalhos de solicitação e cabeçalhos de retorno de chamada; apenas o endpoint e a carga útil do negócio mudam.
API de produção https://api.uugate.com
Ativos compatíveis TRC20-USDT · BEP20-USDT · BEP20-USDC · SPL-USDC
Configuração de callback API Key + notifyUrl
✓ Prepare seu Merchant UID.
✓ Prepare o API Key começando com mch_ nas configurações do comerciante API.
✓ Prepare um notifyUrl publicamente acessível de propriedade do comerciante; é necessário ao criar pedidos.
Node.js PHP
Step 1
Gerar cabeçalhos assinados As solicitações OpenAPI usam cinco cabeçalhos: x-api-key, x-merchant-uid, x-timestamp, x-nonce e x-signature.
Use o mesmo mch_ API Key como x-api-key e o segredo de assinatura. O caminho da assinatura deve ser apenas o caminho API, por exemplo /openapi/payin/orders, sem o domínio. A carga útil da assinatura é Merchant UID, timestamp, nonce, método, caminho, query canônico e body canônico. Exemplo mínimo de assinatura Node.js
Copiar código import crypto from 'node:crypto';
const merchantUid = '880001';
const apiKey = 'mch_xxxxxxxxxxxxxxxxxxxx';
const timestamp = String(Date.now());
const nonce = crypto.randomBytes(16).toString('hex');
const method = 'POST';
const path = '/openapi/payin/orders';
const canonicalQuery = '';
const canonicalBody = '{"amount":"100.00","chainCode":"TRON","merchantOrderNo":"M202604170001","notifyUrl":"https://merchant.example.com/api/uugate/payin-notify","tokenSymbol":"USDT"}';
const payload = [
merchantUid,
timestamp,
nonce,
method,
path,
canonicalQuery,
canonicalBody,
].join('\n');
const signature = crypto.createHmac('sha256', apiKey).update(payload).digest('hex');Step 2
Criar pedido de cobrança Depois de preparar os cabeçalhos assinados, chame a criação da ordem de pagamento API. Em caso de sucesso, use orderNo, cashierUrl e paymentUri.
Ponto final: POST /openapi/payin/orders. Use o cashierUrl retornado quando o front-end do comerciante precisar redirecionar para a finalização da compra. notifyUrl é obrigatório e passado com a solicitação de pedido. Nenhuma configuração separada de retorno de chamada de back-end é necessária. Para pagamento, altere o caminho para /openapi/payout/orders e envie os parâmetros de pagamento. Exemplo de criação de pedido em Node.js
Copiar código import { UUGateClient } from 'uugate-openapi-sdk';
const client = new UUGateClient({
baseUrl: 'https://api.uugate.com',
merchantUid: '880001',
apiKey: 'mch_xxxxxxxxxxxxxxxxxxxx',
});
const order = await client.createPayinOrder({
chainCode: 'TRON',
tokenSymbol: 'USDT',
merchantOrderNo: 'M202604170001',
amount: '100.00',
notifyUrl: 'https://merchant.example.com/api/uugate/payin-notify',
});
console.log(order.orderNo, order.cashierUrl);Step 3
Receber e processar retorno de chamada Quando a plataforma chamar seu notifyUrl, verifique-o primeiro com apiKey, atualize a ordem comercial após a verificação e, em seguida, retorne 200 ou outra resposta 2xx.
A verificação de retorno de chamada usa apiKey, não a assinatura x OpenAPI. Para pagamento, trate status=completed como o estado final de sucesso. Para pagamento, concentre-se em status=confirmed e status=failed. Exemplo de manipulador de retorno de chamada mínimo
Copiar código import express from 'express';
import { verifyCallbackSignature } from 'uugate-openapi-sdk';
const app = express();
app.use(express.json({
verify: (req, _res, buffer) => {
req.rawBody = buffer.toString('utf8');
},
}));
app.post('/merchant/callback', (req, res) => {
const valid = verifyCallbackSignature({
apiKey: process.env.UUGATE_API_KEY,
timestamp: req.header('x-callback-timestamp'),
nonce: req.header('x-callback-nonce'),
signature: req.header('x-callback-signature'),
rawBody: req.rawBody || '',
});
if (!valid) {
return res.status(401).json({ ok: false });
}
if (req.body.status === 'completed') {
//Marca o pedido do comerciante como bem-sucedido
}
return res.status(200).json({ ok: true });
});O pagamento e o pagamento compartilham o mesmo algoritmo de assinatura e cabeçalhos de retorno de chamada, portanto, você não precisa de dois fluxos de autenticação.
Quando esta página fizer sentido, continue para parâmetros detalhados, estruturas de resposta e downloads de SDK.
Início rápido Exemplo de solicitação e verificação de assinatura Callback de recebimento Node.js SDK PHP / Laravel SDK USDT USDC