Connect non-custodial wallets & generate sk_test_ API keys
Register at /merchant/register, paste your destination EVM, Solana, TRON, or multisig wallet addresses, and generate a free API Testnet key.
Stop leaving revenue inside a custodial processor account that can freeze withdrawals during sudden KYC re-reviews, and replace legacy MD5 base64 body hashes with modern header-based HMAC-SHA256 security.
Keep your existing database order schema intact — map these 6 fields to cut over cleanly.
| Integration Layer | Cryptomus (Legacy) | XPayr Non-Custodial v1 |
|---|---|---|
| Request Authentication | merchant UUID + sign: md5(base64(body) + key) |
Standard Authorization: Bearer sk_live_... |
| Create Invoice | POST https://api.cryptomus.com/v1/payment |
POST https://xpayr.com/api/v1/payments |
| Network Specification | currency: "USDT", network: "tron" |
token: "USDT", network: "tron" (or multi-chain buyer choice) |
| Webhook Integrity | Body field sign (MD5 — cryptographically deprecated) |
Header X-XPayr-Signature (Raw-body HMAC-SHA256) |
| Underpaid Orders | payment_status === "paid_over" / "wrong_amount" |
payment.underpaid_accepted (built-in 1% max $0.50 tolerance) |
| Settlement Destination | Cryptomus internal custodial wallet |
99.5% directly to your own self-custodial wallet |
sk_test_...) and Mainnet (sk_live_...).
<?php
declare(strict_types=1);
/**
* Replaces Cryptomus md5(base64_encode(json_encode($data)) . $apiKey) verification
* with clean, unmutated raw-body HMAC-SHA256 verification.
*/
$rawBody = (string) file_get_contents('php://input');
$sigHeader = preg_replace('/^sha256=/i', '', (string) ($_SERVER['HTTP_X_XPAYR_SIGNATURE'] ?? ''));
$expected = hash_hmac('sha256', $rawBody, (string) getenv('XPAYR_WEBHOOK_SECRET'));
if (!hash_equals($expected, $sigHeader)) {
http_response_code(401);
exit('Invalid signature');
}
$event = json_decode($rawBody, true, 512, JSON_THROW_ON_ERROR);
if (in_array($event['event'] ?? '', ['payment.completed', 'payment.underpaid_accepted'], true)) {
$orderId = $event['data']['order_id'] ?? '';
// Mark order paid — 99.5% is already in your wallet!
}
http_response_code(200);
echo json_encode(['ok' => true]);
Register at /merchant/register, paste your destination EVM, Solana, TRON, or multisig wallet addresses, and generate a free API Testnet key.
Add the raw-body HMAC-SHA256 verification handler alongside your existing Cryptomus callback endpoint and test events in /tools/webhook-tester.
Route a slice of live crypto orders to POST /api/v1/payments (or enable the XPayr storefront plugin) to verify instant règlement direct de 99.5% sur portefeuille.
Switch primary crypto checkout routing to XPayr, withdraw any remaining custodial float from Cryptomus, and export QuickBooks/Xero CSVs via /accounting.
Technically impossible. XPayr never holds merchant private keys or pools balances — 99.5% settles directly into your own wallet on every confirmed payment.
Yes! XPayr supports WHMCS (/plugins/whmcs), Blesta (/plugins/blesta), and Pterodactyl/Paymenter (/plugins/pterodactyl) out of the box.
Yes — XPayr supports native TON & Jetton USDT (/networks/ton, /wallets/tonkeeper) and Telegram Mini-Apps (/plugins/telegram).