Cost+Docs

Pagina de plată găzduită (HPP)

Acceptați plăți folosind pagina de plată găzduită Cost+

Pagina de plată găzduită (HPP) este formularul de plată conform PCI DSS al Cost+. Vă permite să acceptați plăți fără a gestiona date sensibile ale cardurilor pe propriile servere. Creați o comandă prin API, redirecționați clientul către pagina găzduită, iar acesta revine pe site-ul dvs. după plată.

Cum funcționează

  1. Serverul dvs. creează o comandă apelând POST /v1/orders/.
  2. API-ul returnează un URL care indică pagina de plată găzduită.
  3. Redirecționați clientul către pagina de plată.
  4. Clientul finalizează plata pe pagina găzduită Cost+.
  5. Clientul este redirecționat înapoi la return_url (sau failure_url pentru plăți eșuate).
  6. Cost+ trimite o notificare webhook la webhook_url cu statusul comenzii.

Pagina de plată găzduită este complet conformă PCI DSS. Nu trebuie niciodată să gestionați numere de card sau date sensibile de plată pe serverele dvs.

Crearea unei comenzi

Există două abordări pentru utilizarea HPP:

Abordarea 1: Afișați toate metodele de plată (Cea mai simplă)

Creați o comandă fără a specifica transactions. Răspunsul include un order_url — clientul este redirecționat acolo și vede toate metodele de plată activate pentru contul dvs.:

Request
{
  "currency": "EUR",
  "amount": 1295,
  "merchant_order_id": "my-order-id-1",
  "description": "My amazing order",
  "return_url": "https://www.example.com",
  "webhook_url": "https://www.example.com/webhook"
}
Response
{
  "id": "43114fde-da30-4115-8004-b7f808f9b25c",
  "status": "new",
  "currency": "EUR",
  "amount": 1295,
  "order_url": "https://api.costplus.online/pay/43114fde.../select-payment-method/",
  "return_url": "https://www.example.com",
  "webhook_url": "https://www.example.com/webhook"
}

Redirecționați clientul la order_url. Pe pagina găzduită, sunt afișate toate metodele de plată activate.

Abordarea 2: Preselectați metodele de plată

Creați o comandă cu un array transactions pentru a controla ce metode de plată apar și în ce ordine. Fiecare tranzacție include un payment_method, iar răspunsul returnează un payment_url în obiectul tranzacției:

Request
{
  "currency": "EUR",
  "amount": 1295,
  "merchant_order_id": "my-order-id-1",
  "description": "My amazing order",
  "return_url": "https://www.example.com",
  "webhook_url": "https://www.example.com/webhook",
  "transactions": [
    { "payment_method": "credit-card" }
  ]
}
Response
{
  "id": "4851e31c-4137-4e91-95ef-1df945ee76a2",
  "status": "new",
  "currency": "EUR",
  "amount": 1295,
  "transactions": [
    {
      "id": "d291f03f-a406-428a-967a-4895a46e03fd",
      "payment_method": "credit-card",
      "status": "new",
      "payment_url": "https://api.costplus.online/pay/4851e31c.../select-payment-method/credit-card/d291f03f.../"
    }
  ]
}

Redirecționați clientul la payment_url din tranzacție.

Dacă furnizați o singură intrare în array-ul transactions, clientul este direcționat direct la acea metodă de plată fără a vedea un ecran de selecție. Array-ul flags conține "is-test" când se folosește o cheie API sandbox.

Câmpuri ale cererii

CâmpObligatoriuDescriere
currencyDaCod valutar ISO 4217 (de ex., EUR, GBP, SEK)
amountDaSuma în unitatea minoră ISO 4217 a monedei. De exemplu, 12,95 EUR este reprezentat ca 1295
merchant_order_idNuID-ul dvs. de referință propriu pentru comandă
return_urlNuURL pentru redirecționarea clientului după plată (implicit pentru toate statusurile)
failure_urlNuURL pentru redirecționarea clientului la statusul cancelled, expired sau error (vezi URL-uri de redirecționare mai jos)
localeNuLimba paginii de plată. Suportate: en-GB, de-DE, nl-NL, nl-BE, fr-BE, sv-SE, no-NO, da-DK
descriptionNuDescrierea comenzii, afișată clientului
payment_methodsNuFiltrați la o singură metodă de plată (de exemplu, ["credit-card"]). Omiteți pentru a afișa toate metodele activate. Pentru mai multe metode specifice, utilizați în schimb matricea transactions
webhook_urlNuURL pentru a primi notificări de schimbare a statusului
expiration_periodNuDurată ISO 8601 pentru expirarea comenzii. Implicit este PT30M (30 minute)

Câmpul amount este întotdeauna un număr întreg în unitatea minoră ISO 4217 a monedei. Pentru EUR, 1295 înseamnă 12,95 EUR; Monedele cu zero și trei zecimale folosesc propriul exponent ISO 4217. Trecerea unei valori zecimale precum 1295.00 sau 12.95 va duce la o eroare sau o taxare incorectă.

Metode de plată multiple

Există două moduri de a controla ce metode de plată apar pe pagina găzduită:

Opțiunea A — payment_methods (filtru unic). Transmite o matrice cu un singur element pentru a restricționa comanda la o singură metodă de plată. Omiteți în întregime câmpul pentru a afișa toate metodele activate pentru contul dvs.

Opțiunea B — matrice transactions (recomandat pentru mai multe metode). Adăugați o intrare pentru fiecare metodă de plată. Fiecare tranzacție primește propriul payment_url, iar metodele apar în ordinea matricei pe pagina găzduită:

"transactions": [
  { "payment_method": "credit-card" },
  { "payment_method": "apple-pay" }
]

Câmpul payment_methods al comenzilor acceptă cel mult o valoare. Pentru a oferi mai multe metode specifice, utilizați întotdeauna matricea transactions. Dacă aveți nevoie de un link reutilizabil cu mai multe metode de plată, luați în considerare Link-uri de plată, care acceptă o matrice payment_methods adevărată.

URL-uri de redirecționare

După plată, clientul este redirecționat în funcție de statusul comenzii și de URL-urile furnizate:

  • Când sunt setate atât return_url cât și failure_url:

    • cancelled, expired sau error → clientul este redirecționat la failure_url
    • Toate celelalte statusuri → clientul este redirecționat la return_url
  • Când este setat doar return_url:

    • Toate statusurile → clientul este redirecționat la return_url

Folosiți failure_url pentru a afișa o pagină de reîncercare sau suport pentru plăți eșuate, în timp ce return_url afișează o confirmare a comenzii. Dacă aveți nevoie de o singură destinație, doar return_url este suficient.

Comportamentul butonului de anulare

Pagina de plată găzduită include un buton de anulare. Când clientul apasă pe el, este redirecționat la failure_url (dacă este furnizat) sau return_url. Statusul comenzii va trece la cancelled. Verificați întotdeauna statusul comenzii prin API sau webhook-uri, în loc să vă bazați doar pe redirecționare.

Endpoint-uri asociate

On this page