Skip to content

Checkout — Худалдан авалт

Checkout нь бүтээгдэхүүн, тоо хэмжээ, хөнгөлөлт бүхий бүтэн худалдан авалтыг зохицуулах Byl-ийн хостлогдсон төлбөрийн хуудас юм.

Харилцагч таны апп эсвэл веб дээр "Худалдан авах" дарахад та checkout үүсгээд хариунд ирэх url руу чиглүүлнэ. Түүнээс хойш төлбөрийн хэлбэр сонгох, хөнгөлөлтийн код хэрэглэх, хүргэлтийн хаяг, утасны дугаар авах, баримтыг и-мэйлээр илгээх бүх зүйлийг Byl зохицуулна.

Checkout төлөгдмөгц webhook-оор checkout.completed event илгээгдэнэ.

Нэхэмжлэх vs Checkout

Зөвхөн тодорхой дүн төлүүлэх бол нэхэмжлэх хялбар. Бүтээгдэхүүн, тоо хэмжээ, хөнгөлөлтийн код, хүргэлтийн хаяг зэрэг шаардлагатай бол checkout.

Ажиллах урсгал

Харилцагч "Худалдан авах" дарна


Таны сервер POST /checkouts дуудна
  │ хариунд id, url ирнэ

Харилцагчийг url руу чиглүүлнэ
  │ Byl-ийн хуудсан дээр төлбөр төлнө

success_url руу буцна  +  танд checkout.completed webhook ирнэ

Багцыг эцэслэх (бараа хүргэх, эрх нээх) логикоо success_url дээр бус, webhook дээр бичихийг зөвлөж байна — харилцагч буцах хуудсыг хааж болзошгүй.

Төлөвүүд

ТөлөвТайлбар
openТөлбөр хүлээж байна.
completeТөлөгдсөн. checkout.completed webhook илгээгдсэн байна.
expiredХугацаа дууссан. Дахин төлөх боломжгүй.

Checkout өгөгдмөлөөр 2 сарын дараа хүчингүй болно (expires_at). Багц солих checkout нь онцгой тохиолдол — 24 цагийн дараа хүчингүй болно (шалтгааныг үзэх).

Checkout объект

ТалбарТөрөлТайлбар
idNumberCheckout ID.
urlStringХарилцагчид үзүүлэх төлбөрийн хуудас.
statusStringТөлөв: open, complete, expired.
modeStringХудалдан авалтын горим: payment, subscription.
amount_subtotalNumberБүтээгдэхүүнүүдийн нийт дүн (хямдрал хасахаас өмнө).
amount_totalNumberХарилцагч төлөх нийт дүн (хямдрал хассаны дараа).
client_reference_idStringТаны систем дэх захиалгын дугаар.
customer_idNumberХолбогдсон харилцагчийн ID.
customer_emailStringХарилцагчийн и-мэйл хаяг.
is_guestBooleanЗочин харилцагч эсэх (харилцагч холбогдоогүй).
allow_promotion_codesBooleanХөнгөлөлтийн кодын талбар идэвхтэй эсэх.
expires_atDateХүчинтэй байх эцсийн хугацаа.
created_atDateАнх үүссэн огноо.
updated_atDateӨөрчлөлт орсон огноо.

Checkout үүсгэх

POST /v1/projects/:project_id/checkouts
ПараметерТөрөлЗаавал эсэхТайлбар
items[]ArraytrueБүтээгдэхүүний жагсаалт. Хамгийн багадаа 1.
success_urlStringfalseТөлбөр амжилттай төлөгдсөний дараа буцах хаяг.
cancel_urlStringfalseХудалдан авалт цуцлах үед буцах хаяг.
customer_idNumberfalseХарилцагчийн ID. Давтагдах үнэтэй checkout-д заавал.
customer_emailStringfalseХарилцагчийн и-мэйл хаяг. Байвал харилцагч автоматаар үүсч холбогдоно.
client_reference_idStringfalseТаны систем дэх дугаар. 48 тэмдэгт хүртэл.
phone_number_collectionBooleanfalseУтасны дугаар авах талбар идэвхжүүлэх.
email_collectionBooleanfalseИ-мэйл авах талбар. Өгөгдмөл truefalse бол төлбөрийн хуудсанд и-мэйл шаардахгүй. И-мэйлгүй бол баримт илгээгдэхгүй.
delivery_address_collectionBooleanfalseХүргэлтийн хаяг авах талбар идэвхжүүлэх.
allow_promotion_codesBooleanfalseХөнгөлөлтийн код оруулах талбар идэвхжүүлэх.
discounts[]ArrayfalseШууд хямдрал.
subscription_idNumberfalseСунгах/солих багцын ID.

Хариунд зөвхөн id болон url буцна:

json
{
  "data": {
    "id": 13338,
    "url": "https://byl.mn/h/checkout/13338/Yi7smBuk"
  }
}

