Conecte um gateway de pagamento personalizado
O provedor de checkout “Outro” permite que sua loja receba pagamentos pelo seu próprio gateway de pagamento. Na Configuração da Loja, você fornece duas coisas ao MallBasket: um endpoint de URL de pagamento (seu servidor) e um segredo compartilhado. O MallBasket envia uma requisição assinada ao seu endpoint para obter um link de pagamento, e seu gateway envia um webhook assinado de volta ao MallBasket quando o pagamento é concluído. Esta é uma integração para desenvolvedores.
Configure no app
Em Configuração da Loja → Pagamentos Online (Ativado) → Avançado → Provedor de Checkout, escolha “Outro” e informe seu endpoint de URL de pagamento e seu segredo compartilhado (usado para assinar cada mensagem nos dois sentidos). Mantenha o segredo em sigilo: qualquer pessoa que o tenha pode autorizar pedidos.
1. O MallBasket solicita uma URL de pagamento a você
Quando um comprador finaliza a compra, o MallBasket envia um POST assinado ao seu endpoint. Verifique a assinatura, crie do seu lado uma sessão de pagamento com exatamente este valor e esta moeda e retorne a URL dela.
{
"orderId": "6f2a…", // your MallBasket order id
"transactionId": "o_6f2a…", // echo this back in the webhook
"storeId": "store_abc",
"userId": "user_123",
"amount": "12.50", // decimal string, charge exactly this
"currency": "USD",
"email": "buyer@example.com",
"webhookUrl": "https://europe-west3-mallbasket.cloudfunctions.net/otherWebhook",
"successUrl": "https://www.mallbasket.com/en/payment/complete?orderId=6f2a…&status=success",
"cancelUrl": "https://www.mallbasket.com/en/payment/complete?orderId=6f2a…&status=cancelled",
"nonce": "b1d9…",
"metadata": { "itemId": "item_1" }
}x-mb-signature: <hex hmac-sha256 of the raw body with your secret>Retorne a URL da página de pagamento hospedada. O MallBasket a abre para o comprador. (data.paymentURL e url também são aceitos.)
{
"paymentURL": "https://your-gateway.example.com/pay/abc123"
}2. Seu gateway notifica o MallBasket (webhook)
Depois que o comprador pagar, envie por POST uma mensagem assinada para o webhookUrl que enviamos a você. O MallBasket verifica a assinatura, confirma que o valor corresponde ao pedido e marca o pedido como pago. Envie o status “success” somente depois que o pagamento tiver sido realmente liquidado.
{
"orderId": "6f2a…", // same order id
"transactionId": "o_6f2a…", // the transactionId we sent you
"status": "success", // only send this once payment truly succeeded
"amount": "12.50", // must equal the amount we sent
"currency": "USD",
"reference": "your-gateway-txn-id" // optional, shown on the receipt
}x-mb-signature: <hex hmac-sha256 of the raw body with your secret>3. Assinatura (nos dois sentidos)
Toda requisição traz um cabeçalho x-mb-signature: o HMAC-SHA256 em hexadecimal do corpo BRUTO da requisição, calculado com seu segredo compartilhado. Calcule-o sobre os bytes exatos enviados e verifique as requisições recebidas sobre os bytes brutos que chegam (não sobre um objeto reserializado).
// Node.js: sign the EXACT raw body bytes you are about to send
const crypto = require("crypto");
const rawBody = JSON.stringify(payload); // the bytes you POST
const signature = crypto
.createHmac("sha256", MALLBASKET_SECRET) // your restricted key
.update(rawBody, "utf8")
.digest("hex");
// send header: x-mb-signature: <signature>// Node.js: verify a request MallBasket sent to your endpoint
const crypto = require("crypto");
function verify(rawBody, headerSig, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody, "utf8") // RAW bytes, not re-parsed JSON
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected), Buffer.from(headerSig || "")
);
}Regras e garantias
- Os valores devem coincidir: o valor do webhook deve ser igual ao valor enviado pelo MallBasket, na mesma moeda, ou será rejeitado.
- Devolva o transactionId exatamente como recebido. É por ele que o MallBasket associa o pagamento ao pedido.
- O MallBasket autentica seu webhook apenas com o segredo da sua loja; outra loja não consegue concluir seus pedidos.
- A finalização é idempotente: é seguro reenviar o webhook. O MallBasket retorna 2xx assim que o pedido é registrado; tente novamente em qualquer resposta que não seja 2xx.
- Nunca envie o status “success” antes de o dinheiro ter sido realmente capturado.