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ă.
- Folosește merchantul aplicației
mer_...sau declarămerchant_of_recordcând prestatorul este o altă firmă și verifică statusul și capabilitățile lui. - Creează autorizarea manuală fără distribuție și tratează
authorizeddrept stare capturabilă. - Ajustează autorizarea numai dacă funcția este eligibilă, apoi capturează tariful final.
- După
succeeded, creează grupul, adaugă beneficiarii și comite distribuția. - 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);