Бүтээгдэхүүн заах

items[] дотор бүтээгдэхүүн заах гурван арга байна. Нэг item-д зөвхөн нэгийг л хэрэглэнэ.

АргаХэзээ хэрэглэх
priceХамгийн зөвлөмжтэй. Byl-д бүртгэлтэй үнийг санахад хялбар нэрээр (lookup key) заана.
price_idByl-д бүртгэлтэй үнийг ID-гаар заана. price-тай ижил боловч ID санах шаардлагатай.
price_dataByl-д бүртгэлгүй бүтээгдэхүүний үнэ, нэрийг хүсэлт дотроо шууд дамжуулна (динамик үнэ, сагс гэх мэт).

WARNING

Бүтээгдэхүүний хямдралтай хөнгөлөлтийн код болон багц (subscription) хэрэглэхийн тулд бүтээгдэхүүн Byl-д бүртгэлтэй байх шаардлагатай — price эсвэл price_id ашиглана. price_data-д эдгээр боломж ажиллахгүй.

price (lookup key)

Lookup key нь тухайн үнэд өгсөн, төсөл дотроо давтагдашгүй нэр юм (жишээ нь starter_monthly). Удирдлагын буланд бүтээгдэхүүний засах хуудасны үнэ хэсэгт тохируулна.

ПараметерТөрөлЗаавал эсэхТайлбар
items[0][price]StringtrueҮнийн lookup key. Жш: starter_monthly.
items[0][quantity]NumbertrueТоо хэмжээ. Хамгийн багадаа 1.
shell
BYL_PROJECT_ID="таны төслийн ID"
BYL_TOKEN="таны API token"

curl -X POST https://byl.mn/api/v1/projects/$BYL_PROJECT_ID/checkouts \
    -H "Authorization: Bearer $BYL_TOKEN" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
          "success_url": "https://example.mn/purchase/success",
          "items": [
              { "price": "starter_monthly", "quantity": 1 }
          ]
      }'

Тухайн төсөлд байхгүй lookup key дамжуулбал валидацын алдаа буцна.

price_id

Byl-д бүртгэлтэй үнийн ID. Удирдлагын буланд бүтээгдэхүүний дэлгэрэнгүй хуудсанд үнэ тус бүрийн ID харагдана.

ПараметерТөрөлЗаавал эсэхТайлбар
items[0][price_id]NumbertrueByl-д бүртгэлтэй үнийн ID.
items[0][quantity]NumbertrueТоо хэмжээ.
shell
curl -X POST https://byl.mn/api/v1/projects/$BYL_PROJECT_ID/checkouts \
    -H "Authorization: Bearer $BYL_TOKEN" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
          "success_url": "https://example.mn/purchase/success",
          "items": [
              { "price_id": 3, "quantity": 1 }
          ]
      }'

price_data

Byl-д бүртгэлгүй бүтээгдэхүүнийг хүсэлт дотроо тодорхойлно. Динамик үнэ (жишээ нь сагсны агуулга, хэмжээгээр тооцох үйлчилгээ) хэрэгтэй үед тохиромжтой.

ПараметерТөрөлЗаавал эсэхТайлбар
items[0][price_data][unit_amount]NumbertrueНэгж үнэ.
items[0][price_data][product_data][name]StringtrueБүтээгдэхүүний нэр. 255 тэмдэгт хүртэл.
items[0][price_data][product_data][client_reference_id]StringfalseТаны систем дэх бүтээгдэхүүний ID.
items[0][quantity]NumbertrueТоо хэмжээ.
shell
curl -X POST https://byl.mn/api/v1/projects/$BYL_PROJECT_ID/checkouts \
    -H "Authorization: Bearer $BYL_TOKEN" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
          "success_url": "https://example.mn/purchase/success",
          "items": [
              {
                  "price_data": {
                      "unit_amount": 1000,
                      "product_data": { "name": "Product 1" }
                  },
                  "quantity": 1
              }
          ]
      }'

Тоо хэмжээг харилцагчид засах эрх

Дээрх гурван аргад ижилхэн ажиллах нэмэлт тохиргоо. Идэвхжүүлбэл харилцагч checkout хуудсан дээр тоо хэмжээгээ өөрөө өөрчилж болно.

ПараметерТөрөлЗаавал эсэхТайлбар
items[0][adjustable_quantity][enabled]BooleantrueЗасах боломжийг идэвхжүүлэх.
items[0][adjustable_quantity][min]NumberfalseОруулж болох хамгийн бага тоо.
items[0][adjustable_quantity][max]NumberfalseОруулж болох хамгийн их тоо.
json
{
  "items": [
    {
      "price": "tshirt",
      "quantity": 1,
      "adjustable_quantity": { "enabled": true, "min": 1, "max": 10 }
    }
  ]
}

