ARNPROXY

Beli dengan saldo

POST/account/api/v1/orders/create
Konfirmasikan operasi dengan sengaja

Operasi ini dapat mengubah catatan, saldo, atau pengaturan layanan. Baca cakupan dan catatan terlebih dahulu. Jika hasil tidak pasti, periksa operasi yang sama, jangan memulai yang baru.

Otorisasi

AuthorizationBearer YOUR_ARNPROXY_API_KEY
Izin yang diperlukanpurchases
Acceptapplication/json
Content-Typeapplication/json
Idempotency-Key16–100 huruf, angka, _ atau -. Simpan dan gunakan nilai yang sama untuk operasi yang sama.

Parameter

NamaTipeKeterangan
Idempotency-Key
headerWajib
string16–100 huruf/angka/_/-. Pertahankan nilai untuk operasi/status; jangan pakai lagi dengan isi berbeda.
product_id
bodyWajib
integerID produk dari products; 1–2147483647.
lines
bodyWajib
object[]1–20 baris lokasi berbeda untuk satu produk. location_id tidak boleh ganda; total maksimal 100000 proxy.
lines[].location_id
bodyWajib
integerID lokasi dari katalog produk terpilih.
lines[].time_id
bodyWajib
integerID periode yang ditawarkan untuk lokasi tersebut.
lines[].quantity
bodyWajib
integer1–100000; juga tunduk pada product.minimum_quantity.
lines[].purpose_id
bodyWajib
integerKirim 201 untuk alur tujuan penggunaan saat ini.
lines[].subpurpose_id
bodyWajib
integerTujuan turunan aktif di bawah 201; gunakan -1 untuk Lainnya.
lines[].other_purpose
bodyBersyarat
stringWajib saat subpurpose_id=-1: 1–30 karakter UTF-8; selain itu diabaikan.
currency
bodyWajib
stringTRY atau USD dari kutipan harga yang sama; harus cocok dengan mata uang akun.
expected_total_minor
bodyWajib
integertotal_minor dari harga yang sama sebagai integer, bukan nominal desimal atau string. 1–999999999999.
terms
bodyWajib
booleanPersetujuan harus berupa boolean JSON true, bukan string "true".
promo_code
bodyOpsional
stringPromo opsional, maksimal 100 byte. Pertahankan sama antara harga dan pembelian/perpanjangan.
Nilai bawaan: ""
auth
bodyOpsional
objectAutentikasi pengiriman; bawaan {"mode":"username_password"}. Tidak memberi izin mengelola kredensial utama.
auth.mode
bodyBersyarat
stringWajib jika auth dikirim: username_password atau ip. Jangan tentukan nama pengguna/kata sandi di sini.
auth.ip
bodyBersyarat
stringIPv4 wajib hanya jika auth.mode=ip; hilangkan untuk username_password.

Isi permintaan

Ganti YOUR_/FROM_ dengan nilai katalog, kutipan harga, atau cakupan terkait. Persetujuan pada contoh tetap false; setujui operasi nyata secara sengaja.

request.json
{
    "product_id": "FROM_PRODUCTS",
    "lines": [
        {
            "location_id": "FROM_CATALOG",
            "time_id": "FROM_CATALOG",
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": "FROM_CATALOG_CHILDREN"
        }
    ],
    "currency": "FROM_QUOTE",
    "expected_total_minor": "FROM_QUOTE_TOTAL_MINOR",
    "promo_code": "",
    "terms": false
}

Contoh penggunaan tambahan

ID dan harga hanya contoh; gunakan nilai nyata dari katalog dan penawaran yang sama. ID JSON dan expected_total_minor harus berupa angka. Contoh sengaja memakai terms=false; kirim terms=true hanya setelah persetujuan jelas pelanggan untuk operasi berbayar.

Satu jenis produk, dua negara

Gunakan maksimal 20 location_id berbeda dalam satu product_id. Setiap negara menjadi pesanan terpisah; checkout yang terhubung diproses dalam satu faktur. Diskon jumlah dihitung terpisah per negara.

application/json
{
    "product_id": 5,
    "lines": [
        {
            "location_id": 10,
            "time_id": 101,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": 202
        },
        {
            "location_id": 11,
            "time_id": 102,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": 202
        }
    ],
    "currency": "TRY",
    "expected_total_minor": 2000,
    "promo_code": "",
    "terms": false
}

Tujuan “Lainnya”

Untuk Lainnya, kirim subpurpose_id=-1 serta other_purpose berisi 1–30 karakter. Pilihan lain tidak membutuhkan other_purpose. purpose_id tetap 201.

application/json
{
    "product_id": 5,
    "lines": [
        {
            "location_id": 10,
            "time_id": 101,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": -1,
            "other_purpose": "Custom purpose"
        }
    ],
    "currency": "TRY",
    "expected_total_minor": 1000,
    "promo_code": "",
    "terms": false
}

Contoh permintaan

cURL
printf 'Authorization: Bearer %s\n' "$ARNPROXY_API_KEY" |
  curl --silent --show-error --header @- \
    --header 'Accept: application/json' \
    --connect-timeout 10 --max-time 30 \
    --header 'Idempotency-Key: YOUR_SAVED_OPERATION_KEY' \
    --request POST --header 'Content-Type: application/json' \
    --data-binary @request.json \
    'https://www.arnproxy.com/account/api/v1/orders/create'

