구매 버튼 없이 사용하기
구매 버튼은 편의 계층입니다. 그 밑에서 Coin Moebius는 임대한 웹훅과 몇 개의 JSON 엔드포인트입니다. 직접 UI를 만들거나, 자체 결제 흐름을 실행하거나, 버튼이 다룰 수 없는 것(Square 또는 Authorize.Net 구독, 맞춤 결제 양식, 서버 측 스크립트, 모바일 앱)에 Coin Moebius를 연결하고 싶다면, 버튼이 쓰는 모든 엔드포인트를 무엇에서든 호출할 수 있습니다. 저희 쪽 코드 변경은 없습니다.
백엔드 호출 인증하기
당신의 서버에서 하는 호출은 프로젝트의 API 키를 베어러 토큰으로 실어 보낼 수 있습니다. 대시보드에서 프로젝트의 API 키 아래에 키를 만들고(cmk_로 시작), Authorization 헤더에 보내세요:
Authorization: Bearer cmk_live_xxxxxxxxxxxxxxxxxxxxxxxx키는 하나의 프로젝트에 묶여 있고, 인증된 호출은 익명 호출보다 높은 속도 제한을 받습니다. 구매 버튼 자체는 공개이며 키가 필요 없습니다. 키는 당신의 서버에 두세요. 브라우저나 다른 클라이언트 측 코드에 절대 넣지 마세요.
이 엔드포인트들은 모두 당신의 프로젝트 URL 아래에 있습니다. 프로덕션에서 그 베이스는 https://api.coinmoebius.com입니다. 각각의 전체 URL은 아래에 있습니다({…} 부분을 당신의 값으로 바꾸세요).
| 엔드포인트 | 하는 일 |
|---|---|
POST https://api.coinmoebius.com/api/checkout/{provider}/{projectId} | 결제를 시작합니다. { productId, metadata }를 POST하면, 제공업체가 필요로 하는 것을 돌려받습니다(Stripe는 리다이렉트 URL, PayPal은 승인 URL, Authorize.Net Accept Hosted는 토큰). 원하는 대로 렌더링하세요. |
POST https://api.coinmoebius.com/webhook/{provider}/{projectId} | 제공업체가 여기로 POST합니다. 저희가 서명을 검증하고, 이벤트를 정규화하고, 저장하고, 사용량을 셉니다. 원래 결제가 저희 버튼에서 왔든 당신의 자체 연동에서 왔든, 제공업체의 웹훅을 이 URL로 향하게 하세요. |
GET https://api.coinmoebius.com/status/{projectId}/{txId} | 결제나 구독의 현재 상태를 폴링합니다. 구매 버튼이 받는 것과 같은 정규화된 형태를 반환합니다. |
POST https://api.coinmoebius.com/api/subscriptions/{projectId}/{subscriptionId}/portal-url | 구매자가 구독을 관리할 수 있도록 제공업체 호스팅 포털 URL을 생성합니다. 포털이 있는 어떤 제공업체에서든 작동합니다. |
결제 호출에서 metadata.customerRef를 전달해 당신만의 시스템에서 구매자를 식별하세요. 그것이 제공업체로 갔다가 모든 웹훅 이벤트에서 되돌아오므로, 저희가 구매자에 대해 아무것도 저장하지 않고도 Coin Moebius의 기록을 당신만의 사용자 데이터베이스에 결합할 수 있습니다.
누군가 이 경로를 쓰는 이유: 사이트 디자인에 맞춰 자기 버튼을 만들고 웹훅만 처리되면 되는 정적 사이트 빌더. 버튼을 완전히 건너뛰고 자기 서버에서 API를 호출하려는 개발자. Square나 Authorize.Net 구독을 운영하고 싶고 카드 수집을 직접 연결해도 괜찮은 판매자. 버튼은 출발점입니다. API가 실제 제품입니다.
구매자 이벤트 수신
요소는 세 가지 브라우저 이벤트를 발생시킵니다. 요소(또는 이벤트가 버블링되므로 document)에서 addEventListener로 수신하세요. 모든 이벤트는 취소 가능하며, event.preventDefault()를 호출하면 기본 흐름이 멈춥니다.
| 이벤트 | 발생 시점 | Detail 페이로드 |
|---|---|---|
cm-load-providers | 선택 모달이 이 프로젝트에 구성된 제공업체 목록을 API에 막 요청하려고 합니다. | 비어 있음. |
cm-checkout-started | 구매자가 제공업체를 골랐고 Coin Moebius가 결제 세션(Stripe / NOWPayments)을 막 만들거나 참조 코드(manual)를 막 생성하려고 합니다. | { provider: 'stripe' | 'nowpayments' | 'manual', ... } |
cm-error | 무언가 실패: 네트워크 오류, 서명 실패, 구성된 제공업체 없음. | { error: Error } |
document.addEventListener('cm-error', (event) => {
console.error('Coin Moebius:', event.detail.error);
// Show your own error UI, send to your analytics, etc.
});구매자의 브라우저에는 cm-success 이벤트가 없습니다. 결제가 실제로 완료될 무렵, 구매자는 결제 제공업체의 호스팅 결제(Stripe Checkout, NOWPayments 청구서 페이지)로 리다이렉트되어 있습니다. 그들은 당신이 구성한 success_url을 통해 사이트로 돌아오고(다음 섹션 참고), 당신의 서버는 대시보드 또는 /status 엔드포인트 폴링을 통해 결제를 알게 됩니다.
백엔드에서 폴링하기
서버 측 진실의 원천을 위해, 백엔드에서 GET /status/:projectId/:txId를 폴링하세요. 응답 형태:
{
"status": "succeeded",
"amount": 29.99,
"currency": "USD",
"isTest": false,
"createdAt": "2026-05-14T01:04:21.000Z",
"updatedAt": "2026-05-14T01:04:21.000Z"
}상태 값은 대시보드와 같은 enum을 따릅니다(거래 상태 참고). 엔드포인트는 인증되지 않지만 IP당 분당 60건으로 속도가 제한됩니다. 전달하는 거래 id는 SDK가 cm-checkout-started 이벤트에서 반환한 것이거나 대시보드의 참조 열에 표시되는 것입니다.
전형적인 패턴: success_url 페이지가 로드되면, /status/:projectId/:txId를 15초마다 폴링하는 백엔드 작업을 시작해 succeeded(또는 failed / 타임아웃)를 볼 때까지 돌린 뒤, 주문을 이행하세요.