# How to accept crypto payments on a website: 4 ways compared

> Four ways to accept crypto payments with CryptoLike: a CMS plugin, the API or an SDK with a widget, a payment link, the Хорошоп connector. Steps and comparison.

Source: https://cryptolike.net/guides/accept-crypto-payments
Published: 2026-09-24 · Updated: 2026-10-11 · Author: CryptoLike team

CryptoLike gives a website four ways to accept crypto payments: a plugin for WooCommerce, OpenCart, PrestaShop or Magento 2; the REST API or an SDK with a hosted or embedded payment page; a payment link from the cabinet or Telegram; and a connector for Хорошоп. Each ends with a confirmed payment and a status your team can act on.

## The four ways at a glance

CryptoLike puts the same payment page and the same payment statuses behind every way to accept crypto; what differs is who does the setup. A CMS plugin needs no developer, the API gives a backend team full control, a payment link needs no website, and the Хорошоп connector links a shop from the cabinet. Times assume a registered account and one test payment.

| Way | Who it is for | What you need | Time to first payment | How you learn the result |
|---|---|---|---|---|
| CMS plugin | Shops on WooCommerce, OpenCart 3/4, PrestaShop, Magento 2 | Shop admin over https, an API key, a webhook endpoint | 30–60 minutes | The order status changes by itself |
| API or SDK, hosted page or widget | Teams with their own backend: marketplaces, SaaS, apps | A server that keeps the secret, an API key, an https endpoint | About 10 minutes to a test payment, 1–3 days to launch | Signed `invoice.*` webhooks or `GET /v1/invoices/{id}` |
| Payment link | Freelancers, B2B invoices, sales in messengers | A cabinet account; optionally the Telegram bot | 5 minutes | The cabinet and a Telegram message |
| Хорошоп connector | Shops on Хорошоп | A plan with API access, a separate admin, a «Cryptocurrency» payment method | About 15 minutes | The order is marked paid; the sync log shows each step |

