Dış servis çağrısı
http_client ile ödeme, kargo ve webhook API'leri; hata mı sonuç mu.
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 · .head | aynı yazım |
.header($ad, $deger) | kalıcı başlık ekler, istemciyi döner |
.bearer($anahtar) | Authorization: Bearer ... kısayolu |
| Seçenek | Anlamı |
|---|---|
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: N | yalnı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.status | durum kodu |
$yanit.ok | 2xx mi |
$yanit.body | gö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:
try
$yanit = $api.post("/v1/payments", {json: $veri})
catch($e)
out("sağlayıcıya ulaşılamadı: " + $e.message)
end tryAyrı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ır | Değer | Neden |
|---|---|---|
| Süre | 30 sn (varsayılan) | yavaş sağlayıcı sayfayı da kilitlemesin |
| Gövde | 32 MB | karşı taraf belleği doldurmasın |
| Yönlendirme | 10 | döngüye girmesin |
| Şema | yalnızca http, https | file:// 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:
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.