Mergi la conținut

Payments API

Monedo Checkout pentru aplicația ta

Release candidate

Checkout-ul API și abonamentele sunt activate separat pe mediu. Dacă primești `checkout_not_enabled` sau `recurring_not_enabled`, funcția nu este încă activă pentru acel mediu. Nu folosi un checkout extern drept fallback.

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.

javascript
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

Cardurile sunt izolate după mediu, instalare, client și cont de plată. În modelul 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.

javascript
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

Dacă sesiunea nu a ajuns la aplicație, repetă crearea cu aceiași parametri și aceeași cheie de idempotency pentru a recupera URL-ul original. Pentru o plată asociată unei comenzi, anulează prin 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.
POST
/checkout-sessions
payments:write

Creează o sesiune pentru `payment_intent` sau `subscription`, niciodată ambele. Suma este determinată pe server.

GET
/checkout-sessions/{session}
payments:read

Citește starea și expirarea, fără a expune din nou tokenul checkout.

POST
/checkout-sessions/{session}/expire
payments:write

Pentru 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ă.