Integrations
ProEcommerce connects to the tools you already use — payments, DNS, email, and servers — using your credentials, your accounts, your infrastructure. Nothing routes through us.
Stripe Connect
Stripe is the primary payment gateway. ProEcommerce uses Stripe Connect Standard, which means:
- Funds settle directly to your Stripe account, then your bank
- You keep full control of your Stripe dashboard
- We never see card numbers (tokenization happens in the browser)
- You pay Stripe's standard processing rate, not a markup
Connecting your Stripe account
- Settings → Payment Gateways → Connect Stripe
- You're redirected to Stripe's OAuth flow
- Log in or sign up, verify your business details
- Stripe redirects back with an authorization code; we exchange it for a connected-account ID
Webhook configuration
Stripe sends events to https://yourtenant.proecommerce.com/stripe-webhook.php.
The webhook endpoint is configured automatically when you connect, using a
signing secret we generate and store encrypted. Events handled:
payment_intent.succeeded— marks invoice paid, activates servicepayment_intent.payment_failed— logs the failure, triggers retry logiccharge.refunded— updates invoice statuscharge.dispute.created— flags for tenant review, pauses auto-actionscustomer.subscription.*— syncs Stripe-native subscriptions
cPanel / WHM
Integration is via WHM API 1 with API-token authentication (not root password). See Provisioning for the full account lifecycle.
Generating an API token on your WHM server
WHM > Development > Manage API Tokens > Generate Token
Name: proecommerce-provisioner
Privilege: ACL "root" (or create a limited ACL with
create-acct, suspend-acct, remove-acct, changepackage)
Paste the token into the server record in ProEcommerce. We verify the connection immediately and flag any issues.
Required firewall rules
Port 2087 (WHM) must be reachable from the ProEcommerce application server's outbound IP. We'll give you the specific IP to whitelist when you provision your tenant.
AWS Route53 Domains
Route53 Domains is our default registrar. Registrations happen on your AWS account — we never touch the money flow.
IAM setup
Create an IAM user dedicated to ProEcommerce:
IAM > Users > Create user
Name: proecommerce-registrar
Access type: Programmatic access
Policy: AmazonRoute53DomainsFullAccess + AmazonRoute53FullAccess
Save the access key and secret, then paste them into Settings → Registrars → Route53 in your tenant. They're encrypted at rest just like cPanel tokens.
DNS hosted zones
When you register a domain through Route53 Domains, a hosted zone is
created automatically. ProEcommerce manages record sets via
ChangeResourceRecordSets — the same API Route53's console uses.
MXRoute SMTP
MXRoute is our default outbound SMTP provider. Alternatives include SendGrid, Postmark, AWS SES, and any standard SMTP server.
MXRoute configuration
Settings > Email > SMTP
Host: heracles.mxrouting.net
Port: 587
Encryption: STARTTLS
Username: billing@yourdomain.com
Password: <from MXRoute control panel>
From: billing@yourdomain.com
From name: <Your Company>
SPF / DKIM / DMARC
For deliverability, add these DNS records:
@ TXT "v=spf1 include:mxlogin.com ~all"
mail._domainkey TXT "<DKIM value from MXRoute>"
_dmarc TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com"
Outbound webhooks
ProEcommerce can send webhook notifications to your own endpoints when significant events occur. Useful for syncing to CRM, Slack, or custom pipelines.
Available events
client.created,client.updated,client.deletedinvoice.created,invoice.paid,invoice.refunded,invoice.overdueservice.activated,service.suspended,service.terminateddomain.registered,domain.transferred,domain.renewed,domain.expiredticket.opened,ticket.replied,ticket.closed
Payload format
All webhooks POST JSON with these top-level fields:
{
"id": "evt_01HX4R...",
"event": "invoice.paid",
"created_at": "2026-04-18T14:22:11Z",
"tenant_id": 42,
"data": { ... event-specific payload ... }
}
Signature verification
Each webhook includes an X-PROE-Signature header. Compute
HMAC-SHA256 of the raw body using your webhook secret and compare with a
constant-time check.
$expected = hash_hmac('sha256', $rawBody, $webhookSecret);
if (!hash_equals($expected, $_SERVER['HTTP_X_PROE_SIGNATURE'])) {
http_response_code(401);
exit;
}