İçeriğe geç
LexerLangv0.1.0

Dış servis çağrısı

http_client ile ödeme, kargo ve webhook API'leri; hata mı sonuç mu.

LexerLang
use http_client

$api = new http_client({
    base_url: "https://api.odemesaglayici.com",
    timeout: 15,
    headers: {Accept: "application/json"}
})

with $api
    .bearer($gizli_anahtar)
    .header("X-Merchant-Id", "12345")
end with

$yanit = $api.post("/v1/payments", {
    json: {amount: 125000, currency: "TRY", installment: 1},
    headers: {"Idempotency-Key": $siparis_no}
})

if $yanit.ok then
    out("ödeme alındı: " + $yanit.json.id)
else
    out("reddedildi (" + $yanit.status + "): " + $yanit.body)
end if

Çağrılar#

ÇağrıEtkisi
.get($yol[, {...}])istek atar
.post · .put · .patch · .delete · .headaynı yazım
.header($ad, $deger)kalıcı başlık ekler, istemciyi döner
.bearer($anahtar)Authorization: Bearer ... kısayolu
SeçenekAnlamı
json: {...}JSON gövde + application/json
form: {...}form gövde + application/x-www-form-urlencoded
body: "..."ham gövde (content_type ile)
query: {...}adrese sorgu alanı ekler
headers: {...}yalnızca bu çağrı için başlık
timeout: Nyalnızca bu çağrı için süre sınırı (saniye)

Gövde birdir: json, form ve body aynı anda verilemez.

Yanıt#

Alanİçerik
$yanit.statusdurum kodu
$yanit.ok2xx mi
$yanit.bodygövde metni
$yanit.jsonçözülmüş gövde; JSON değilse null
$yanit.headers · $yanit.header($ad)yanıt başlıkları
$yanit.content_type · $yanit.url

Hata mı, sonuç mu#

4xx ve 5xx hata fırlatmaz. Ödeme sağlayıcıları reddi 400 ile bildirir ve sebebi gövdeye yazar; hata fırlatılsaydı sebebe ulaşılamazdı. Durumu $yanit.ok ile sorarsınız.

Ağa hiç çıkılamadıysa (DNS, bağlantı, zaman aşımı) hata fırlatılır — orada bir yanıt yoktur, $yanit.status diye bir şey olamaz:

LexerLang
try
    $yanit = $api.post("/v1/payments", {json: $veri})
catch($e)
    out("sağlayıcıya ulaşılamadı: " + $e.message)
end try

Ayrım şu soruyu yanıtlıyor: "karşı taraf ne dedi" ile "karşı tarafa ulaşamadım" farklı olaylardır ve farklı ele alınmaları gerekir.

Sınırlar#

SınırDeğerNeden
Süre30 sn (varsayılan)yavaş sağlayıcı sayfayı da kilitlemesin
Gövde32 MBkarşı taraf belleği doldurmasın
Yönlendirme10döngüye girmesin
Şemayalnızca http, httpsfile:// diski okumaya açılan kapı olurdu

Başlık değerinde satır sonu reddedilir; geçseydi isteğe uydurma bir başlık eklenebilirdi.

Ayarlar#

Gizli anahtarlar koda yazılmaz:

LexerLang
use env_parser

$env = new env_parser(path.pwd + "/.env")

$anahtar = $env.require("STRIPE_SECRET")   # yoksa hata
$port    = $env.get("PORT", 3000)

require eksik bir gizi açılışta yakalar. get ile varsayılan vermek, eksik bir anahtarın ilk ödeme denemesine kadar fark edilmemesi demek olurdu.

Sırada#

Veritabanı.