Payyex Geliştirici Dokümantasyonu
Payyex ödeme altyapısını projelerinize entegre etmenin en kolay yolu. İster hazır ürünlerinizi satın, ister dinamik tutarlarla ödeme alın. Modern REST API ve hazır Checkout sayfalarımızla dakikalar içinde ödeme almaya başlayın.
Entegrasyon Adımları
Payyex Hesabı Oluşturun
Payyex paneline kayıt olun ve hesabınızı doğrulayın.
API Anahtarınızı Alın
Profil > API Ayarları bölümünden API anahtarınızı kopyalayın.
Entegrasyon Yöntemini Seçin
Hosted Checkout veya Quick Checkout yöntemlerinden birini seçin.
Test Edin ve Yayına Alın
Entegrasyonunuzu test edin, her şey hazırsa canlıya alın.
Hosted Checkout
En basit entegrasyon yöntemi. Panelden ürününüzü oluşturun, size verilen linki sitenize ekleyin veya müşterinize gönderin.
success_url ve cancel_url
değerleri URL'in query parametresi olarak verilmelidir.
Form POST gövdesindeki aynı isimli alanlar Hosted Checkout yönlendirmesi için kullanılmaz.
URL Yapısı
https://payyex.com/checkout/{slug}/{id}?success_url={url}&cancel_url={url}
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| slug | string | EVET | Ürünün SEO dostu link yapısı. |
| id | integer | EVET | Ürün ID numarası. |
| success_url | url | HAYIR | Ödeme başarılı olduğunda yönlendirilecek URL. |
| cancel_url | url | HAYIR | Ödeme iptal edildiğinde veya hata alındığında yönlendirilecek URL. |
Quick Checkout (Dinamik Tutar)
Panelden ürün oluşturmanıza gerek kalmadan, dinamik tutarlarda ödeme almak için kullanılır.
Güvenli entegrasyonda istekler api_id, ts ve signature alanları ile başlatılır.
api_id ve sunucunuzda tuttuğunuz gizli API anahtarı ile imza üretmeniz gerekir.
api_key değerini tarayıcıya, mobil istemciye, JavaScript dosyasına veya herkese açık depolara koymayın.
Tarayıcı tabanlı Quick Checkout kullanıyorsanız ilgili API erişiminde api_ip alanını 0.0.0.0 bırakın; sabit IP kısıtı verilirse müşteri isteği engellenir.
currency parametresi ile
USD, EUR, GBP gibi farklı para birimleri gönderebilirsiniz. Ödeme gönderdiğiniz tutar ve para birimi ile işlenir.
Örnek: 100 USD gönderirseniz ödeme 100 USD olarak açılır; TRY karşılığı yalnızca minimum tutar ve limit kontrollerinde kullanılır.
HTML Form Entegrasyonu (Önerilen)
POST<!-- Payyex Quick Checkout Form -->
<form action="https://payyex.com/checkout/quick" method="POST">
<input type="hidden" name="api_id" value="12">
<input type="hidden" name="amount" value="200.00">
<input type="hidden" name="currency" value="TRY">
<input type="hidden" name="description" value="Siparis #12345">
<input type="hidden" name="order_id" value="ORDER-12345">
<input type="hidden" name="success_url" value="https://yoursite.com/payment/success">
<input type="hidden" name="cancel_url" value="https://yoursite.com/payment/error">
<input type="hidden" name="ts" value="1710000000">
<input type="hidden" name="signature" value="HMAC_SHA256_SIGNATURE">
<button type="submit">Odeme Yap</button>
</form>
PHP Entegrasyon Örneği
PHP<?php
$apiId = 12;
$apiKey = 'YOUR_SECRET_API_KEY';
$amount = '200.00';
$currency = 'TRY';
$description = 'Sepet Odemesi';
$orderId = 'ORDER-12345';
$successUrl = 'https://yoursite.com/payment/success';
$cancelUrl = 'https://yoursite.com/payment/error';
$timestamp = (string) time();
$payload = [
'api_id' => (string) $apiId,
'amount' => $amount,
'currency' => strtoupper($currency),
'description' => $description,
'order_id' => $orderId,
'success_url' => $successUrl,
'cancel_url' => $cancelUrl,
'ts' => $timestamp,
];
ksort($payload);
$signature = hash_hmac('sha256', http_build_query($payload, '', '&', PHP_QUERY_RFC3986), $apiKey);
echo '<form id="payForm" action="https://payyex.com/checkout/quick" method="POST">';
foreach ($payload as $key => $value) {
echo '<input type="hidden" name="' . htmlspecialchars($key, ENT_QUOTES, 'UTF-8') . '" value="' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . '">';
}
echo '<input type="hidden" name="signature" value="' . htmlspecialchars($signature, ENT_QUOTES, 'UTF-8') . '">';
echo '</form>';
echo '<script>document.getElementById("payForm").submit();</script>';
?>
Geri Dönüş Parametreleri (Callback)
Ödeme işlemi tamamlandığında, müşteriyi success_url veya cancel_url adresinize yönlendirirken URL sonuna aşağıdaki parametreleri ekleriz:
| Durum | URL Parametreleri | Örnek |
|---|---|---|
| BAŞARILI |
status = success
transaction_id = {id}
order_id = {sizin_order_id} (gönderildiyse)
amount = {tutar}
currency = {para_birimi}
ts = {unix_timestamp}
hash = {hmac_sha256}
epin = {code} (varsa)
|
https://site.com/callback?status=success&transaction_id=TXN987654&order_id=ORDER-12345&amount=200.00¤cy=TRY&ts=1710000000&hash=HMAC_SHA256 |
| HATA / İPTAL |
status = error
message = {hata_mesaji}
order_id = {sizin_order_id} (gönderildiyse)
amount = {tutar}
currency = {para_birimi}
ts = {unix_timestamp}
hash = {hmac_sha256}
|
https://site.com/error?status=error&message=Bakiye+yetersiz&order_id=ORDER-12345&amount=200.00¤cy=TRY&ts=1710000000&hash=HMAC_SHA256 |
3 Adımda Kopyala-Yapıştır Entegrasyon (PHP)
EASY<?php
function startQuickCheckout(): void
{
$apiId = 12;
$apiKey = 'YOUR_SECRET_API_KEY';
$amount = '200.00';
$currency = 'TRY';
$description = 'Sepet Odemesi';
$orderId = 'ORD-' . time() . '-' . random_int(1000, 9999);
$successUrl = 'https://yoursite.com/payment/success.php';
$cancelUrl = 'https://yoursite.com/payment/error.php';
$timestamp = (string) time();
$payload = [
'api_id' => (string) $apiId,
'amount' => $amount,
'currency' => strtoupper($currency),
'description' => $description,
'order_id' => $orderId,
'success_url' => $successUrl,
'cancel_url' => $cancelUrl,
'ts' => $timestamp,
];
ksort($payload);
$signature = hash_hmac('sha256', http_build_query($payload, '', '&', PHP_QUERY_RFC3986), $apiKey);
echo '<form id="payyexQuickForm" action="https://payyex.com/checkout/quick" method="POST">';
foreach ($payload as $key => $value) {
echo '<input type="hidden" name="' . htmlspecialchars($key, ENT_QUOTES, 'UTF-8') . '" value="' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . '">';
}
echo '<input type="hidden" name="signature" value="' . htmlspecialchars($signature, ENT_QUOTES, 'UTF-8') . '">';
echo '</form>';
echo '<script>document.getElementById("payyexQuickForm").submit();</script>';
}
?>
Kimlik Doğrulama
Tüm API isteklerinde kimlik doğrulama için api-key header'ı kullanmanız gerekmektedir.
API anahtarınızı Payyex panelinden Profil > API Ayarları bölümünden alabilirsiniz.
API Anahtarı Kullanımı
| Parametre | Tip | Açıklama |
|---|---|---|
| api-key (header) | string | Payyex panelinden aldığınız benzersiz API anahtarınız. |
Quick Checkout ile Ödeme Oluşturma
Dinamik tutarlarla ödeme almak için Quick Checkout endpoint'ini kullanabilirsiniz.
Bu endpoint /api altında değildir; doğrudan /checkout/quick adresine form-POST yapılır.
api_id, ts ve signature zorunludur.
api_key artık istek parametresi olarak gönderilmez; sadece sunucu tarafında imza üretmek için kullanılır.
Endpoint
POSTPOST https://payyex.com/checkout/quick
İstek Parametreleri
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| api_id | integer | EVET | Panel > API Ayarları bölümündeki API erişim kimliği. |
| ts | unix timestamp | EVET | İsteğin üretildiği an. Varsayılan imza süresi 30 dakikadır. |
| signature | string | EVET | `api_id, amount, currency, description, order_id, success_url, cancel_url, ts` alanlarının HMAC-SHA256 imzası. Gizli API anahtarı sadece sunucuda kullanılır. |
| amount | decimal | EVET | Ödeme tutarı (örn: 200.00). Canlı işlemlerde sistemde tanımlı minimum TRY tutarının altı reddedilir. |
| currency | string | EVET | Para birimi: TRY, USD, EUR, GBP. Ödeme gönderilen para birimiyle oluşturulur; TRY karşılığı minimum tutar ve limit kontrollerinde kullanılır. |
| order_id | string | EVET | Harici sipariş referansınız. İmzalı akışta zorunludur. |
| description | string | HAYIR | Ödeme açıklaması (örn: Sipariş #123) |
| success_url | url | EVET | Başarılı ödeme sonrası yönlendirme URL'i. Üretimde HTTPS zorunludur. |
| cancel_url | url | EVET | Başarısız/iptal ödeme sonrası yönlendirme URL'i. Üretimde HTTPS zorunludur. |
Sandbox API (Test Ortamı)
Sandbox ortamı ile canlı sisteme dokunmadan entegrasyonunuzu uçtan uca test edebilirsiniz. Sandbox anahtarları sadece test için çalışır ve gerçek tahsilat oluşturmaz.
api-key değerini sandbox anahtarına çevirerek test yapabilirsiniz.
Endpoint ve request body yapısı canlı ile aynıdır.
Sandbox'ta Desteklenen Endpointler
| Method | Endpoint | Açıklama |
|---|---|---|
| POST | /api/pay/credit_card | Kart sandbox akışı. Dönüşte redirect_url ile test checkout ekranına gider. |
| POST | /api/sale/webhook/verify | Canlı + sandbox callback doğrulama (Quick Checkout fallback dahil). |
| POST | /api/sale/info ve /api/sale/info/transaction | Sandbox başarılı ödemeyi sorgulama. |
Sandbox Kart Testi (Senaryo Seçimi)
Asıl test yöntemi: /api/pay/credit_card çağrısından dönen redirect_url ekranında
3D Onay, 3D Ret veya Bakiye Yetersiz butonlarından birini seçerek sonucu siz belirlersiniz.
| Kart Numarası (Opsiyonel) | Kartla Test Edilirse | Not |
|---|---|---|
| 4111 1111 1111 1111 | successful | Visa onaylı ödeme. |
| 4012 0000 0000 0081 | successful | Visa debit onaylı ödeme. |
| 5200 0000 0000 0007 | successful | Mastercard onaylı ödeme. |
| 5100 0000 0000 0008 | successful | Mastercard debit onaylı ödeme. |
| 3700 0000 0000 002 | successful | American Express onaylı ödeme; 4 haneli CVV kullanın. |
| 4000 0000 0000 3220 | 3DS | 3DS challenge senaryosu. Sandbox OTP/parola: Checkout1! |
| 4000 0000 0000 3238 | 3DS | 3DS frictionless onay senaryosu. |
| 4000 0000 0000 3246 | failed | 3DS doğrulama başarısız senaryosu. |
| 4000 0000 0000 3253 | failed | 3DS timeout senaryosu. |
| 4000 0000 0000 0002 | failed | Yetersiz bakiye senaryosu. |
| 4000 0000 0000 0010 | failed | Süresi dolmuş kart senaryosu. |
| 4000 0000 0000 0028 | failed | İşlem reddi senaryosu. |
| 4000 0000 0000 0036 | failed | Geçersiz kart senaryosu. |
| 4000 0000 0000 0044 | failed | Kayıp/çalıntı kart senaryosu. |
| 4000 0000 0000 0051 | failed | Limit aşıldı senaryosu. |
| 5000 0000 0000 0009 | failed | Mastercard ret senaryosu. |
| 4000 0000 0000 0069 | failed | Gateway timeout senaryosu. |
| 4000 0000 0000 0077 | failed | Processing error senaryosu. |
failed olur.
Sandbox Notları
1. Tüm sandbox isteklerinde kimlik doğrulama api-key header'ı ile yapılır; canlı key yerine sandbox key kullanmanız yeterlidir.
2. Sandbox ödemeler panelde Sandbox rozetiyle görünür; canlı bakiyeyi, net kazancı ve gerçek tahsilatı etkilemez.
3. Kart testlerinde başarılı, ret, 3DS ve hata senaryoları yukarıdaki kartlarla simüle edilir.
4. Papara sandbox desteği şu an yoktur; kredi kartı sandbox testleri aktiftir.
Webhook (Bildirimler)
Ödeme işlemleri tamamlandığında sunucunuza otomatik bildirim göndermek için webhook URL'inizi tanımlayabilirsiniz. Webhook'lar, ödeme durumu değişikliklerini gerçek zamanlı olarak almanızı sağlar.
Webhook Ayarları
Webhook URL'inizi Payyex Paneli > Profil > API Ayarları bölümünden tanımlayabilirsiniz.
Global ödeme bildirimi URL'i
POST https://payyex.com/api/public/payment/notification
Harici ödeme panelinde global bildirim URL'i istenirse bu adres kullanılabilir. Ödeme başına gönderilen bildirim URL'leri ayrıca otomatik oluşturulur.
Webhook Payload Örneği
{
"order_id": "ORD-12345",
"hash": "5c3d2b3b0a1d9f...",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "successful",
"message": "successful",
"type": "credit_card",
"amount": 200.00,
"currency": "TRY",
"transaction_id": "a1258260-0331-49ad-ad86-5e9f_313"
}
is_valid=true ve official_status=successful sonucu alındığında sipariş başarılı duruma geçirilmelidir.
1) Webhook isteği alındığında uç noktanızın hızlı şekilde 200 OK dönmesi, asıl işleme adımlarının arka planda yürütülmesi önerilir.
2)
success_url/cancel_url sadece kullanıcı yönlendirme bilgisidir; ödeme kesinlik kriteri değildir.3) Gelen webhook verisi (
order_id, uuid, status, hash) /api/sale/webhook/verify endpoint'i üzerinden doğrulanmalıdır.4) Karar kuralı:
is_valid=true ve official_status=successful birlikte sağlanıyorsa sipariş başarılıya alınmalıdır; diğer tüm durumlarda başarılıya alınmamalıdır.5) Webhook aynı sipariş için birden fazla kez gelebileceğinden
uuid veya order_id bazlı idempotent kontrol zorunludur.6)
/api/sale/verify ve /api/sale/verify/transaction kart/papara akışında manuel onay amacıyla kullanılmaz; ilgili akış için doğru endpoint /api/sale/webhook/verify'dir.7)
mode alanı (api_cc_pos, quick_checkout_fallback, sandbox) bilgilendirme amaçlıdır; operasyonel karar alanları is_valid ve official_status olmalıdır.
Webhook Doğrulama Endpoint'i
POST https://payyex.com/api/sale/webhook/verify
Header: api-key: YOUR_API_KEY
{
"order_id": "ORD-12345",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"status": "successful",
"hash": "5c3d2b3b0a1d9f..."
}
{
"success": true,
"is_valid": true,
"payment_confirmed": true,
"official_status": "successful",
"status_match": true,
"hash_match": true,
"order_id": "ORD-12345",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"mode": "quick_checkout_fallback"
}
Not: Quick Checkout akışlarında doğrulama sonucu mode=quick_checkout_fallback dönebilir. Bu beklenen davranıştır.
Webhook Durumları
| status | Açıklama |
|---|---|
| successful | Ödeme başarıyla tamamlandı. |
| failed | Ödeme başarısız oldu. |