Downloads and details for each way are on the [integrations page](https://cryptolike.net/integrations); shop scenarios are in [crypto payments for online stores](https://cryptolike.net/use-cases/online-stores), services with their own backend in [crypto payments for digital goods and SaaS](https://cryptolike.net/use-cases/digital-goods), and balance top-ups in [deposits to static addresses](https://cryptolike.net/use-cases/deposits). Step-by-step code for your own backend: [PHP](https://cryptolike.net/guides/accept-crypto-payments-php), [Node.js](https://cryptolike.net/guides/accept-crypto-payments-nodejs) and [Python](https://cryptolike.net/guides/accept-crypto-payments-python).

## Before you start

CryptoLike needs an account in the cabinet, a list of assets you want to accept and, for a plugin or the API, a site served over https. Only payouts need a verified account (KYB); payments, payment links, plugins and the Хорошоп connector work without it, so start the verification early only if you plan to pay out. Test first with test keys (`ck_test_`) and test networks.

The assets are Bitcoin, Litecoin, Ethereum with ERC20 USDT and USDC, and TRON with TRC20 USDT. Each one's network and confirmation threshold is in `GET /v1/currencies` and on the [supported assets page](https://cryptolike.net/coins). In the cabinet's Coins section, Enabled switches an asset on for your account, and For invoices decides whether payments offer it.

## 1. Choose the way that matches how you sell

Pick the CryptoLike way by where your customers already pay. A shop on WooCommerce, OpenCart, PrestaShop or Magento 2 installs the plugin; a shop on Хорошоп connects in the cabinet; a site or app with its own backend uses the API or an SDK; a business without a website sends payment links. All of them credit the same balance.

Not sure yet? Create one payment link: in five minutes you see the payment page and the statuses your customers will see.

## 2. Create an API key in test mode

CryptoLike authenticates a plugin or your server with an API key: in the cabinet open Developers → API keys, create a key with the `create_invoice` and `read` permissions and copy the secret — it is shown once. A `ck_test_` key works with test networks through the test API URL that CryptoLike support gives you (on mainnet it gets `401 auth.test_key`); payment links and the Хорошоп connector need no key at all.

Keep the secret on the server, never in a web page or an app. Lost it? Create a new key, switch the integration to it and revoke the old one.

## 3. Connect the payment flow

CryptoLike creates a payment the same way in every flow: an amount, a currency — USD, EUR, UAH, GBP or CAD, or a coin ticker — and your order reference produce a payment with a `checkout_url`. Unless you fix the asset with `coin_id`, the payer chooses it on that page from the coins you offer for invoices, each shown with an approximate amount marked ≈; `allowed_coin_ids` or a plugin's coin list narrows the choice for one payment. The rate is locked at the choice for the payment's lifetime, and the page shows the amount, network, address, QR code and time left.

**A CMS plugin.** Upload the archive for [WooCommerce](https://cryptolike.net/integrations/woocommerce), [OpenCart](https://cryptolike.net/integrations/opencart), [PrestaShop](https://cryptolike.net/integrations/prestashop) or [Magento 2](https://cryptolike.net/integrations/magento) in the shop's admin panel, paste the key ID and secret and press «Check connection». Add the plugin's webhook URL as an endpoint in Developers → Webhooks with every `invoice.*` event and paste the endpoint secret back: the plugin sends `webhook_url` with every payment, so without an enabled endpoint no payment can be created. A double click or a reload returns the order's open payment instead of a second one.

**The API or an SDK.** Your server calls `POST /v1/invoices` and sends the customer to `checkout_url`, or keeps them on your page with the [checkout widget](https://cryptolike.net/docs/widget). The [SDKs](https://cryptolike.net/docs/sdk) for TypeScript, Python, Go and PHP sign requests and add an `Idempotency-Key`; they are pre-release and install from the repository.

```ts
const invoice = await api.invoices.create(
  { amount: "10.50", currency: "USD", order_id: "A-1001" },
  "order-A-1001", // Idempotency-Key: a retry returns the same payment
);
// redirect the customer to invoice.checkout_url
```

**A payment link.** In the cabinet open Invoices → Create invoice, enter the amount, the currency and a description, then copy the link or send it to a messenger. In the Telegram bot the `/invoice` command does the same. See [payment links](https://cryptolike.net/use-cases/payment-links).

**The Хорошоп connector.** Хорошоп takes no third-party payment plugins, so CryptoLike connects through its API: create a separate admin in Хорошоп, add a «Cryptocurrency» payment method of the simple type, then open Integrations → [Хорошоп](https://cryptolike.net/integrations/horoshop) in the cabinet and press «Check». The customer gets the payment link by e-mail within about a minute of the order.

## 4. Learn the result from a signed webhook

CryptoLike reports the result with a [webhook](https://cryptolike.net/glossary/webhook) signed with HMAC-SHA256: `invoice.paid` means the funds are confirmed and credited to your balance. Your endpoint answers 2xx within 10 seconds; a failed delivery is retried after 1 min, 5 min, 15 min, 1 h, 6 h and 24 h with the same `event_id`, so process each event once.

Plugins and the Хорошоп connector apply these events for you. With the API, check the [webhook signature](https://cryptolike.net/glossary/webhook-signature) over the raw body — see [verify crypto payment webhooks](https://cryptolike.net/guides/verify-crypto-payment-webhooks) — and ship on `paid`; other states are in the [status model](https://cryptolike.net/docs#status-model). Your handler rejects real deliveries? It probably holds the wrong endpoint secret. The secret is shown only once, so rotate it in Developers → Webhooks and deploy the new value.

## 5. Make a test payment and go live

CryptoLike test payments run on test networks: test coins have no value, and CryptoLike support can send you some; send the exact amount to the address on the payment page and watch the status move from `pending` to `paid`. Then switch the plugin or your server to a live key and remove test keys and the test base URL from the production configuration. The full rehearsal, status by status: [how to test crypto payments](https://cryptolike.net/guides/test-crypto-payments).

Underpay once on purpose by more than 0.5 % to see `underpaid`, and let one payment run out to see `expired`. A store on a CMS can follow the full [launch checklist for online stores](https://cryptolike.net/blog/ecommerce-crypto-checklist). Хорошоп has no sandbox: order a cheap hidden test product and pay the small amount.

## Errors and what to do

CryptoLike answers every API error in one envelope: an HTTP status, a machine-readable `code`, a `message` for people and `details` that name the problem. Branch on `code` and fix what `details.field` or `details.reason` points to. These are the errors a new integration meets most often; the full list is in the [API reference](https://cryptolike.net/docs/api).

| HTTP · code | What happened | What to do |
|---|---|---|
| `400 validation_error`, field `currency` | The order's currency is not enabled for your account | Price the order in a code from `GET /v1/fiat-currencies` (by default USD, EUR, UAH, GBP, CAD) or in crypto |
| `401 auth.invalid_signature` | The request signature does not match | Check the signing against the reference vector in [API authentication](https://cryptolike.net/docs/auth) |
| `403 auth.permission_denied` | The key lacks a permission (`details.required`) | Create a key with `create_invoice` and `read` |
| `409 conflict`, `order_invoice_mismatch` | The order was edited after its payment was created | Cancel the open payment (`details.invoice_id`) while it is `new` and create a new one |
| `409 conflict`, `order_has_payment` | The order already received funds | Do not create another payment; resolve the order by hand |
| `422 no_allowed_coins` | None of the coins in `allowed_coin_ids` (or in the plugin's coin list) is offered for invoices in this currency | Pick other coins, or turn For invoices on for one of them in the cabinet's Coins section |
| `429 rate_limited` | Too many requests for this key (600/min by default) | Wait `Retry-After` seconds |
| `503 unavailable` | The rate feed or the asset is temporarily unavailable | Retry with backoff, or create the payment in crypto |

## FAQ

### Can I accept crypto payments without a website?

Yes. A CryptoLike payment link needs no website and no code: create a payment in the cabinet or with `/invoice` in the Telegram bot and send the link. The customer gets the same payment page online shops use, and you see the status in the cabinet or in a Telegram message.

### Which way is the quickest to launch?

A payment link takes about 5 minutes, the Хорошоп connector about 15, a CMS plugin 30–60 minutes and an API integration 1–3 days, with a test payment first. A first test payment through the API takes about 10 minutes.

### How much does it cost?

CryptoLike charges a platform fee per asset only when a payment is confirmed and credited; creating a payment costs nothing. The current schedule is on the [pricing page](https://cryptolike.net/pricing).
