Genel Bakış
Columbia Pay API
Columbia Pay API'ı; müşterilerin para yatırma, para çekme ve işlem durumu sorgulama işlemlerini güvenli bir şekilde gerçekleştirmesine olanak tanır. Tüm istekler HTTPS üzerinden ve hash imzasıyla doğrulanır.
| API Base URL | https://columbiamoneypay.com |
| Dokümantasyon | https://api.columbiamoneypay.com |
Kimlik Doğrulama
Kimlik Bilgileri
Her müşteriye aşağıdaki bilgiler verilir. Bu bilgileri gizli tutun ve kimseyle paylaşmayın.
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
Terminal ID | String | Evet | Müşteri tanımlayıcınız (örn: demobahis) |
API Key | String | Evet | İşlemleri imzalamak için kullanılan anahtar (pk_live_...) |
Secret Key | String | Evet | Hash hesaplamasında kullanılan gizli anahtar (sk_live_...) |
Terminal ID: demobahis
API Key: pk_live_a1b2c3d4e5f6g7h8i9j0
Secret Key: sk_live_z9y8x7w6v5u4t3s2r1q0Güvenlik
IP Whitelist
Sunucularınızda IP kısıtlaması uyguluyorsanız, Columbia Pay tarafından gönderilen isteklerin (özellikle callback / webhook bildirimlerinin) engellenmemesi için aşağıdaki IP adreslerimizi güvenli listenize (whitelist) eklemeniz gerekir.
Columbia Pay IP adresleri
52.28.237.6618.184.145.1903.11.47.1118.135.114.5135.181.64.13235.181.116.200Başlangıç
Kurulum ve Entegrasyon
Entegrasyon iki taraflı bir bilgi alışverişiyle başlar: Columbia Pay size erişim bilgilerinizi verir, siz de karşılığında oyuncu yönlendirmesi ve bildirimler için iki adres iletirsiniz.
Columbia Pay’in Size Verdikleri
Hesabınız açıldığında size özel Terminal ID, API Key ve Secret Key tanımlanır (bkz. Kimlik Bilgileri). Tüm istekleriniz bu bilgilerle imzalanır ve doğrulanır.
Sizin Columbia Pay’e İletmeniz Gerekenler
| Bilgi | Amaç | Kaynak |
|---|---|---|
| Affiliate (yönlendirme) linki | Oyuncu, deposit sayfasındaki işlemini tamamladıktan sonra bu adres üzerinden sitenize geri döner. | Entegrasyon sonrası bizzat sizden talep edilir. |
| Callback adresi | İşlem talepleri sonuçlandığında (onay/iptal) sonuç bildiriminin gönderileceği adres. | Sitenizi satın aldığınız yazılım firması tarafından sağlanır. |
redirecturl parametresinden bağımsız, hesabınıza kayıtlı genel yönlendirme adresidir. Callback adresini genellikle site yazılımınızı sağlayan firma verir; bu adrese gönderilen bildirimlerin nasıl işleneceği Callback (Webhook) bölümünde anlatılmıştır.Güvenlik
Hash Hesaplama
Hash, isteğinizin gerçekten size ait olduğunu ispatlayan SHA-256 imzasıdır. Parametreler tam sırayla ve aralarında boşluk olmadan birleştirilir, ardından SHA-256 ile 64 karakterlik hex özet üretilir.
| İşlem | Hash Formülü |
|---|---|
| Yatırım | apiKey + islemid + tuser + tadsoyad + amount + secretKey |
| Çekim | apiKey + islemid + tuser + tadsoyad + amount + secretKey |
| Durum Sorgulama | apiKey + islemid + secretKey |
Tutar (amount) Formatı
amount her zaman ondalık ayracı nokta olacak şekilde gönderilmelidir. Hash, tutar tam olarak gönderdiğiniz metinle hesaplanır; bu yüzden hash’te kullandığınız değer ile istekte gönderdiğiniz değer birebir aynı olmalıdır.
| Doğru | Yanlış |
|---|---|
1000.00 | 1.000,00 · 1000,00 |
Endpoint
Yatırım
Yatırım talebini başlatmak için oyuncuyu aşağıdaki URL’ye yönlendirin (tarayıcıda açın). Oyuncu bu sayfada ödeme yöntemini onaylayıp talebini oluşturur. Tüm parametreler query string ile gönderilir ve zorunludur.
/deposit/{terminalid}?tuser={tuser}&tadsoyad={tadsoyad}&amount={amount}&islemid={islemid}&payment_name={payment_name}&hash={hash}&redirecturl={redirecturl}| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
terminalid | String (path) | Evet | Terminal ID (örn: demobahis) |
tuser | String (query) | Evet | Sistem kullanıcı adı |
tadsoyad | String (query) | Evet | Ad Soyad (gerçek isim) |
amount | String (query) | Evet | Yatırım tutarı TRY (örn: "1000.00") |
islemid | String (query) | Evet | Benzersiz işlem ID |
payment_name | String (query) | Evet | Ödeme yöntemi (aşağıdaki listeden) |
hash | String (query) | Evet | SHA256 imzası (aşağıdaki formül) |
redirecturl | String (query) | Evet | İşlem sonrası oyuncunun döneceği URL |
Hash Formülü
SHA256(apiKey + islemid + tuser + tadsoyad + amount + secretKey)Desteklenen Ödeme Yöntemleri
Banka
papara · paycell · hepsipay · param · paribu · havale · vip-havale
Kripto
bitcoin · tethertrc20 · tethererc20 · tron · solana
Örnek
https://columbiamoneypay.com/deposit/demobahis?tuser=user123&tadsoyad=Ahmet%20Yilmaz&amount=1000.00&islemid=TRX20260325001&payment_name=havale&hash=SHA256_DEGERI&redirecturl=https://siteniz.com/geri-donusAkış
Bu endpoint bir JSON yanıtı döndürmez. Oyuncu, ödeme yöntemini onayladığı yatırım sayfasına yönlendirilir; talep oluşturulduktan sonra redirecturl adresine geri döner. İşlemin nihai durumunu öğrenmek için Durum Sorgulama endpoint’ini veya callback’i kullanın.
redirecturl ve boşluk içeren tadsoyad, mutlaka URL encode edilmelidir. Aksi halde redirecturl kendi query parametrelerini içeriyorsa (örn. ?user=123&source=pay) URL bozulur. JavaScript’te URLSearchParams veya PHP’de urlencode() bunu otomatik yapar.Endpoint
Çekim
Çekim talebi POST yöntemiyle, sunucudan sunucuya (server-to-server) gönderilir. İstek gövdesi JSON’dır ve hash imzası zorunludur.
/api/withdrawİstek Gövdesi
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
terminalid | String | Evet | Terminal ID |
tuser | String | Evet | Sistem kullanıcı adı |
tadsoyad | String | Evet | Ad Soyad (gerçek isim) |
amount | String | Evet | Çekim tutarı (örn: "500.00") |
islemid | String | Evet | Benzersiz çekim ID (maks. 100 karakter) |
payment_name | String | Evet | Ödeme yöntemi slug (Yatırım bölümündeki liste geçerlidir) |
cekim_iban | String | Evet | Fiat yöntemlerde paranın transfer edileceği IBAN; kripto yöntemlerde ise cüzdan (wallet) adresi olarak kullanılır |
hash | String (64) | Evet | SHA256 imzası |
havale, papara, paycell veya kripto yöntemleri). Çekim için ayrı bir liste yoktur; aynı slug’ları kullanın.Hash Formülü
SHA256(apiKey + islemid + tuser + tadsoyad + amount + secretKey)Yanıtlar
{
"message": "İşlem başarıyla oluşturuldu",
"islemid": "CKM20260325001",
"status": "pending"
}pending olarak başlar; talep sonuçlandığında sonuç, sistemde kayıtlı callback URL’inize otomatik olarak gönderilir (aşağıdaki Callback bölümüne bakın).{ "error": "Bu işlem ID'si ile daha önce bir işlem yapılmış." }{ "error": "Eksik zorunlu alanlar" }Endpoint
Durum Sorgulama (POST)
İşlem durumunu hash ile güvenli şekilde sorgulamak için POST yöntemini kullanın.
/api/status-checkİstek Gövdesi
{
"terminalid": "demobahis",
"islemid": "TRX20260325001",
"hash": "sha256_hash_degeri"
}Hash Formülü
SHA256(apiKey + islemid + secretKey)Yanıtlar
{
"terminalid": "demobahis",
"tuser": "user123",
"tadsoyad": "Ahmet Yilmaz",
"amount": "1000.00",
"islemid": "TRX20260325001",
"payment_name": "bitcoin",
"status": "pending",
"type": "deposit",
"cekim_iban": null,
"redirecturl": "https://siteniz.com/geri-donus",
"hash": "sha256_hash_degeri"
}cekim_iban yalnızca çekim işlemlerinde dolu gelir; yatırımlarda null döner. Bu endpoint yan etkisizdir: yalnızca işlem durumunu döndürür, callback tetiklemez. Durumu istediğiniz sıklıkta güvenle sorgulayabilirsiniz; callback yalnızca işlem durumu değiştiğinde otomatik gönderilir.{ "error": "Invalid hash - unauthorized" }{ "error": "Transaction not found" }Status Değerleri
| Status | Tür | Açıklama |
|---|---|---|
pending | Ara durum | İşlem bekliyor. Tekrar sorgulanabilir; henüz nihai değildir. |
completed | Final | İşlem onaylandı ve başarıyla tamamlandı. |
canceled | Final | İşlem iptal edildi / reddedildi. |
pending ara durumdur ve tekrar sorgulanabilir. completed ve canceled nihai (final) durumlardır; değişmezler ve tekrar sorgulamaya gerek yoktur.Bildirim
Callback (Webhook)
Callback yalnızca bir işlemin durumu değiştiğinde — yani pending iken completed ya da canceled olduğunda — kayıtlı callback URL’inize otomatik olarak bir POST isteği olarak gönderilir. Böylece işlemi sürekli sorgulamanıza gerek kalmaz. Durum sorgulama (status-check) endpoint’i callback tetiklemez. Callback URL’iniz size özel olarak tanımlanır.
{sizin_callback_url_iniz}Callback Gövdesi
{
"tuser": "user123",
"tadsoyad": "Ahmet Yilmaz",
"amount": "1000.00",
"islemid": "TRX20260325001",
"hash": "sha256_hash_degeri",
"updated_at": "2026-03-25T10:30:45.000000Z",
"type": "deposit",
"status": "completed",
"status_reason": ""
}| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
tuser | String | Evet | İşlemi başlatırken gönderdiğiniz kullanıcı ID’si |
tadsoyad | String | Evet | İşlemi başlatırken gönderdiğiniz ad soyad |
amount | String | Evet | İşlem tutarı (ondalık, örn. "1000.00") |
islemid | String | Evet | İşleminizin benzersiz ID’si; gönderdiğinizin aynısıdır |
hash | String | Evet | Orijinal istekte gönderdiğiniz hash ile aynıdır |
updated_at | String (ISO 8601) | Evet | İşlem durumunun güncellendiği zaman damgası |
type | String | Evet | İşlem türü: "deposit" veya "withdrawal" |
status | String | Evet | Nihai durum: completed veya canceled |
status_reason | String | Hayır | İptal açıklaması (varsa, yoksa boş string) |
Callback Hash Doğrulama
Callback’in gerçekten Columbia Pay’den geldiğini doğrulamak için hash alanını kontrol edin. Sistem callback için yeni bir hash üretmez; callback’te gelen hash, o işlemi başlatırken (yatırım/çekim) sizin gönderdiğiniz hash’in birebir aynısıdır.
Doğrulamak için, işlem başlarken islemid ile birlikte kaydettiğiniz hash değeri ile callback’te gelen hash’i karşılaştırın. İsterseniz aynı formülle yeniden hesaplayıp da doğrulayabilirsiniz:
SHA256(apiKey + islemid + tuser + tadsoyad + amount + secretKey)Sizden Beklenen Yanıt
Callback’i başarıyla aldığınızı bildirmek için gövdesinde status alanı success (veya true) olan bir JSON dönmelisiniz. Yalnızca HTTP 200 dönmek yeterli değildir; yanıt gövdesi geçerli bir JSON olmalı ve Content-Type: application/json başlığıyla gönderilmelidir. OK gibi düz metin yanıtlar JSON olarak çözümlenemediği için başarısız sayılır ve tekrar gönderim tetiklenir.
{ "status": "success" }islemid’yi birden çok kez alabilirsiniz). 3 denemenin ardından geçerli onay alınamazsa callback başarısız olarak kaydedilir ve yalnızca manuel tetikleme ile yeniden gönderilir (sonsuz döngü yoktur). Not: Tekrar denemelerin başarısız olması işlemin durumunu değiştirmez; işlem yine completed veya canceled olarak kalır.Referans
Hata Kodları
| Kod | Anlamı | Açıklama |
|---|---|---|
200 | OK | İşlem başarılı |
201 | Created | Yeni kayıt oluşturuldu |
400 | Bad Request | Eksik veya yanlış parametreler |
401 | Unauthorized | Yetkisiz (hash hatası) |
404 | Not Found | İşlem bulunamadı |
409 | Conflict | Duplicate işlem ID |
500 | Server Error | Sunucu hatası |
{
"error": "Hata açıklaması",
"details": "Opsiyonel detay bilgisi"
}Sık Karşılaşılan Hatalar
| HTTP | error mesajı | Sebep |
|---|---|---|
400 | Missing required fields / Eksik zorunlu alanlar | Zorunlu bir alan gönderilmedi |
401 | Hash validation failed | Yatırım/çekim hash imzası hatalı |
401 | Invalid hash - unauthorized | Durum sorgulamada hash eşleşmedi |
404 | Customer not found / Geçersiz terminal ID | Terminal ID sistemde yok |
404 | Transaction not found | İşlem (islemid) bulunamadı |
409 | Duplicate transaction ID | Aynı islemid ile daha önce işlem yapılmış |
Entegrasyon
Kod Örnekleri
Yatırım URL’i Oluşturma — Node.js
const crypto = require('crypto')
const apiKey = 'pk_live_abc123'
const secretKey = 'sk_live_xyz789'
const terminalid = 'demobahis'
const tuser = 'user123'
const tadsoyad = 'Ahmet Yilmaz'
const amount = '1000.00'
const islemid = 'TRX20260325001'
const payment_name = 'havale'
const redirecturl = 'https://siteniz.com/geri-donus'
// Yatırım hash: apiKey + islemid + tuser + tadsoyad + amount + secretKey
const hash = crypto
.createHash('sha256')
.update(apiKey + islemid + tuser + tadsoyad + amount + secretKey)
.digest('hex')
const params = new URLSearchParams({
tuser, tadsoyad, amount, islemid, payment_name, hash, redirecturl,
})
// Oyuncuyu bu URL'ye yönlendirin:
const depositUrl = `https://columbiamoneypay.com/deposit/${terminalid}?${params.toString()}`
console.log(depositUrl)Çekim — Node.js
const crypto = require('crypto')
const apiKey = 'pk_live_abc123'
const secretKey = 'sk_live_xyz789'
const terminalid = 'demobahis'
const tuser = 'user123'
const tadsoyad = 'Ahmet Yilmaz'
const amount = '500.00'
const islemid = 'CKM20260325001'
const payment_name = 'havale'
const cekim_iban = 'TR123456789012345678901234'
const hashString = apiKey + islemid + tuser + tadsoyad + amount + secretKey
const hash = crypto.createHash('sha256').update(hashString).digest('hex')
const res = await fetch('https://columbiamoneypay.com/api/withdraw', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
terminalid, tuser, tadsoyad, amount,
islemid, payment_name, cekim_iban, hash,
}),
})
console.log(await res.json())Çekim — Python
import hashlib, requests
api_key = 'pk_live_abc123'
secret_key = 'sk_live_xyz789'
tuser = 'user123'
tadsoyad = 'Ahmet Yilmaz'
amount = '500.00'
islemid = 'CKM20260325001'
hash_string = api_key + islemid + tuser + tadsoyad + amount + secret_key
hash_value = hashlib.sha256(hash_string.encode()).hexdigest()
res = requests.post('https://columbiamoneypay.com/api/withdraw', json={
'terminalid': 'demobahis',
'tuser': tuser,
'tadsoyad': tadsoyad,
'amount': amount,
'islemid': islemid,
'payment_name': 'havale',
'cekim_iban': 'TR123456789012345678901234',
'hash': hash_value,
})
print(res.json())Çekim — PHP
<?php
$apiKey = 'pk_live_abc123';
$secretKey = 'sk_live_xyz789';
$tuser = 'user123';
$tadsoyad = 'Ahmet Yilmaz';
$amount = '500.00';
$islemid = 'CKM20260325001';
$hashString = $apiKey . $islemid . $tuser . $tadsoyad . $amount . $secretKey;
$hash = hash('sha256', $hashString);
$data = [
'terminalid' => 'demobahis',
'tuser' => $tuser,
'tadsoyad' => $tadsoyad,
'amount' => $amount,
'islemid' => $islemid,
'payment_name' => 'havale',
'cekim_iban' => 'TR123456789012345678901234',
'hash' => $hash,
];
$ch = curl_init('https://columbiamoneypay.com/api/withdraw');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
echo curl_exec($ch);Durum Sorgulama — Node.js
const crypto = require('crypto')
const apiKey = 'pk_live_abc123'
const secretKey = 'sk_live_xyz789'
const islemid = 'TRX20260325001'
const hash = crypto
.createHash('sha256')
.update(apiKey + islemid + secretKey)
.digest('hex')
const res = await fetch('https://columbiamoneypay.com/api/status-check', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ terminalid: 'demobahis', islemid, hash }),
})
console.log(await res.json())