Хямдрал

discounts[]-ээр нийт дүнгээс тодорхой хэмжээний хямдрал шууд хасна. Хямдралын шалтгааныг та өөрөө шийдэж, тайлбарыг харилцагчид харагдахаар бичнэ.

ПараметерТөрөлЗаавал эсэхТайлбар
discounts[0][amount]NumbertrueХямдралын дүн.
discounts[0][description]StringtrueХарилцагчид харагдах тайлбар. 255 тэмдэгт хүртэл.

Хямдралын нийт дүн бүтээгдэхүүнүүдийн нийт дүнгээс их байж болохгүй.

shell
curl -X POST https://byl.mn/api/v1/projects/$BYL_PROJECT_ID/checkouts \
    -H "Authorization: Bearer $BYL_TOKEN" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
          "items": [
              { "price_id": 3, "quantity": 1 }
          ],
          "discounts": [
              { "amount": 5400, "description": "Хямдрал" }
          ]
      }'

Энэ жишээнд 5400 төгрөгийн хямдрал "Хямдрал" тайлбартайгаар харагдана:

Byl хямдруулсан checkout

Хямдрал vs Хөнгөлөлтийн код

discounts[] нь та тооцоолсон хямдралыг шууд хасна. Хөнгөлөлтийн код нь харилцагч өөрөө код оруулж хөнгөлөлт авах боломж. Хоёуланг зэрэг хэрэглэж болно.

Хөнгөлөлтийн код

allow_promotion_codes: true дамжуулбал checkout хуудсан дээр хөнгөлөлтийн код оруулах талбар гарна. Харилцагч кодоо оруулахад хөнгөлөлт автоматаар тооцогдоно.

Хөнгөлөлтийн кодыг удирдлагын буланд үүсгэнэ. Хоёр төрөлтэй бөгөөд checkout-д тавих шаардлага нь өөр:

Кодын төрөлБүтээгдэхүүн заах арга
Багцын нийт дүнгээс хөнгөлөхЯмар ч арга — price, price_id, price_data бүгд ажиллана.
Бүтээгдэхүүний хямдралБүх item-д price эсвэл price_id заавал.

Бүтээгдэхүүний хямдралтай код нь Byl-д бүртгэлтэй тодорхой бүтээгдэхүүнтэй холбогдож ажилладаг. price_data-гаар дамжуулсан бүтээгдэхүүн системд бүртгэлгүй тул систем түүнд ямар хөнгөлөлт хамаарахыг тодорхойлж чадахгүй.

shell
curl -X POST https://byl.mn/api/v1/projects/$BYL_PROJECT_ID/checkouts \
    -H "Authorization: Bearer $BYL_TOKEN" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
          "success_url": "https://example.mn/purchase/success",
          "allow_promotion_codes": true,
          "items": [
              { "price_id": 3, "quantity": 1 },
              { "price_id": 5, "quantity": 2 }
          ]
      }'

Дэлгэрэнгүйг Хөнгөлөлтийн код хуудаснаас уншина уу.

Давтагдах төлбөр (subscription)

Сар/жилийн мөчлөгтэй давтагдах (recurring) үнэтэй checkout төлөгдөхөд багц (subscription) автоматаар үүснэ. Энэ тохиолдолд хоёр нэмэлт шаардлага биелэх ёстой:

  • customer_id заавал — багц тодорхой харилцагчид бүртгэгдэнэ.
  • Ганц item — давтагдах үнэтэй checkout-д өөр item нэмэх боломжгүй.

Сунгалт, багц солилт, туршилтын хугацаа зэргийг Subscriptions хуудаснаас уншина уу.

Checkout лавлах

GET /v1/projects/:project_id/checkouts/:checkout_id

TIP

Төлөгдсөн эсэхийг мэдэхийн тулд энэ endpoint-ыг тасралтгүй дуудах (polling) шаардлагагүй — webhook тохируулбал checkout.completed event тэр даруй танд ирнэ.

Жишээ хүсэлт

shell
curl -X GET https://byl.mn/api/v1/projects/$BYL_PROJECT_ID/checkouts/13338 \
    -H "Authorization: Bearer $BYL_TOKEN" \
    -H 'Accept: application/json'

Жишээ гаралт

json
{
  "data": {
    "id": 13338,
    "url": "https://byl.mn/h/checkout/13338/Yi7smBuk",
    "client_reference_id": null,
    "mode": "payment",
    "status": "open",
    "expires_at": "2026-12-25T16:00:00.000000Z",
    "amount_subtotal": 1000,
    "amount_total": 1000,
    "customer_id": null,
    "customer_email": null,
    "is_guest": true,
    "allow_promotion_codes": false,
    "created_at": "2026-10-25T10:27:49.000000Z",
    "updated_at": "2026-10-25T10:27:49.000000Z"
  }
}

Дараагийн алхам