Mergi la conținut

Ghid

Ride-hailing și tarif final variabil

Pentru curse, autorizează estimarea fără distribution, capturează tariful final și distribuie apoi suma către merchantul care a prestat serviciul. Proprietarul aplicației și beneficiarul fondurilor sunt roluri separate, chiar când reprezintă aceeași firmă.

  1. Folosește merchantul aplicației mer_... sau declară merchant_of_record când prestatorul este o altă firmă și verifică statusul și capabilitățile lui.
  2. Creează autorizarea manuală fără distribuție și tratează authorized drept stare capturabilă.
  3. Ajustează autorizarea numai dacă funcția este eligibilă, apoi capturează tariful final.
  4. După succeeded, creează grupul, adaugă beneficiarii și comite distribuția.
  5. Urmărește operația asincronă și webhookurile până la finalizarea transferului.

Alocare brută completă

Allocation group-ul trebuie să acopere integral suma capturată. Taxele de procesare și taxa Monedo sunt deduse automat din alocarea merchant; comisionul aplicației se declară prin rolul developer.

Activitate tehnică versus fonduri

Faptul că plata apare în activitatea aplicației identifică integratorul care a creat-o. Merchantul primește fondurile numai dacă recipientul său este inclus într-o distribuție sau într-o alocare post-captură.
ts
const rideId = 'ride_7842';
const checkout = await monedo.mobile.createCheckoutSession(
  {
    amount: 8000,
    currency: 'ron',
    capture_method: 'manual',
    customer: monedoCustomerId,
    external_reference: rideId,
    metadata: { channel: 'ride' },
  },
  { idempotencyKey: `${rideId}:checkout` },
);

// Dupa cursa, captureaza tariful final din backend.
const finalFare = 7350; // nu depășește autorizarea de 8000
const payment = await monedo.payments.capture(checkout.payment_intent, {
  body: { amount: finalFare },
  idempotencyKey: `${rideId}:capture:${finalFare}`,
});

// Distribuie suma brută integral; Monedo calculează taxele separat.
const merchantGrossAmount = finalFare;
const group = await monedo.allocationGroups.create(
  {
    payment_intent: payment.id,
    amount: finalFare,
    external_reference: `${rideId}:distribution`,
  },
  { idempotencyKey: `${rideId}:allocation-group` },
);

await monedo.allocationGroups.addAllocation(
  group.id,
  {
    recipient: merchantRecipientId,
    amount: merchantGrossAmount,
    role: 'merchant',
    external_reference: `${rideId}:merchant`,
  },
  { idempotencyKey: `${rideId}:merchant-allocation` },
);

const operation = await monedo.allocationGroups.commit(group.id, {
  idempotencyKey: `${rideId}:distribution-commit`,
});
await monedo.waitForOperation(operation);