Hoppa till huvudinnehåll
Indien har en unik betalningsinfrastruktur dominerad av UPI (60%+ av digitala transaktioner) och Rupay-kort. Dodo Payments stöder båda med fullständig RBI-överensstämmelse för prenumerationsmandat.

Varför indiska betalningsmetoder är viktiga

UPI Dominance

UPI hanterar mer än 10 miljarder transaktioner per månad. Många indiska kunder har inte internationella kort.

Low Transaction Costs

UPI har nästan noll transaktionsavgifter. Utmärkt för transaktioner med hög volym och lägre värde.

Subscription Support

Till skillnad från de flesta alternativa betalningsmetoder stöder UPI och Rupay återkommande betalningar via RBI-mandat.

Stödda metoder

MetodTypPrenumerationerMinimibelopp
UPI CollectQR-kod / VPAJa*₹1
Rupay CreditKortJa*₹1
Rupay DebitKortJa*₹1
*Prenumerationer kräver RBI-kompatibla mandat med speciella behandlingsregler.

Konfiguration

API Metodtyper

TypBeskrivning
upi_collectUPI via QR-kod eller VPA-inmatning
creditKreditkort inklusive Rupay
debitBetalkort inklusive Rupay

Exempel: Indien-fokuserad kassa

const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: [
    'upi_collect',
    'credit',
    'debit'
  ],
  billing_currency: 'INR',
  customer: {
    email: 'customer@example.in',
    name: 'Priya Sharma',
    phone_number: '+919876543210'
  },
  billing_address: {
    country: 'IN',
    zipcode: '560001'
  },
  return_url: 'https://example.com/success'
});

Krav för UPI

För att UPI ska visas i kassan:
  1. Billing country måste vara Indien (IN)
  2. Currency måste vara INR
  3. För icke-indiska handlare: Adaptive Currency måste vara aktiverat
Om du är en icke-indisk handlare och Adaptive Currency inte är aktiverat, kommer UPI inte vara tillgängligt för dina kunder.

Prenumerationer med RBI-mandat

Indiska betalningsmetodsprenumerationer fungerar under RBI (Reserve Bank of India) föreskrifter med unika krav.

Hur RBI-mandat fungerar

Mandattyper

PrenumerationsbeloppMandattypGräns
Under Rs 15,000BehovsmandatRs 15,000
Rs 15,000 eller merFast belopp mandatExakt prenumerationsbelopp
Viktigt för planändringar: Om en uppgradering resulterar i en avgift som överskrider den befintliga mandatgränsen, kommer avgiften att misslyckas och kunden måste ge nytt tillstånd.

Den 48-timmars behandlingsfördröjningen

Detta är den mest betydande skillnaden från internationella kortbetalningar:
1

Charge Initiated (Day 0)

På det schemalagda förnyelsedatumet initierar Dodo avgiften hos banken.
2

Pre-Debit Notification

Kunden får en avisering från sin bank om den kommande debiteringen.
3

48-Hour Window

Kunden kan avboka mandatet under denna period via sin bankapp.
4

Debit Completed (~48-51 hours)

Efter 48 timmar (plus upp till 3 ytterligare timmar för bankbehandling) dras pengarna.
5

Webhook Sent

payment.succeeded webhook skickas efter den faktiska debiteringen, inte vid initieringen.
Ge inte förmåner vid initiering av avgiften. Vänta på payment.succeeded webhook, som kommer ~48–51 timmar efter det schemalagda avgiftsdatumet.

Hantering av 48-timmarsfönstret

// DON'T do this:
async function handleSubscriptionRenewal(subscription) {
  // ❌ Bad: Granting access immediately when charge is initiated
  grantPremiumAccess(subscription.customer_id);
}

// DO this:
async function handlePaymentWebhook(event) {
  if (event.type === 'payment.succeeded') {
    // ✅ Good: Only grant access after payment is confirmed
    grantPremiumAccess(event.data.customer_id);
  }
  
  if (event.type === 'payment.failed') {
    // Handle failed payment (mandate cancelled, insufficient funds)
    revokePremiumAccess(event.data.customer_id);
  }
}

Webhook-händelser för indiska prenumerationer

HändelseNärÅtgärd
subscription.activeFullmakt godkändRegistrera prenumerationsstart
payment.succeeded~48h efter datum för debiteringBevilja/fortsatt åtkomst
payment.failedDebitering misslyckadesInformera kunden, pausa åtkomst
subscription.on_holdBetalning misslyckadesBegär uppdatering av betalningsmetod
subscription.activeReaktiverad efter betalningÅterställ åtkomst

Testning

UPI test-ID:n

StatusUPI-ID
Lyckadsuccess@upi
Misslyckadfailure@upi

Indiska kort testnummer

MärkeScenarioKortnummerUtgångCVV
VisaLyckad457623891277145006/32123
VisaNekad470613121121212306/32123
MastercardLyckad540916266938103406/32123
MastercardNekad510510510510510006/32123

Bästa praxis

Bygg din applikation för att hantera gapet mellan avgiftsinitiering och faktisk betalning. Överväg:
  • Grace-perioder för abonnemangstillgång
  • Tydlig kommunikation till kunderna om behandlingstiden
  • Uppfyllelse baserad på webhook, inte datumdriven
Kunder kan när som helst avboka mandat via sina bankappar. Övervaka subscription.on_hold webhooks och be kunderna att prenumerera igen eller uppdatera betalningsmetoder.
För rörlig prissättning (t.ex. användningsbaserad) bör du överväga om ett Rs 15 000-mandat på begäran är tillräckligt. Om avgifter kan överstiga detta behöver kunderna återauktorisera.
För indiska kunder bör UPI vara primärt betalningsalternativ. Många användare föredrar det framför kort på grund av vana och lägre friktion.

Felsökning

Kontrollera:
  1. Är faktureringslandet inställt på IN?
  2. Är valutan inställd på INR?
  3. Om du är en icke-indisk handlare: Är Adaptive Currency aktiverat?
  4. Är upi_collect inkluderat i allowed_payment_method_types?
Lösning: Verifiera att faktureringsadressen har country: "IN" och billing_currency: "INR".
Orsak: Det nya avgiftsbeloppet överstiger det befintliga mandatets gräns (gräns på Rs 15 000).Lösning: Kunden måste uppdatera betalningsmetoden för att skapa ett nytt mandat med korrekt gräns.
Orsak: Kunden kan ha avbrutit mandatet under 48-timmarsfönstret eller så nekade banken debiteringen.Lösning: Kunden måste återauktorisera mandatet eller uppdatera betalningsmetoden.
Orsak: Fördröjningar i bankens API kan förlänga behandlingen med 2–3 extra timmar.Lösning: Detta är väntat. Bygg ditt system för att hantera varierande förseningar på upp till ~51 timmar totalt.
Orsak: Kantsfall i RBI-reglerna – mandatavbokning under behandlingsfönstret avbryter inte omedelbart prenumerationen.Lösning: Nästa avgift kommer att misslyckas och prenumerationen flyttas till on_hold. Övervaka webhooks för payment.failed.

Relaterade sidor