Checkout hospedado
No checkout hospedado o cliente paga em uma página do SharkPay: você não toca em dados de pagamento. É a opção mais simples para lojas e a que reduz seu escopo de conformidade.
Fluxo
1. Seu site envia o formulário
O navegador do cliente faz POST https://sharkpay.com.br/ext_transfer com os campos abaixo (formulário comum, não JSON).
2. O cliente paga
Ele conclui o pagamento na página do SharkPay.
3. Retorno
O cliente volta para a callback_url. Isso não prova pagamento.
4. Confirmação no servidor
Seu servidor consulta GET /api/checkout/{tx_ref} e só libera o pedido com status = PAID.
Campos do formulário
| Campo | Tipo | Descrição |
|---|---|---|
| merchant_keyobrigatório | string ≤ 16 | Chave do comerciante (painel → Comerciante). |
| public_keyobrigatório | string ≤ 39 | Chave pública da conta. |
| tx_refobrigatório | string ≤ 100 | Código único do seu pedido; é a chave de consulta e não pode repetir. |
| amountobrigatório | número > 0 | Valor unitário. |
| quantityobrigatório | inteiro 1–100000 | Quantidade. |
| currencyobrigatório | string (3) | Moeda ativa da plataforma (BRL). |
| title · descriptionobrigatório | string | Título e descrição exibidos ao cliente. |
| email · first_name · last_nameobrigatório | string | Dados do pagador. |
| callback_urlobrigatório | URL http(s) ≤ 2000 | Para onde o cliente retorna. |
<form method="POST" action="https://sharkpay.com.br/ext_transfer">
<input type="hidden" name="merchant_key" value="SUA_MERCHANT_KEY">
<input type="hidden" name="public_key" value="SUA_CHAVE_PUBLICA">
<input type="hidden" name="tx_ref" value="PEDIDO-1042">
<input type="hidden" name="amount" value="49.90">
<input type="hidden" name="quantity" value="1">
<input type="hidden" name="currency" value="BRL">
<input type="hidden" name="title" value="Plano Pro">
<input type="hidden" name="description" value="Assinatura mensal">
<input type="hidden" name="email" value="cliente@exemplo.com">
<input type="hidden" name="first_name" value="Maria">
<input type="hidden" name="last_name" value="Silva">
<input type="hidden" name="callback_url" value="https://sualoja.exemplo/retorno">
<button type="submit">Pagar</button>
</form>Confirmar o pagamento
#!/usr/bin/env bash
# Confirmar pagamento do checkout hospedado
set -euo pipefail
: "${SHARKPAY_BASE_URL:?defina a URL base, ex.: https://pay.exemplo.com}"
: "${SHARKPAY_TOKEN:?obtenha o token com o exemplo "auth"}"
curl -sS --fail-with-body -X GET "$SHARKPAY_BASE_URL/api/checkout/$SHARKPAY_TX_REF" \
-H "Authorization: Bearer $SHARKPAY_TOKEN"
echo// Confirmar pagamento do checkout hospedado — Node.js 18+ (fetch nativo, sem dependências)
import { randomUUID } from 'node:crypto';
const BASE = process.env.SHARKPAY_BASE_URL;
const TOKEN = process.env.SHARKPAY_TOKEN;
const headers = { Authorization: `Bearer ${TOKEN}` };
const res = await fetch(`${BASE}/api/checkout/${process.env.SHARKPAY_TX_REF}`, {
method: 'GET',
headers,
signal: AbortSignal.timeout(30_000), // sempre defina um timeout
});
const data = await res.json().catch(() => ({}));
console.log(res.status, JSON.stringify(data, null, 2));
if (!res.ok) process.exit(1);# Confirmar pagamento do checkout hospedado — Python 3.9+ (pip install requests)
import os, sys, uuid
import requests
BASE = os.environ["SHARKPAY_BASE_URL"]
TOKEN = os.environ["SHARKPAY_TOKEN"]
headers = {"Authorization": f"Bearer {TOKEN}"}
res = requests.get(BASE + "/api/checkout/" + os.environ["SHARKPAY_TX_REF"] + "", headers=headers, timeout=30)
try:
data = res.json()
except ValueError:
data = {}
print(res.status_code, data)
sys.exit(0 if res.ok else 1)<?php
// Confirmar pagamento do checkout hospedado — PHP 8+ com ext-curl
$base = getenv("SHARKPAY_BASE_URL");
$token = getenv("SHARKPAY_TOKEN");
$ch = curl_init($base . '/api/checkout/' . getenv('SHARKPAY_TX_REF'));
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30, // sempre defina um timeout
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $token",
],
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, " ", $response, PHP_EOL;
exit($status >= 200 && $status < 300 ? 0 : 1);| status | Significa |
|---|---|
| PENDING | Cliente ainda não pagou. |
| PAID | Pago — libere o pedido. |
| ABANDONED | O cliente desistiu/abandonou. |
| UNKNOWN | Estado não reconhecido; trate como pendente e consulte depois. |