Before you start
You need an approved reseller account. If you do not have one, apply to become a reseller.
Create a key on the API page of the reseller panel. It is required to download a module.
Orders are paid from your balance. When your customer pays, the order is placed automatically; if the balance is insufficient, no order is created.
| Платформа | Требования |
|---|---|
| WHMCS | WHMCS 7.x, 8.x or 9.x · PHP 7.2+ (PHP 8 supported) · cURL and JSON extensions |
| WiseCP | Current WiseCP · PHP cURL extension |
| WordPress | WordPress 5.8+ · WooCommerce · PHP 7.3+ |
Which module?
| WHMCS | WiseCP | WooCommerce | |
|---|---|---|---|
| Automatic product import | ✓ | Price calculator | ✓ |
| Margin percentage | ✓ | ✓ | ✓ |
| 1 / 2 / 3 year prices | ✓ | ✓ | ✓ |
| Automatic order after payment | ✓ | ✓ | ✓ |
| CSR, validation and download in the client area | ✓ | ✓ | ✓ |
| Cancel and reissue | ✓ | ✓ | ✓ |
Step-by-step setup
- Download. Sign in with your reseller account and download the WHMCS module.
- Upload. Extract the zip in the WHMCS root. This creates
modules/servers/datassl(provisioning module) andmodules/addons/datassl(admin addon). - Activate. In WHMCS › System Settings › Addon Modules, activate DATASSL and give your admin role access.
- Import products. In Addons › DATASSL › Product Creator, select products, enter your margin and import. Prices are converted to your WHMCS currencies using the USD rate.
- Add the cron (recommended). Order statuses and certificates are synced regularly:
0 */6 * * * php /home/user/public_html/whmcs/modules/addons/datassl/cron.php
- Download. Download the WiseCP module.
- Upload. Extract the zip in the WiseCP root; files go to
coremio/modules/Product/DATASSL. - Check the settings. Admin › Product Modules › DATASSL. The API URL and key come embedded; verify with "Test connection".
- Calculate prices. In the Price Calculator on the same page, enter your margin and exchange rate; the 1/2/3-year selling price of each product is calculated.
- Create products. Create an SSL product in WiseCP, choose DATASSL as the module and the DATASSL product to link, and enter the calculated prices.
- Download. Download the WordPress plugin.
- Upload. WordPress › Plugins › Add New › Upload Plugin, upload the zip and activate it. WooCommerce must be installed.
- Check the connection. Under DATASSL › Settings the API URL and key come embedded; verify with "Test connection".
- Import products. In DATASSL › Import Products, set your margin, the value of 1 USD and rounding; select products and import. Products are published in your store with a 1/2/3-year period selector.
- Keep prices current. When the exchange rate or reseller prices change, click "Update imported prices"; your descriptions and images are kept.
Prices and margin
Modules use your reseller price from the API (USD, excluding VAT). Selling price = reseller price × (1 + margin) × exchange rate. 2- and 3-year prices are calculated from the real multi-year reseller price in the API.
| Example | 1 year | 2 лет | 3 лет |
|---|---|---|---|
| Your reseller price (USD) | 10.00 | 18.00 | 25.00 |
| With a 30% margin (USD) | 13.00 | 23.40 | 32.50 |
- Certum products are sold for 1 year only; the modules offer only 1 year for them.
- At order time your balance is charged the reseller price at that moment. Reseller prices can change, so update your prices regularly.
Code signing differences
Code signing certificates are configured differently from SSL. The modules apply the difference automatically:
| SSL | Подпись кода | |
|---|---|---|
| Домен | Обязательно | Нет |
| CSR | Обязательно | None (for cloud products the key is in the CA's HSM) |
| Проверка | Domain (email, HTTP, DNS) | Company validation |
| Asked at checkout | Domain, validation method | Company name and contact details |
Updating
Download the new version from the same link and upload it over the existing files. Your settings and imported products are kept. Follow API changes in the "Changelog" section of the API documentation.
| Module | Current version |
|---|---|
| WHMCS | 5.11.0 |
| WiseCP | 2.3.0 |
| WordPress / WooCommerce | 6.4.0 |
Устранение неполадок
| Symptom | Fix |
|---|---|
| Product list is empty | Check that the API key is active and your account is assigned to a reseller group. |
| Order not created, "Insufficient balance" | Top up your balance in the reseller panel, then resend the order. |
| 401 error | If the key was regenerated, download the module again or enter the new key in the settings. |
| Server cannot connect | Check that your server can make outbound connections on port 443 and that the cURL extension is enabled. |
Error codes
Modules show errors as [CODE] message (ref: …): in WHMCS on the service page and in Utilities → Logs → Module Log, in WiseCP on the order detail, in WooCommerce in the order notes. Find the code in the table below; if it is not solved, open a support ticket with the ref value.
| Код | Meaning and fix |
|---|---|
AUTH_MISSING HTTP 401 | API key missing Send the X-API-Key header or Authorization: Bearer <key>. In the module, check that the API key field is filled in. |
AUTH_INVALID HTTP 401 | Недействительный API-ключ или доступ к API отключён Copy the key again from the reseller panel (Account → API) with no leading/trailing spaces. If you regenerated the key, update it in the module too. If API access is disabled, contact us. |
RESTRICTED_REGION HTTP 403 | Certificates are not issued for this country or domain Certificate authorities do not issue certificates for Russia, Belarus, Iran, Cuba, North Korea, Syria or Venezuela, or for those countries' domain extensions. Use a different domain. |
RESELLER_GROUP_MISSING HTTP 403 | No reseller group assigned Your account has no reseller group, so you cannot buy products. Contact us to have a group assigned. |
ENDPOINT_NOT_FOUND HTTP 404 | Unknown endpoint Check the path and method (GET/POST). Send GET /api/reseller for the endpoint list. Update the module if it is an old version. |
METHOD_NOT_ALLOWED HTTP 405 | Method not allowed Use the method shown in the docs for this endpoint (e.g. POST /orders to create an order). |
MISSING_FIELD HTTP 400 | Required field missing Send the field named in the error message (product_id, domain, order_id, csr, contact_email…). For a JSON body, use the Content-Type: application/json header. |
VALIDATION_ERROR HTTP 422 | Invalid value Fix the value of the field in the message to match the format in the docs. |
INVALID_ACTION HTTP 400 | Invalid action Send a supported action (e.g. action: cancel). |
PRODUCT_NOT_FOUND HTTP 404 | Продукт не найден The product is disabled or not in your reseller group. Get the current list with GET /products; run "Refresh / import products" in the module. |
ORDER_NOT_FOUND HTTP 404 | Заказ не найден The order id is wrong or belongs to another account. Check the order id stored on the service in the module. |
INVOICE_NOT_FOUND HTTP 404 | Счёт не найден Check the invoice id in the GET /invoices list. |
ORDER_STATE_INVALID HTTP 409 | Order is not in a valid state for this action Check the order status with GET /orders/{id}. Cancel works only on pending orders; reissue only on active certificates. |
ALREADY_CONFIGURED HTTP 409 | Order already configured A CSR was already submitted for this order. Track it with GET /orders/{id}; use reissue to change it. |
ALREADY_PAID HTTP 409 | Order already paid No further action is needed. |
USB_TOKEN_NOT_OFFERED HTTP 400 | USB token not offered for this product Send usb_token only for code signing products whose usb_token_price is set. Do not send it for cloud products. |
CERTIFICATE_NOT_READY HTTP 404 | Certificate not ready yet The certificate can be downloaded once validation is complete. Track it with GET /orders/{id} and make sure the DCV step is done. |
NOT_SUPPORTED HTTP 501 | Action not supported Create a new order to renew (POST /orders). For actions not supported for this product, open a support ticket. |
INSUFFICIENT_BALANCE HTTP 402 | Insufficient balance Top up your balance in the reseller panel (Account → Add funds), then retry. The module does not retry automatically. |
CREDIT_LIMIT_EXCEEDED HTTP 402 | Credit limit exceeded Pay your open invoices or contact us to raise your credit limit. |
PAYMENT_REQUIRED HTTP 402 | Payment required first Pay the order first (POST /payments or the reseller panel), then configure it. |
PAYMENT_FAILED HTTP 500 | Payment could not be processed Retry in a few minutes; if it persists, contact us with the request_id. |
CSR_INVALID HTTP 400 | Invalid CSR The CSR must start with "-----BEGIN CERTIFICATE REQUEST-----" and be copied completely. Use at least a 2048-bit RSA or an ECC key; the CN must match the domain. You can check it with POST /csr/decode. |
DCV_METHOD_INVALID HTTP 400 | Invalid DCV method Valid methods: email, http, https, dns. For email, send approver_email. |
CODESIGN_ORDER_NOT_FOUND HTTP 404 | Code signing order not found Document upload is only for code signing orders; check the order id. |
DOCUMENT_INVALID HTTP 422 | Document rejected Send PDF, JPG or PNG, max 10 MB. content_base64 must be valid base64. |
SUBSCRIPTION_ERROR HTTP 422 | Subscription request failed Fix the reason in the message (e.g. contact_email). If the subscription is not found, check the order id. |
PROVIDER_ERROR HTTP 502 | The certificate authority rejected the request Check the reason in the message (e.g. domain, CSR, organization details). Fix and retry; if it persists, contact us with the request_id. |
INTERNAL_ERROR HTTP 500 | Ошибка сервера Retry in a few minutes. If it persists, open a support ticket with the request_id so we can trace it. |
Connection errors (before reaching the API)
| Сообщение | Meaning and fix |
|---|---|
cURL 6 / 7 / 28 | Your server cannot reach the API (DNS, firewall or timeout). Check that the API URL is https://www.datassl.com/api/reseller. Outbound port 443 must be open; ask your host to confirm curl access. |
cURL 35 / 60 | SSL/TLS handshake or CA bundle error. Update the CA bundle (ca-certificates) and OpenSSL on your server; check curl.cainfo in PHP. |
Invalid JSON response | Something other than the API answered (wrong URL, proxy or firewall). Check that the API URL ends in /api/reseller and uses https, not http. |
HTTP 429 | Too many requests. Increase the sync (cron) interval; do not run several crons at once. |
FAQ
Can I move my API key to another site?
Yes, but use the key only on servers you trust. If in doubt, regenerate it in the panel and download the module again.
Who sets the selling price?
You do. The modules add the margin you enter on top of your reseller price.
I have my own software, no module.
You can integrate directly using the example in the "Sell on your site" section of the API documentation.