GSMTheme

Accept crypto on GSMTheme

Drop in one PHP file, paste your API key, done. Your buyers then pick whichever rail you have enabled — USDT, Binance Pay, bKash, Nagad, card — from a single gateway.

About 3 minutes from download to first payment
First, check which build you need. Open your GSMTheme admin and look for a Custom Payment Provider section.
  • • You have it → follow the steps below. One file, no installer, and GSMTheme have confirmed a custom provider is not removed by a platform update.
  • • You don't → use the installer package instead: upload ClaudePay.php, claudepay-install.php and claudepay-guard.php, visit https://your-domain.com/claudepay-install.php once, then paste your key. Keep claudepay-guard.php in place — it is what restores ClaudePay after a GSMTheme update. The walkthrough video covers this build.

Both are in your dashboard under Module Setup → GSMTheme. Neither is going away.

Silent walkthrough — every step is written out below.

    1

    Create an API key

    In your dashboard open API keys → Create new key, tick the ability payment-intents:create, and copy the cp_… token. It is shown once — paste it somewhere safe before you close the dialog. Running several stores on one account? Give each store its own key: the key is what tells us which website an order belongs to.
    2

    Upload two files

    • • ClaudePay.php → app/Services/Gateway/ClaudePay.php — GSMTheme picks the provider up from this folder.
    • • claudepay_logo.png → resource/claudepay.png — the icon on your checkout. Rename it as you upload.
    3

    Paste the key and switch it on

    Log in as admin → Payment Gateways → Claude Pay → Configure. Paste your cp_… key. Leave Claude Pay API URL blank unless you run a self-hosted tenant — blank means https://claude-pay.com. Save, then toggle the gateway Active.
    4

    Test it end to end

    As a test customer choose Add Funds → Claude Pay, pay on any rail you have enabled, and the invoice flips to Paidwith the rail's own transaction id recorded against it — even if the buyer closes the tab without coming back, because we also notify your store server-to-server, usually within a minute. Neither signal is trusted on its own: both only tell your store to go and look, and the verdict comes from an authenticated call to Claude Pay.
Payment verification is server-to-server.
Nothing the browser sends is trusted — not a status parameter, not an amount, not a transaction id, because a return URL can be opened by hand without paying. The module takes only the invoice id your store already holds and asks ClaudePay directly, with your own API key. So the three abuses are all closed: a paid intent from a different invoice (the custom id must match), one from a different merchant (an authenticated lookup returns nothing), and paying $1 against a $1000 invoice (the received amount must cover the price). Fail any of them and the invoice stays unpaid.

Ready to plug it in?

Create an account, enable the rails you want, and download the module from your dashboard.