Contoh tidak dijalankan di halaman ini. Simpan kunci API dalam variabel lingkungan server, bukan URL atau kode browser. Siapkan request.json untuk contoh POST.

Respons

201Respons berhasil
application/json
{
    "ok": true,
    "data": {
        "state": "accepted",
        "delivery_state_at_acceptance": "queued",
        "currency": "TRY",
        "total": "10.00",
        "total_minor": 1000,
        "checkout_group_id": null,
        "orders": [
            {
                "id": 10001,
                "number": "1000010001",
                "location_id": 10,
                "time_id": 101,
                "quantity": 1,
                "total": "10.00"
            }
        ],
        "accepted_at": "2030-01-01T12:00:00+00:00",
        "automatic_renewal": false,
        "replayed": false
    },
    "meta": {
        "request_id": "000000000000000000000001",
        "phase": "public_v1",
        "source": "arnproxy_records"
    }
}
Kolom dan tipe respons
NamaTipeKeterangan
okbooleanPenanda berhasil; jika false, periksa error.code.
dataobjectHasil khusus operasi; contoh bersifat ilustratif dan sintetis.
data.statestringStatus catatan/operasi. accepted bukan terkirim; completed bukan tes koneksi.
data.delivery_state_at_acceptancestringNilai khusus operasi untuk delivery state at acceptance. Pertahankan tipe yang dikembalikan dan baca catatan perilaku.
data.currencystringMata uang transaksi akun: TRY atau USD.
data.totalstringNominal uang; pertahankan representasi string/integer untuk presisi.
data.total_minorintegerInteger satuan uang terkecil: 1000 berarti 10.00 TRY/USD.
data.checkout_group_idinteger|nullNilai khusus operasi untuk checkout group id. Pertahankan tipe yang dikembalikan dan baca catatan perilaku.
data.ordersarrayNilai khusus operasi untuk orders. Pertahankan tipe yang dikembalikan dan baca catatan perilaku.
data.orders[]objectNilai khusus operasi untuk orders. Pertahankan tipe yang dikembalikan dan baca catatan perilaku.
data.orders[].idintegerID catatan ARNPROXY terkait; gunakan alih-alih ID internal penyedia.
data.orders[].numberstringNomor pesanan tampilan; tidak sama dengan kolom yang meminta id.
data.orders[].location_idintegerID lokasi atau tipe produk katalog lokal.
data.orders[].time_idintegerID periode/paket GB lokal, bukan jumlah hari atau GB.
data.orders[].quantityintegerJumlah proxy terpilih atau dipesan.
data.orders[].totalstringNominal uang; pertahankan representasi string/integer untuk presisi.
data.accepted_atstringStempel waktu sesuai representasi API; tanggal contoh sintetis.
data.automatic_renewalbooleanNilai khusus operasi untuk automatic renewal. Pertahankan tipe yang dikembalikan dan baca catatan perilaku.
data.replayedbooleanHasil tersimpan dari operasi sama, bukan bukti debit/tindakan baru.
metaobjectMetadata korelasi permintaan dan sumber data.
meta.request_idstringID korelasi permintaan HTTP ini, bukan kunci operasi atau ID pesanan.
meta.phasestringNilai khusus operasi untuk phase. Pertahankan tipe yang dikembalikan dan baca catatan perilaku.
meta.sourcestringSumber data; catatan lokal dan kueri penyedia langsung merupakan bukti berbeda.

Respons kesalahan

HTTP 401 · INVALID_API_KEY
{
  "ok": false,
  "error": { "code": "INVALID_API_KEY" },
  "meta": { "request_id": "000000000000000000000001" }
}

Autentikasi dan validasi dapat menolak permintaan sebelum dijalankan. Lihat referensi kesalahan dan simpan request_id untuk dukungan. Jangan kirim kunci atau kata sandi. Kesalahan & batas →

Perilaku & catatan penting

  • Ambil ID dari products/catalog. Baris quote hanya location_id, time_id, quantity. Baris purchase juga wajib purpose_id=201 dan subpurpose_id terpilih.
  • Banyak negara membuat pesanan terpisah dan satu faktur multi-baris. Diskon per negara. accepted bukan terkirim; lacak order_delivery dan order_proxies.
  • Timeout/5xx bukan bukti perubahan gagal. Gunakan Idempotency-Key awal untuk status. Jangan ulang dengan kunci baru; GET tidak mengirim ulang perubahan.
  • Jangan meminta pelanggan memilih dua tujuan untuk pesanan standar. Temukan id=201 di catalog.purposes dan tampilkan hanya children miliknya. Pada purchase, purpose_id selalu bilangan bulat 201 dan subpurpose_id adalah ID anak yang dipilih. Struktur bertingkat dipertahankan agar integrasi lama tetap kompatibel.
  • Untuk Lainnya, kirim subpurpose_id=-1 serta other_purpose berisi 1–30 karakter. Pilihan lain tidak membutuhkan other_purpose. purpose_id tetap 201.
  • Gunakan maksimal 20 location_id berbeda dalam satu product_id. Setiap negara menjadi pesanan terpisah; checkout yang terhubung diproses dalam satu faktur. Diskon jumlah dihitung terpisah per negara.
Lacak operasi yang samaPeriksa status pembelian →

Cari dalam bahasa saat ini. Tutup dengan Esc