cURL ile altın ve döviz fiyatı sorgulama
PHP'de HTTP istekleri için en yaygın araç, çoğu sunucuda hazır gelen cURL eklentisidir. Bir istek kurmak için curl_init() ile handle oluşturur, CURLOPT_URL ile uç noktayı, CURLOPT_RETURNTRANSFER ile yanıtın string olarak dönmesini ve CURLOPT_HTTPHEADER ile Authorization başlığını ayarlarsınız.
Örnek olarak gram altın fiyatı çekmek için CURLOPT_HTTPHEADER dizisine "Authorization: Bearer API_ANAHTARINIZ" satırını eklersiniz. Ardından curl_exec() çağrısı ham JSON metnini döndürür ve curl_getinfo() ile HTTP durum kodunu kontrol ederek başarılı bir yanıt alıp almadığınızı doğrularsınız.
İstek bittikten sonra curl_close() ile kaynağı serbest bırakmak iyi bir alışkanlıktır. Birden çok sembolü tek istekte istiyorsanız uç nokta parametresine gram-altin, ceyrek-altin, usd gibi virgülle ayrılmış bir liste geçebilir; böylece tek bağlantıda hem altın hem döviz verilerini toplarsınız.
json_decode ile yanıtı işleme ve gösterme
cURL'den dönen yanıt bir JSON metnidir; PHP'de bunu kullanılabilir hale getirmek için json_decode($yanit, true) çağrısıyla ilişkisel diziye çevirirsiniz. İkinci parametreyi true vermek, veriye $data["satis"] gibi dizi anahtarlarıyla erişmenizi sağlar; false bırakırsanız stdClass nesnesi döner ve $data->satis biçiminde okursunuz.
Çözümlenmiş dizide tipik olarak alış, satış ve güncelleme zamanı alanları bulunur. Örneğin echo $data["satis"] ile satış fiyatını ekrana basar, number_format($data["satis"], 2, ",", ".") ile Türkçe biçimde binlik ayraçlı gösterirsiniz. json_last_error() kontrolü, bozuk veya beklenmedik yanıtlarda hatayı erken yakalamanıza yardımcı olur.
Verileri veritabanına yazmak veya sayfada tablo olarak listelemek için foreach döngüsüyle sembol dizisini gezebilirsiniz. PHP tarafında verileri kısa süreli önbelleğe (örneğin APCu veya dosya cache) almak, aynı fiyatı defalarca sorgulamak yerine istek sayınızı düşürür ve kotanızı verimli kullanmanızı sağlar.
Kimlik doğrulama, güvenlik ve canlı veri için notlar
Kimlik doğrulama tamamen API anahtarınıza dayanır ve anahtar her istekte Authorization header ile gönderilir. Anahtarı kaynak koduna sabitlemek yerine sunucu ortam değişkeninde (getenv) veya sürüm kontrolüne dahil edilmeyen bir yapılandırma dosyasında tutmak en güvenli yaklaşımdır. Bu anahtar sunucu tarafında kaldığı için istemciye asla sızmaz.
PHP genellikle sunucu taraflı çalıştığından, WebSocket canlı akışı yerine kısa aralıklı REST sorguları çoğu senaryoya uygundur. Sayfayı her yenilediğinizde taze fiyat isteyen bir kurumsal panel için birkaç saniyelik önbellekli cURL çağrıları hem hızlı hem de ekonomiktir. Anlık akış gerektiren bir arayüz kurmak isterseniz WebSocket tarafını tarayıcıda JavaScript ile birleştirebilirsiniz.
Hasfiyat, gram ve has altından çeyrek, ata ve cumhuriyet altınına, ons XAU'dan gümüş, platin ve paladyuma, 995/916/750/585 ayar değerlerinden USD, EUR, GBP paritelerine kadar 67'den fazla sembolü tek API üzerinden sunar. 14 kaynaklı failover altyapısı sayesinde bir kaynak yanıt vermese bile fiyat akışı sürer; kaydolup anahtarınızı alarak yukarıdaki PHP örneklerini hemen projenize ekleyebilirsiniz.
Sık sorulan sorular
PHP ile Hasfiyat altın API'sinden fiyat nasıl çekilir?
PHP'de cURL kullanın: `curl_init` ile oturum açıp `CURLOPT_HTTPHEADER` içine `Authorization: Bearer API_ANAHTARINIZ` ekleyin, `CURLOPT_RETURNTRANSFER` ile yanıtı değişkene alın. Dönen JSON'u `json_decode($response, true)` ile ilişkisel diziye çevirip fiyatları okursunuz. Bu yöntem WooCommerce, OpenCart gibi PHP tabanlı e-ticaret sistemlerinde de kullanılabilir.
PHP cURL isteğinde API anahtarını nasıl gönderirim?
Anahtarı HTTP header dizisine ekleyin: `curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer API_ANAHTARINIZ'])`. Header, her istekte doğrulandığından eksik olursa 401 yanıtı dönersiniz. Anahtarı kaynak koda gömmek yerine ortam değişkeninden veya güvenli bir yapılandırma dosyasından okumanız önerilir.
PHP'de json_decode ile altın fiyatını nasıl okurum?
`$data = json_decode($response, true)` ile yanıtı ilişkisel diziye çevirin, ardından `$data['gram-altin']['satis']` gibi anahtarlarla değere ulaşın. İkinci parametreyi `true` vermezseniz dizi yerine nesne döner ve `->` ile erişmeniz gerekir. Beklenmedik yapıya karşı `isset($data['gram-altin'])` ile kontrol etmeniz KeyError benzeri uyarıları önler.
PHP ile altın alış ve satış fiyatını ayrı ayrı nasıl alırım?
API her sembol için alış ve satış değerlerini ayrı alanlarda döndürdüğü için `$data['gram-altin']['alis']` ve `$data['gram-altin']['satis']` şeklinde iki ayrı anahtardan okursunuz. Kuyumcu uygulamalarında alış-satış makası kritik olduğundan ikisini birlikte göstermeniz beklenir. Bu değerler seçili kaynağın anlık kotasyonunu yansıtır.
PHP cURL'de zaman aşımı ve hata yakalamayı nasıl yaparım?
`curl_setopt($ch, CURLOPT_TIMEOUT, 5)` ile zaman aşımı belirleyin ve istekten sonra `curl_errno($ch)` ile hata olup olmadığını kontrol edin. HTTP durum kodunu `curl_getinfo($ch, CURLINFO_HTTP_CODE)` ile alıp 200 dışındaki değerlerde hata yönetimi yapın. Böylece ağ kesintisi veya geçersiz anahtar durumunda uygulamanız düzgün tepki verir.
PHP'de API anahtarımı güvenli şekilde nasıl saklarım?
Anahtarı doğrudan koda yazmak yerine `.env` dosyasında tutup `getenv('HASFIYAT_API_KEY')` ile okuyun veya sürüm kontrolüne dahil edilmeyen bir config dosyasında saklayın. `.env` dosyasını mutlaka `.gitignore`'a ekleyin. Ayrıca anahtarı asla istemci tarafı JavaScript'e gömmeyin, çünkü tarayıcıda açığa çıkar.
PHP ile gram altın fiyatını WooCommerce ürününe nasıl yansıtırım?
cURL ile API'den güncel gram altın satış fiyatını çekip, WooCommerce'te ilgili ürünün fiyatını `update_post_meta` veya WooCommerce fonksiyonlarıyla güncelleyebilirsiniz. Bunu bir WP-Cron veya zamanlanmış görevle periyodik çalıştırarak fiyatları canlı tutarsınız. Hasfiyat WooCommerce, Shopify, Magento, OpenCart, PrestaShop gibi platformlarla entegrasyona uygundur.
PHP'de 401 Unauthorized dönüyorsa nasıl çözerim?
401 hatası Authorization header'ının eksik, yanlış yazılmış veya anahtarın geçersiz olduğunu gösterir. Header dizinizde `'Authorization: Bearer API_ANAHTARINIZ'` ifadesinin tam olarak bu formatta olduğunu ve anahtarın aktif olduğunu doğrulayın. `getenv` ile okuyorsanız değişkenin gerçekten dolu geldiğini `var_dump` ile kontrol edin.
PHP ile USD, EUR ve GBP kurlarını nasıl çekerim?
Döviz sembolleri de aynı REST uç noktasından döndüğü için `$data['USD']['satis']`, `$data['EUR']['satis']` ve `$data['GBP']['satis']` şeklinde okursunuz. API ayrıca çapraz pariteleri ve serbest piyasa alış/satış kurlarını sağlar. Kripto para ve BIST verileri bu API'nin kapsamı dışındadır.
PHP'de çeyrek, yarım ve tam altın fiyatını nasıl gösteririm?
Sarrafiye ürünleri ayrı sembollerle döner; `$data['ceyrek-altin']`, `$data['yarim-altin']` ve `$data['tam-altin']` anahtarlarından alış-satış değerlerini okuyup ekranda listeleyebilirsiniz. API ata, cumhuriyet ve reşat gibi tüm çeşitleri de kapsar. Her ürün için makası göstermek kullanıcı deneyimini iyileştirir.
PHP ile ons altın (XAU) değerini nasıl alırım?
REST yanıtından ons altın sembolünü okuyarak `$data['ons']['satis']` gibi dolar bazlı XAU değerine ulaşırsınız. Bu değeri USD/TRY kuruyla çarparak gram altın çevrimlerinizde kullanabilirsiniz. API 67'den fazla sembol arasında ons XAU'yu da milisaniye gecikmeyle sağlar.
PHP'de API yanıtını önbelleğe alıp istek sayısını nasıl azaltırım?
Yanıtı kısa süreli bir dosya veya Redis/Memcached önbelleğinde saklayıp geçerlilik süresi dolmadan aynı veriyi tekrar sunabilirsiniz; böylece her ziyaretçide yeni istek atmazsınız. Yüksek trafikli sitelerde bu, rate limit'e takılmayı önler. Anlık ve kesintisiz güncelleme gerekiyorsa PHP yerine sunucu tarafı WebSocket veya webhook mimarisi daha uygundur.
PHP'de cURL yerine Guzzle ile istek atabilir miyim?
Evet, Guzzle HTTP istemcisiyle `$client->get($url, ['headers' => ['Authorization' => 'Bearer API_ANAHTARINIZ']])` çağrısını yapıp `json_decode((string)$response->getBody(), true)` ile yanıtı okursunuz. Guzzle, hata yönetimi ve zaman aşımı yapılandırmasını cURL'e göre daha okunur kılar. Laravel tabanlı projelerde Guzzle zaten mevcut olduğundan tercih edilir.
PHP ile gümüş ve platin fiyatını nasıl sorgularım?
Değerli metal sembolleri REST yanıtında bulunur; gümüş ve platin için ilgili sembol anahtarlarından `$data['gumus']['satis']` gibi değerleri okursunuz. API bu metalleri 14 kaynaktan derleyip alış-satış olarak sunar. Paladyum da aynı şekilde ayrı bir sembolle döner.
PHP'de API'den boş veya bozuk yanıt gelirse nasıl anlarım?
`json_decode` çağrısından sonra `json_last_error() === JSON_ERROR_NONE` kontrolüyle yanıtın geçerli JSON olup olmadığını doğrularsınız. Ayrıca HTTP durum kodunu `curl_getinfo` ile kontrol edip 200 dışındaysa hata olarak ele alın. Sunucudaki failover sayesinde veri genelde kesintisiz gelse de istemci tarafında bu kontroller sağlamlık katar.
PHP ile toplu e-fatura kesiminde altın fiyatını nasıl kullanırım?
API'den anlık altın satış fiyatını çekip özel matrah hesabınızda kullanarak PHP tarafında toplu e-fatura kesim akışınızı besleyebilirsiniz. Hasfiyat, sarrafiye satışları için özel matrah e-fatura toplu kesim entegrasyonu sunar. Fiyatı fatura kalemine yansıtmadan önce alış-satış ve ayar bilgisini doğru sembolden aldığınızdan emin olun.
PHP'de fiyatları veritabanına nasıl kaydederim?
cURL ile aldığınız JSON'u `json_decode` ile diziye çevirip PDO veya mysqli ile prepared statement kullanarak MySQL tablosuna yazarsınız. Zaman damgasını da kaydederek fiyat geçmişi oluşturabilirsiniz. Bu yaklaşım, geçmişe dönük raporlama ve grafik üretmek isteyen uygulamalar için idealdir.
PHP'de ayar bazlı (995, 916, 750, 585) altın değerlerini nasıl alırım?
API ayar bazlı sembolleri hazır sunduğundan `$data['995']`, `$data['916']`, `$data['750']` ve `$data['585']` gibi anahtarlardan değerleri okursunuz, milyem oranını kendiniz hesaplamanıza gerek yoktur. Bu, farklı ayarlarda ürün satan kuyumcu yazılımları için pratiktir. Her ayar için alış ve satış ayrı döner.
PHP betiğimi cron ile periyodik çalıştırıp fiyatları nasıl güncellerim?
Sunucuda bir cron görevi tanımlayıp `php /yol/fiyat-guncelle.php` betiğini istediğiniz aralıkta çalıştırarak API'den güncel fiyatları çeker ve veritabanı/ürünlerinizi güncellersiniz. Bu, WooCommerce veya OpenCart mağazalarında fiyat senkronizasyonunun yaygın yoludur. Saniye-altı canlılık gerekiyorsa cron yerine WebSocket veya webhook değerlendirin.
PHP'de Cumhuriyet altını ve Ata lirası fiyatını nasıl çekerim?
Cumhuriyet ve Ata altını ayrı sarrafiye sembolleridir; `$data['cumhuriyet-altini']` ve `$data['ata-altin']` gibi anahtarlardan alış-satış değerlerini okursunuz. API ayrıca Reşat altınını da kapsar. Değerler serbest piyasadaki güncel sarraf kotasyonlarını yansıtır.
PHP'de API isteğini asenkron yapıp sayfayı bloklamadan nasıl çekerim?
Guzzle'ın asenkron promise'lerini veya cURL multi (curl_multi_init) arayüzünü kullanarak birden fazla isteği paralel yürütüp sayfayı bloklamadan fiyatları alabilirsiniz. Ancak tek sembol için basit bir GET yeterliyse senkron istek de milisaniyeler içinde döner. Sürekli akış ihtiyacında ise sunucu tarafı WebSocket köprüsü kurmak daha uygundur.
PHP'de birden çok sembolü tek istekte nasıl alırım?
REST GET uç noktasına sembol filtresi vermeden istek atarsanız yanıtta tüm 67+ sembol tek seferde döner; `foreach ($data as $sembol => $fiyat)` ile hepsini dolaşabilirsiniz. Böylece her sembol için ayrı istek atmak yerine tek çağrıda gram altın, döviz ve sarrafiyeyi birlikte okursunuz. Bu, fiyat tabloları oluşturmayı hızlandırır.
Canlı altın & döviz verisine hemen bağlanın
Dakikalar içinde REST veya Socket.IO ile gerçek zamanlı fiyat akışına başlayın.

