Kehittäjät

Rajapinta, jonka voit lukea alusta loppuun.

Sopimus edellä laadittu OpenAPI, idempotentit kirjoitukset, allekirjoitetut webhookit ja säilyttävä käsittely Bitcartin kautta. Kaikki alla olevat esimerkit käyttävät paikkamerkkiavaimia — live-avaimet luodaan hallintapaneelissa hyväksynnän jälkeen, ja ne näytetään vain kerran.

Pikaopas

Luo ensimmäinen maksuaikomuksesi.

Jokainen esimerkki luo saman maksuaikomuksen ja ohjaa isännöityyn kassaan. Ne toimivat, kun oikeat maksut on otettu käyttöön organisaatiollesi.

curl
curl -X POST https://api.feitpay.com/v1/payment-intents \
  -H "Authorization: Bearer gp_live_YOUR_KEY" \
  -H "Idempotency-Key: order-123" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "store_YOUR_STORE_ID",
    "amount": "59.90",
    "currency": "EUR",
    "allowed_methods": ["crypto"],
    "merchant_order_id": "order-123",
    "return_url": "https://merchant.example/thank-you"
  }'
TypeScript · @gryphem-pay/sdk
import { Gryphem } from '@gryphem-pay/sdk';

const gp = new Gryphem({ apiKey: process.env.GRYPHEM_API_KEY!, baseUrl: 'https://api.feitpay.com' }); // gp_live_…

const intent = await gp.paymentIntents.create(
  {
    store_id: 'store_YOUR_STORE_ID',
    amount: '59.90',
    currency: 'EUR',
    merchant_order_id: 'order-123',
  },
  { idempotencyKey: 'order-123' },
);

redirect(intent.checkout_url);
Go · gryphem-pay-go
client, err := gryphempay.New(os.Getenv("GRYPHEM_API_KEY"), gryphempay.WithBaseURL("https://api.feitpay.com"))
if err != nil {
    return err
}
intent, err := client.PaymentIntents.Create(ctx, &gryphempay.PaymentIntentCreateParams{
    StoreID:         "store_YOUR_STORE_ID",
    Amount:          "59.90",
    Currency:        "EUR",
    MerchantOrderID: "order-123",
    IdempotencyKey:  "order-123",
})
if err != nil {
    return err
}
http.Redirect(w, r, *intent.CheckoutURL, http.StatusSeeOther)
Python · gryphem-pay-python
from gryphem_pay import Gryphem

gp = Gryphem(api_key=os.environ["GRYPHEM_API_KEY"], base_url="https://api.feitpay.com")  # gp_live_…

intent = gp.payment_intents.create(
    store_id="store_YOUR_STORE_ID",
    amount="59.90",
    currency="EUR",
    merchant_order_id="order-123",
    idempotency_key="order-123",
)
return redirect(intent["checkout_url"])

SDK:iden saatavuus ja versiot on lueteltu SDK-dokumentaatiossa. Go-moduulin polku on paikkamerkki, kunnes SDK julkaistaan.

Webhookit

Tarkista, poista kaksoiskappaleet ja toimi vasta sitten.

Allekirjoitukset ovat HMAC-SHA256-tiivisteitä aikaleiman ja raakarungon yli. Tapahtumatunnisteet pysyvät samoina uudelleenyrityksissä.

Express · @gryphem-pay/webhooks
import { verifyWebhook, WebhookVerificationError } from '@gryphem-pay/webhooks';

app.post('/webhooks/gryphem', express.raw({ type: 'application/json' }), async (req, res) => {
  try {
    const event = await verifyWebhook({
      payload: req.body, // raw Buffer — never re-serialised JSON
      header: req.get('Gryphem-Signature') ?? '',
      secrets: [process.env.GRYPHEM_WEBHOOK_SECRET!], // add the previous secret during rotation
    });
    if (await seen(event.event_id)) return res.sendStatus(200); // idempotent
    if (event.event_type === 'payment.confirmed') await markOrderPaid(event.object.id);
    res.sendStatus(200);
  } catch (err) {
    if (err instanceof WebhookVerificationError) return res.sendStatus(400);
    throw err;
  }
});

Käytännöt

Ennustettava suunnittelultaan.

Idempotenssi
Lähetä Idempotency-Key jokaisessa luontipyynnössä. Toistot palauttavat alkuperäisen vastauksen; uudelleen käytetty avain eri rungolla hylätään.
Tyypitetyt virheet
Virheissä on type, code, message, param ja request_id. Yritä uudelleen vain virheissä rate_limit_error ja api_error, ja kasvata viivettä yritysten välillä.
Kursoripohjainen sivutus
Listat hyväksyvät parametrit limit ja starting_after ja palauttavat kentät has_more ja next_cursor — vakaasti myös samanaikaisten kirjoitusten aikana.
Rahamäärät merkkijonoina
Summat ovat desimaalimerkkijonoja; kryptosummat tulevat myös kokonaislukuina perusyksiköissä. Älä koskaan jäsennä niitä liukuluvuiksi.
Pyyntötunnisteet
Jokaisessa vastauksessa on Request-Id-otsake. Mainitse se tukipyynnöissä; se johtaa pyynnön lokiin hallintapaneelissa.
Versiointi
Rajapinta on versioitu polun /v1 alle. Webhookien sisällössä on api_version, jotta vastaanottajat voivat siirtyä uuteen versioon hallitusti.

Tuotantoon

Valmiina ennen ensimmäistä maksua.

Luo tili ja lähetä yrityksesi tunnistamistiedot jo nyt. Varmista ennen ensimmäistä oikeaa maksua, että integraatiosi käsittelee jokaisen tilan: underpaid, overpaid, expired ja manual review ohjautuvat ihmiselle, ja toimitat tilauksen vain, kun maksu sen sallii.