Payments API
Monedo Checkout pentru aplicația ta
Release candidate
Creezi plata pe server, apoi o sesiune care referă aceeași plată. Clientul primește numai URL-ul Monedo; cheia API nu ajunge în browser. Plata, portofelele disponibile și confirmarea cu bon digital folosesc interfața Monedo. Autentificarea cerută de bancă poate deschide temporar un ecran extern, apoi revine la Monedo.
const payment = await monedo.payments.create({
amount: 4900, currency: 'ron', customer: customer.id,
}, { idempotencyKey: 'order-1042-payment' });
const checkout = await monedo.checkoutSessions.create({
payment_intent: payment.id,
title: 'Comanda #1042',
success_url: 'https://app.example/payment-result',
cancel_url: 'https://app.example/cart',
}, { idempotencyKey: 'order-1042-checkout' });
// Trimite numai checkout.checkout_url browserului.URL-urile de întoarcere trebuie înregistrate exact în aplicație. Sesiunea expiră în 30 de minute; URL-ul este o credențială temporară, nu îl include în analytics sau loguri. Refolosește cheia de idempotency pentru a recupera același răspuns. Nu confirma comanda doar pentru că browserul a revenit: verifică `payment_intent.succeeded` și citește plata din API.
Carduri salvate în Hosted Checkout
Dacă plata a fost creată cu un customer Monedo, checkout-ul poate afișa cardurile salvate și poate cere acordul clientului pentru salvarea unui card nou. Fără customer, sesiunea este un checkout anonim și nu primește acces la metode salvate.
Izolare și compatibilitate
direct, comercianții au conturi de plată distincte și cardurile nu sunt partajate automat între ei. Într-o instalație platform, același client poate reutiliza un card consimțit între comercianții acelei instalații care folosesc același cont de plată al platformei. Instalațiile și aplicațiile diferite nu partajează metode implicit.Apple Pay și Google Pay apar ca opțiuni de portofel când dispozitivul este eligibil; nu sunt returnate ca rânduri de card salvat. Confirmarea obișnuită rămâne în interfața Monedo, dar autentificarea cerută de bancă poate deschide temporar un ecran extern.
Comenzi Commerce cu captură la pregătire
Pentru o comandă cu captură automată la începerea pregătirii, ordinea corectă este: creează comanda, creează o plată cu captură manuală, asociază plata prin orders.bindPayment(), apoi creează Hosted Checkout pentru aceeași plată. Checkout-ul autorizează suma, iar Commerce o capturează numai când comerciantul începe pregătirea.
const order = await commerce.orders.create(orderParameters, {
idempotencyKey: 'cart-1042-order',
});
const payment = await monedo.payments.create({
amount: order.total_minor,
currency: order.currency,
capture_method: 'manual',
merchant: order.merchant_id,
external_reference: order.id,
}, { idempotencyKey: 'order-1042-payment' });
await commerce.orders.bindPayment(order.id, {
expected_version: order.version,
payment_intent_id: payment.id,
}, { idempotencyKey: 'order-1042-bind-payment' });
const checkout = await monedo.checkoutSessions.create({
payment_intent: payment.id,
title: 'Comanda #1042',
success_url: 'https://app.example/payment-result',
cancel_url: 'https://app.example/cart',
}, { idempotencyKey: 'order-1042-checkout' });Reluare și anulare
orders.cancel() folosind versiunea curentă. Nu folosi expirarea checkout-ului sau anularea directă a plății, deoarece Commerce trebuie să sincronizeze comanda și eliberarea autorizării./checkout-sessionsCreează o sesiune pentru `payment_intent` sau `subscription`, niciodată ambele. Suma este determinată pe server.
/checkout-sessions/{session}Citește starea și expirarea, fără a expune din nou tokenul checkout.
/checkout-sessions/{session}/expirePentru o plată unică independentă anulează plata nefinalizată. Pentru o comandă Commerce folosește `orders.cancel()`. Pentru abonament revocă numai URL-ul checkout; anularea abonamentului este o operație separată.