Korzystaj bez przycisku kupna
Przycisk kupna to warstwa wygody. Pod spodem Coin Moebius to wynajęty webhook plus kilka endpointów JSON. Jeśli wolisz zbudować własny interfejs, prowadzić własny przebieg checkoutu lub podłączyć Coin Moebius do czegoś, czego przycisk nie obsłuży (subskrypcje Square lub Authorize.Net, własny formularz płatności, skrypt po stronie serwera, aplikacja mobilna), każdy endpoint, którego używa przycisk, można też wywołać z czegokolwiek. Bez zmian w kodzie po naszej stronie.
Uwierzytelnianie wywołań z zaplecza
Wywołania, które wykonujesz z własnego serwera, mogą nieść API key Twojego projektu jako token bearer. Utwórz klucz w panelu, w kluczach API Twojego projektu (zaczyna się od cmk_), i wyślij go w nagłówku Authorization:
Authorization: Bearer cmk_live_xxxxxxxxxxxxxxxxxxxxxxxxKlucz jest powiązany z jednym projektem, a uwierzytelnione wywołania mają wyższy limit żądań niż anonimowe. Sam przycisk kupna jest publiczny i nie potrzebuje klucza. Trzymaj klucz na swoim serwerze. Nigdy nie umieszczaj go w przeglądarce ani innym kodzie po stronie klienta.
Wszystkie te endpointy żyją pod adresem URL Twojego projektu. W produkcji ta baza to https://api.coinmoebius.com. Pełny adres URL każdego z nich pokazano poniżej (zastąp części {…} własnymi wartościami).
| Endpoint | Do czego służy |
|---|---|
POST https://api.coinmoebius.com/api/checkout/{provider}/{projectId} | Rozpocznij checkout. POST { productId, metadata }; otrzymaj z powrotem to, czego potrzebuje dostawca (adres URL przekierowania dla Stripe, adres URL zatwierdzenia dla PayPal, token dla Authorize.Net Accept Hosted). Wyrenderuj to, jak chcesz. |
POST https://api.coinmoebius.com/webhook/{provider}/{projectId} | Dostawca wysyła tutaj. Weryfikujemy podpis, normalizujemy zdarzenie, zapisujemy je, zliczamy limit. Skieruj webhook dostawcy na ten URL niezależnie od tego, czy pierwotny checkout pochodził z naszego przycisku, czy z Twojej własnej integracji. |
GET https://api.coinmoebius.com/status/{projectId}/{txId} | Odpytuj o bieżący stan płatności lub subskrypcji. Zwraca ten sam znormalizowany kształt, który dostaje przycisk kupna. |
POST https://api.coinmoebius.com/api/subscriptions/{projectId}/{subscriptionId}/portal-url | Wygeneruj adres URL hostowanego przez dostawcę portalu, by kupujący zarządzał swoją subskrypcją. Działa dla każdego dostawcy, który ma portal. |
Identyfikuj kupującego w swoim własnym systemie, przekazując metadata.customerRef przy wywołaniu checkoutu. Przesyła się przez dostawcę i z powrotem przy każdym zdarzeniu webhooka, więc możesz połączyć rekordy Coin Moebius z własną bazą danych użytkowników, a my nie przechowujemy niczego o kupującym.
Dlaczego ktoś korzysta z tej ścieżki: twórca strony statycznej, który chce napisać własny przycisk, by pasował do projektu jego witryny, i potrzebuje jedynie obsłużonego webhooka. Programista, który chce całkowicie pominąć przycisk i wywoływać API z własnego serwera. Sprzedawca, który chce prowadzić subskrypcje Square lub Authorize.Net i nie ma nic przeciwko samodzielnemu podłączeniu zbierania karty. Przycisk to punkt wyjścia. Produktem jest API.
Nasłuchiwanie zdarzeń kupującego
Element uruchamia trzy zdarzenia przeglądarki. Nasłuchuj za pomocą addEventListener na elemencie (lub na document, zdarzenia się propagują). Wszystkie zdarzenia są anulowalne, wywołanie event.preventDefault() zatrzymuje przebieg domyślny.
| Zdarzenie | Kiedy się uruchamia | Ładunek detail |
|---|---|---|
cm-load-providers | Okno selektora ma zaraz zapytać API o listę dostawców skonfigurowanych w tym projekcie. | Pusty. |
cm-checkout-started | Kupujący wybrał dostawcę, a Coin Moebius ma zaraz utworzyć sesję checkoutu (Stripe / NOWPayments) lub wygenerować kod referencyjny (manual). | { provider: 'stripe' | 'nowpayments' | 'manual', ... } |
cm-error | Coś zawiodło: błąd sieci, błąd podpisu, brak skonfigurowanego dostawcy. | { error: Error } |
document.addEventListener('cm-error', (event) => {
console.error('Coin Moebius:', event.detail.error);
// Show your own error UI, send to your analytics, etc.
});Nie ma zdarzenia cm-success w przeglądarce kupującego. Zanim płatność faktycznie się zakończy, kupujący zostaje przekierowany do hostowanego checkoutu dostawcy płatności (Stripe Checkout, strona faktury NOWPayments). Wraca na Twoją stronę przez skonfigurowany przez Ciebie success_url (zobacz następną sekcję), a Twój serwer dowiaduje się o płatności z panelu lub przez odpytywanie endpointu /status.
Odpytywanie z Twojego zaplecza
Dla źródła prawdy po stronie serwera odpytuj GET /status/:projectId/:txId ze swojego zaplecza. Kształt odpowiedzi:
{
"status": "succeeded",
"amount": 29.99,
"currency": "USD",
"isTest": false,
"createdAt": "2026-05-14T01:04:21.000Z",
"updatedAt": "2026-05-14T01:04:21.000Z"
}Wartości statusu są zgodne z tym samym enumem co panel (zobacz Statusy transakcji). Endpoint jest nieuwierzytelniony, ale ograniczony do 60 żądań / minutę na IP. Identyfikator transakcji, który przekazujesz, to to, co SDK zwróciło w zdarzeniu cm-checkout-started, lub to, co pokazane jest w kolumnie Reference w panelu.
Typowy wzorzec: gdy ładuje się Twoja strona success_url, uruchom zadanie na zapleczu, które odpytuje /status/:projectId/:txId co 15 sekund, dopóki nie zobaczy succeeded (lub failed / przekroczenia czasu), a następnie zrealizuj zamówienie.