Online payments: Razorpay and Stripe
Customers can pay an invoice from its link with Pay now, through your own Razorpay and/or Stripe account. The money goes straight to your account, card and UPI details never reach CRMSix, and each payment is recorded on its invoice automatically.
Razorpay, Stripe or both?
| Razorpay | Stripe | |
|---|---|---|
| Best for | Customers in India | Customers outside India |
| How customers pay | UPI, cards, net banking and wallets for invoices in rupees (INR); cards for other currencies | Cards (and the methods you turn on in Stripe), in any currency Stripe supports |
| Where they pay | Razorpay Checkout opens on the invoice page | Stripe’s own checkout page; they come back to the invoice afterwards |
| What CRMSix needs | Key ID, key secret, webhook secret | Secret key, webhook signing secret |
Each gateway has its own switch in Settings → Online Payments. With both on, the invoice page offers both, for example Pay ₹… with UPI, cards or net banking and Pay … by card, and the customer chooses.
Set up Razorpay
- Sign up at razorpay.com. Test mode works straight away. For real payments, complete Razorpay’s KYC: PAN, bank account, and a website with terms, privacy and refund policies.
- In the Razorpay dashboard, make sure you’re in Test mode, open Account & Settings → API Keys and Generate key. Copy the Key ID (
rzp_test_…) and the Key Secret (shown once). - In CRMSix, go to Settings → Online Payments → Razorpay. Keep the mode on Test, paste the key ID and key secret, Save, and choose Test Razorpay connection.
- Copy the Razorpay webhook address CRMSix shows (with Copy).
- In Razorpay, open Account & Settings → Webhooks → Add New Webhook. Paste the address, choose a secret of your own, and tick the events
payment.captured,order.paidandpayment.failed. Save. - Back in CRMSix, paste the same secret into Webhook secret, tick Accept payments with Razorpay and Save.
Set up Stripe
- Sign up at stripe.com. A sandbox (test mode) works straight away. For real payments, choose Verify your business in Stripe.
-
In Stripe, click Developers (bottom-left) → API keys, and copy the Secret key (
sk_test_…). Don’t use the publishable key (pk_test_…); CRMSix refuses it. - In CRMSix, go to Settings → Online Payments → Stripe. Keep the mode on Test, paste the secret key, Save, and choose Test Stripe connection.
- Copy the Stripe webhook address CRMSix shows (with Copy).
-
In Stripe, click Developers (bottom-left) to open Workbench, then the Webhooks tab →
+ Add destination. (You can also go straight to
dashboard.stripe.com/test/workbench/webhooks.) -
Search for
checkout.sessionand tick these four events, then Continue:checkout.session.completed,checkout.session.async_payment_succeeded,checkout.session.async_payment_failedandcheckout.session.expired. - Choose Webhook endpoint → Continue, paste the address from CRMSix as the Endpoint URL, and Create destination.
- On the destination’s page, under Signing secret, choose Reveal and copy it (
whsec_…). - Back in CRMSix, paste it into Webhook signing secret, tick Accept payments with Stripe and Save.
Options
- Allow part payments: the customer can choose to pay less than the balance, for example an instalment. Off: they pay the whole balance.
- Email a receipt: the payer gets an email with the amount, the payment reference and what’s still due.
Both apply to Razorpay and Stripe.
Test it (no real money)
Send yourself an invoice (or use Copy customer link on an invoice), open the link and choose Pay now. In test mode, use these instead of real details:
| Gateway | To test | Use |
|---|---|---|
| Razorpay | UPI (invoice in INR) | UPI ID success@razorpay (or failure@razorpay for a failed payment) |
| Card | 4111 1111 1111 1111, any future expiry, any CVV; on the OTP screen choose Success | |
| Net banking | Pick any bank, then Success on Razorpay’s test page | |
| Stripe | Successful payment | 4242 4242 4242 4242, any future expiry (e.g. 12/34), any CVC, any name and postcode |
| India-issued card | 4000 0035 6000 0008 | |
| Card declined | 4000 0000 0000 0002 | |
| 3-D Secure / OTP | 4000 0025 0000 3155 (choose Complete on the test screen) |
The full lists are in each gateway’s documentation: Razorpay’s Test card details page, and docs.stripe.com/testing. Test
numbers only work with test keys.
Check that it’s working
- On the invoice page.After paying, the customer sees Thank you! Your payment was received. and the new balance.
- On the invoice in CRMSix.A payment appears with the method (UPI, Card…), the gateway’s payment ID as the reference, and Paid online (Razorpay/Stripe, test mode). The status becomes Partially paid or Paid.
- In Settings → Online Payments.Recent online payments lists every payment with its gateway, status and fee.
- In the gateway.Razorpay: Webhooks → your webhook → deliveries. Stripe: Workbench → Webhooks → your destination → Event deliveries. Each should show status 200.
Go live
- Finish the gateway’s activation: Razorpay KYC, or Verify your business in Stripe.
- In the gateway, switch to live mode and create live keys (
rzp_live_…/sk_live_…), and add the same webhook again in live mode (live and test webhooks are separate, with different secrets). - In CRMSix, set the gateway’s mode to Live and paste the live key(s) and live webhook secret. CRMSix won’t accept a test key in live mode, or the other way round.
- Make a small real payment to yourself to check, then refund it in the gateway.
How payments are recorded
- CRMSix records a payment only after checking it with the gateway: Razorpay’s signature and the payment itself, or Stripe’s checkout session.
- The gateway’s webhook records it too, so nothing is lost if the customer closes the page or doesn’t come back from Stripe.
- A payment is recorded once, however many times the page or the webhook reports it.
- Bank payments that take time to settle (some Stripe methods) show waiting for your bank to confirm and are recorded when the gateway confirms them.
- Refunds: create a credit note on the invoice and choose Refund → Back to their online payment; CRMSix sends the refund through Razorpay or Stripe and records it. (A refund made directly in the gateway’s dashboard can be recorded on the credit note as a refund made another way.)
Troubleshooting
- I don’t see UPI, only cards
- UPI, net banking and wallets work only for invoices in Indian rupees (INR). An invoice’s currency comes from its opportunity, so create the opportunity in INR (Settings → Currencies, or make INR your corporate currency). Also check that UPI is enabled in Razorpay’s payment methods.
- There’s no Pay now button
- Check that the gateway is ticked and saved in Settings → Online Payments, and that the invoice is sent (not a draft), not paid and not void. If the settings page says online payments or Stripe aren’t available, contact CRMSix.
- “Razorpay/Stripe refused the keys”
- The key or secret is wrong, from the other mode (test vs live), or was rolled in the gateway. Copy them again, save, and use Test connection.
- The customer paid but the invoice doesn’t show it
- Look at the webhook deliveries in the gateway. A 400 usually means the webhook secret in CRMSix doesn’t match the gateway’s; a 404 means the webhook address is wrong. Fix it and resend the event from the gateway; it will be recorded once.
- Stripe asks for a billing address
- For a Stripe account registered in India, international card payments need the customer’s address (an RBI rule). In test mode, any address works.