Geliştiriciler

Geliştirici Merkezi

Kredi Kartı ve Ödeme Linki ile tahsilat. Tek entegrasyon yöntemi: PayStripet Checkout (Ödeme) Sayfası.

Adım Adım Entegrasyon

Henüz üye değil misiniz? 1) Başvuru formunu doldurun ve kullanmak istediğiniz ödeme yöntemlerini seçin. 2) Başvurunuz onaylanınca mağaza panelinize giriş yapın; Mağaza No, Publishable Key ve Secret Key otomatik oluşur. 3) Aşağıdan yönteminizi seçip adımları uygulayın — paneldeki kodlar sizin anahtarlarınızla hazır gelir. Üyeyseniz doğrudan panelinizdeki Entegrasyon ve API menüsünü kullanın.

Kredi Kartı Entegrasyonu

Checkout (Ödeme) Sayfasına Yönlendirme
Adım Adım Kurulum
  1. Başvuru yapın (Başvuru Formu); onaylanınca mağaza panelinizde Mağaza No, Publishable Key ve Secret Key oluşur. Aşağıdaki örneklerde bu değerleri kendinizinkilerle değiştirin.
  2. Müşteri sitenizde "Öde" butonuna basar.
  3. Sunucunuz sipariş bilgisini (tutar, sipariş no, ürün, sipariş özeti) Secret Key ile imzalayıp bir token üretir (önerilir; isterseniz sadece pk + amount + order parametresi de yeterli). İsteğe bağlı olarak order_summary (sipariş özeti), product_image (ürün görseli) ve site_logo (site logonuz) bağlantılarını da ekleyin; ödeme sayfasında logo üstte, ürün görseli sipariş özetinde görünür.
  4. Müşteriyi /checkout?pk=…&token=… adresine yönlendirirsiniz.
  5. Müşteri e-posta, telefon ve kart bilgisini PayStripet checkout sayfasında girer, bankanın 3D Secure SMS doğrulamasını yapar.
  6. Müşteri return_url adresinize mp_status, mp_order, mp_tid, mp_token ile döner; sipariş durumunu webhook ile kesinleştirin.
  7. Canlıya almadan önce mağaza panelinizdeki Demo Ödemeler ile akışı deneyin.
Sitenize Nasıl Eklenir?
Dosya / SayfaNereye?Ne yapar?
odeme.phpSepet / sipariş özeti sayfanızdaki "Ödeme Yap" butonunun gittiği yer (örn. https://siteniz.com/odeme.php)Siparişi veritabanınıza "ödeme bekliyor" olarak kaydeder, token üretir ve müşteriyi PayStripet ödeme sayfasına yönlendirir. Aşağıdaki PHP / Node.js / Python kodu bu dosyaya yazılır.
siparis-sonuc.phpreturn_url olarak verdiğiniz adres (örn. https://siteniz.com/siparis-sonuc)Müşteri ödeme sonrası buraya döner. mp_status değerine göre "Teşekkürler" veya "Ödeme başarısız" mesajı gösterin. Siparişi burada değil, webhook ile kesinleştirin.
paystripet-webhook.phpSunucunuzda herkese açık bir adres; Panel → Ayarlar → İşyeri Bildirimleri alanına yazılırİmzayı doğrular ve siparişi "ödendi" / "iptal" olarak günceller.
<?php
$pk = 'pk_live_XXXXXXXXXXXXXXXX';
$secret = 'sk_live_XXXXXXXXXXXXXXXX'; // yalnızca sunucuda
$payload = ['amount' => 149.90, 'order' => 'ORD-' . time(), 'currency' => 'TRY',
  'product' => 'Örnek Ürün', 'order_summary' => '1 adet Örnek Ürün', 'product_image' => 'https://siteniz.com/img/urun.jpg', 'site_logo' => 'https://siteniz.com/img/logo.png'];
$b64 = fn($x) => rtrim(strtr(base64_encode($x), '+/', '-_'), '=');
$h = $b64(json_encode(['alg' => 'HS256', 'typ' => 'JWT']));
$b = $b64(json_encode($payload, JSON_UNESCAPED_UNICODE));
$token = "$h.$b." . $b64(hash_hmac('sha256', "$h.$b", $secret, true));
header('Location: https://paystripet.com/checkout?pk=' . urlencode($pk) . '&token=' . urlencode($token) . '&return_url=' . urlencode('https://siteniz.com/siparis-sonuc'));
# Token olmadan, parametrelerle ödeme bağlantısı (tarayıcıda açılır)
curl -I "https://paystripet.com/checkout?pk=pk_live_XXXXXXXXXXXXXXXX&amount=149.90&order=ORD-1001&currency=TRY&product_image=https%3A%2F%2Fsiteniz.com%2Fimg%2Furun.jpg&site_logo=https%3A%2F%2Fsiteniz.com%2Fimg%2Flogo.png&return_url=https%3A%2F%2Fsiteniz.com%2Fsiparis-sonuc"

# İmzalı token (bash + openssl)
b64(){ openssl base64 -A | tr '+/' '-_' | tr -d '='; }
H=$(printf '{"alg":"HS256","typ":"JWT"}' | b64)
B=$(printf '{"amount":149.90,"order":"ORD-1001","currency":"TRY","product_image":"https://siteniz.com/img/urun.jpg","site_logo":"https://siteniz.com/img/logo.png"}' | b64)
S=$(printf '%s' "$H.$B" | openssl dgst -sha256 -hmac 'sk_live_XXXXXXXXXXXXXXXX' -binary | b64)
echo "https://paystripet.com/checkout?pk=pk_live_XXXXXXXXXXXXXXXX&token=$H.$B.$S"
const crypto = require('crypto');
const pk = 'pk_live_XXXXXXXXXXXXXXXX', secret = 'sk_live_XXXXXXXXXXXXXXXX'; // yalnızca sunucuda
const b64 = (x) => Buffer.from(x).toString('base64url');
const h = b64(JSON.stringify({ alg: 'HS256', typ: 'JWT' }));
const b = b64(JSON.stringify({ amount: 149.90, order: 'ORD-' + Date.now(), currency: 'TRY', order_summary: '1 adet Örnek Ürün', product_image: 'https://siteniz.com/img/urun.jpg', site_logo: 'https://siteniz.com/img/logo.png' }));
const s = crypto.createHmac('sha256', secret).update(h + '.' + b).digest('base64url');
const url = 'https://paystripet.com/checkout?pk=' + encodeURIComponent(pk) + '&token=' + `${h}.${b}.${s}` + '&return_url=' + encodeURIComponent('https://siteniz.com/siparis-sonuc');
// Express: res.redirect(url);
import base64, hashlib, hmac, json, time, urllib.parse
pk, secret = 'pk_live_XXXXXXXXXXXXXXXX', 'sk_live_XXXXXXXXXXXXXXXX'  # yalnızca sunucuda
b64 = lambda x: base64.urlsafe_b64encode(x).rstrip(b'=').decode()
h = b64(json.dumps({'alg': 'HS256', 'typ': 'JWT'}).encode())
b = b64(json.dumps({'amount': 149.90, 'order': f'ORD-{int(time.time())}', 'currency': 'TRY', 'product_image': 'https://siteniz.com/img/urun.jpg', 'site_logo': 'https://siteniz.com/img/logo.png'}).encode())
s = b64(hmac.new(secret.encode(), f'{h}.{b}'.encode(), hashlib.sha256).digest())
url = 'https://paystripet.com/checkout?' + urllib.parse.urlencode({'pk': pk, 'token': f'{h}.{b}.{s}', 'return_url': 'https://siteniz.com/siparis-sonuc'})
# Flask: return redirect(url)

Diğer

Ödeme Linki ile Tahsilat
Adım Adım Kurulum
  1. Başvuru yapın (Başvuru Formu); onaylanınca mağaza panelinizde Mağaza No, Publishable Key ve Secret Key oluşur. Aşağıdaki örneklerde bu değerleri kendinizinkilerle değiştirin.
  2. Panel → Ödeme Linkleri → + Link Oluştur ile tutar, para birimi ve ürün girin.
  3. Oluşan linki veya QR kodunu WhatsApp, e-posta ya da sosyal medyada paylaşın.
  4. Müşteri linkten açık yöntemlerinizle öder; link ödenince otomatik kapanır.
  5. Canlıya almadan önce mağaza panelinizdeki Demo Ödemeler ile akışı deneyin.
Sitenize Nasıl Eklenir?
Dosya / SayfaNereye?Ne yapar?
Kod gerekmezPanel → Ödeme LinkleriLink oluşturup WhatsApp / e-posta / sosyal medyada paylaşın. Sitenizde göstermek isterseniz linki bir butonun href değerine koymanız yeterli.
Ödeme Sonucu Bildirimi (Webhook)
Adım Adım Kurulum
  1. Başvuru yapın (Başvuru Formu); onaylanınca mağaza panelinizde Mağaza No, Publishable Key ve Secret Key oluşur. Aşağıdaki örneklerde bu değerleri kendinizinkilerle değiştirin.
  2. Sunucunuzda bildirim alacak bir adres hazırlayın (örn. https://siteniz.com/paystripet-webhook).
  3. Panel → Ayarlar → İşyeri Bildirimleri alanına bu adresi kaydedip aktif edin.
  4. Gelen her istekte X-PayStripet-Signature: sha256=… başlığını, ham gövdenin Secret Key ile HMAC-SHA256 (hex) değeriyle karşılaştırın.
  5. İmza doğruysa status alanına göre siparişi güncelleyin (success / pending / rejected / refunded) ve 200 dönün.
  6. Canlıya almadan önce mağaza panelinizdeki Demo Ödemeler ile akışı deneyin.
Sitenize Nasıl Eklenir?
Dosya / SayfaNereye?Ne yapar?
paystripet-webhook.phpSitenizin kök dizini veya /api altı (örn. https://siteniz.com/paystripet-webhook.php). Oturum/giriş kontrolü OLMAMALI, POST kabul etmeli.Aşağıdaki kodu bu dosyaya yapıştırın; adresi Panel → Ayarlar → İşyeri Bildirimleri alanına kaydedip "Aktif" yapın.
Sipariş tablonuzVeritabanınızorder_id ile siparişi bulup status alanına göre güncelleyin. Aynı bildirim birden fazla gelebilir; daha önce işlenmişse tekrar işlemeyin.
<?php
$secret = 'sk_live_XXXXXXXXXXXXXXXX';
$body = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_PAYSTRIPET_SIGNATURE'] ?? '';
if (!hash_equals('sha256=' . hash_hmac('sha256', $body, $secret), $sig)) { http_response_code(401); exit; }
$e = json_decode($body, true); // status, order_id, tid, amount, currency, method
// siparişi güncelleyin
http_response_code(200); echo 'OK';
# Kendi webhook adresinizi imzalı örnek istekle test edin
BODY='{"event":"payment.result","status":"success","order_id":"SIP-1001","amount":149.9,"currency":"TRY"}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac 'sk_live_XXXXXXXXXXXXXXXX' | sed 's/^.* //')
curl -X POST "https://siteniz.com/paystripet-webhook" -H 'Content-Type: application/json' -H "X-PayStripet-Signature: sha256=$SIG" -d "$BODY"
const crypto = require('crypto'), express = require('express');
const secret = 'sk_live_XXXXXXXXXXXXXXXX', app = express();
app.post('/paystripet-webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const sig = 'sha256=' + crypto.createHmac('sha256', secret).update(req.body).digest('hex');
  const got = req.get('X-PayStripet-Signature') || '';
  if (sig.length !== got.length || !crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(got))) return res.sendStatus(401);
  const e = JSON.parse(req.body); // status, order_id, tid, amount, currency
  res.send('OK');
});
app.listen(3000);
import hashlib, hmac, json
from flask import Flask, request
secret, app = 'sk_live_XXXXXXXXXXXXXXXX', Flask(__name__)
@app.post('/paystripet-webhook')
def hook():
    sig = 'sha256=' + hmac.new(secret.encode(), request.get_data(), hashlib.sha256).hexdigest()
    if not hmac.compare_digest(sig, request.headers.get('X-PayStripet-Signature', '')):
        return '', 401
    e = json.loads(request.get_data())  # status, order_id, tid, amount, currency
    return 'OK'

Ödeme Yöntemleri

Başvuru sırasında kullanmak istediğiniz yöntemleri seçersiniz: Kredi Kartı, Havale/EFT ve Link ile Ödeme. PayStripet yöneticisi onaylarken hangi yöntemlerin açılacağını belirler; sonradan da açıp kapatabilir.

  • Tek API anahtarı tüm yöntemlerde kullanılır; yalnızca onaylı yöntemler çalışır.
  • Kapalı bir yöntemin sayfası veya API'si "… yöntemi bu üye işyeri için aktif değil." hatasıyla reddedilir.
  • Mağaza paneliniz (menü, işlem filtreleri, entegrasyon dokümanı) yalnızca açık yöntemlere göre oluşur.

API Anahtarları

Mağaza Paneli → API Anahtarları / Entegrasyon bölümünden alın:

AlanZorunluAçıklama
merchant_no (Mağaza No)—Üye işyeri numaranız.
publishable_key (pk / api_key)—Herkese açık anahtar; ödeme sayfası adreslerinde ve formlarda kullanılır.
secret_key—GİZLİ. Sadece sunucunuzda tutun; imza (hash), webhook ve mp_token doğrulamasında kullanılır.
Alan adı kilidi: panelde web siteniz tanımlıysa return_url adresi https olmalı ve bu alan adında bulunmalıdır.

Para Birimleri

Ödeme hangi para biriminde gönderilirse o para biriminde alınır, kaydedilir ve bakiyenize o para biriminde eklenir (TL'ye çevrilmez). Desteklenen kodlar: TRY (₺), USD ($), EUR (€), GBP (£), RUB (₽). currency gönderilmezse TRY kabul edilir; TL yazımı da TRY sayılır.

  • Checkout sayfası (/checkout): &currency=EUR parametresi veya token/data içinde currency alanı.
  • Kart: bankaya giden istekte currency gelen para birimiyle iletilir.
  • Dönüş alanları, mp_token, postMessage ve webhook'ta currency alanı bulunur. Mağaza panelinde bakiye ve para çekme para birimine göre ayrı tutulur.
GET https://paystripet.com/checkout?pk=PUBLISHABLE_KEY&amount=49.90&currency=EUR&order=SIP-1002

Kredi Kartı — Checkout (Ödeme) Sayfası

Müşteriyi PayStripet ödeme sayfasına yönlendirin; kart bilgisi PayStripet'de girilir, banka 3D Secure (SMS) akışı çalışır.

GET https://paystripet.com/checkout?pk=PUBLISHABLE_KEY&amount=149.90&order=SIP-1001&return_url=https%3A%2F%2Fsiteniz.com%2Fsonuc
AlanZorunluAçıklama
pkEvetPublishable key
amountEvetTutar. Sayfada %2,09 hizmet bedeli eklenmiş toplam gösterilir.
currencyHayırTRY (varsayılan), USD, EUR, GBP, RUB
orderHayırSipariş numaranız
productHayırÜrün adı
order_summaryHayırSipariş özeti metni (örn. "2 adet Spor Ayakkabı, 42 numara"). Checkout sayfasındaki sipariş özetinde gösterilir.
product_imageHayırÜrün görselinin bağlantısı (https). Checkout sayfasında sipariş özetinde gösterilir.
site_logoHayırSite logonuzun bağlantısı (https). Checkout sayfasının üst kısmında gösterilir.
return_urlHayırÖdeme sonrası dönüş adresi (bkz. Dönüş)
token / dataHayırYukarıdaki alanları imzalı token (önerilir) veya data parametresiyle gönderme
Müşteri e-posta ve telefonu üye işyerinden gönderilmez; müşteri bu bilgileri checkout sayfasında kendisi doldurur (zorunlu alanlar). Girilen bilgiler işlem kaydına ve webhook bildirimine eklenir.

Görsel alanları URL parametresi olarak veya imzalı token/data içinde gönderilebilir; gönderilmezse sayfa görselsiz, normal şekilde açılır.

GET https://paystripet.com/checkout?pk=PUBLISHABLE_KEY&amount=149.90&order=SIP-1001&product=Spor%20Ayakkab%C4%B1&order_summary=1%20adet%2C%2042%20numara&product_image=https%3A%2F%2Fsiteniz.com%2Fimg%2Furun.jpg&site_logo=https%3A%2F%2Fsiteniz.com%2Fimg%2Flogo.png&return_url=https%3A%2F%2Fsiteniz.com%2Fsonuc
{"amount":149.90,"order":"SIP-1001","product":"Spor Ayakkabı","order_summary":"1 adet Spor Ayakkabı, 42 numara","product_image":"https://siteniz.com/img/urun.jpg","site_logo":"https://siteniz.com/img/logo.png"}   ← token / data içeriği örneği

Müşteri ödeme öncesi "Ödeme sözleşmesi şartlarını okudum, onaylıyorum" kutusunu işaretler.

Havale/EFT — Ödeme Sayfası

Checkout sayfasıyla aynı tasarım ve aynı parametrelerle çalışır; tek fark adrestir: /bank-transfer. Müşteri işyeri logosunu, ürün görselini, tutarı ve sipariş özetini görür; e-posta ve telefonunu girer, gösterilen PayStripet IBAN'ına havale yapar, gönderen adını yazar ve dekontu yükleyerek (zorunlu) "Ödemeyi Yaptım, Bildir" der.

GET https://paystripet.com/bank-transfer?pk=PUBLISHABLE_KEY&amount=149.90&order=SIP-1001&product=Spor%20Ayakkab%C4%B1&order_summary=1%20adet&product_image=https%3A%2F%2Fsiteniz.com%2Fimg%2Furun.jpg&site_logo=https%3A%2F%2Fsiteniz.com%2Fimg%2Flogo.png&return_url=https%3A%2F%2Fsiteniz.com%2Fsonuc
  • Bildirim sonrası işlem pending (onay bekliyor) olarak açılır ve webhook ile bildirilir.
  • Ödeme hesaba ulaşınca yönetici (Havale/EFT Onay) veya üye işyeri (Panel → İşlemler → Onayla) onaylar; sonuç success / rejected olarak tekrar webhook ile gelir.
  • Sayfada tek banka gösterilir: ödeme para birimindeki, sırası en önde olan ve kalan kotası tutarı karşılayan IBAN. Kota dolunca sıradaki IBAN'a otomatik geçilir. O para biriminde IBAN yoksa sayfa açılmaz.
  • Havale/EFT yönteminin üye işyerinde açık olması gerekir.

Mağaza panelinizden (Ödeme Linkleri → + Link Oluştur) tutar, ürün ve görsel girerek tek kullanımlık ödeme linki ve QR kodu üretin; WhatsApp, e-posta veya sosyal medyada paylaşın. Son kullanma süresi tanımlanabilir. Bu özellik Link ile Ödeme yöntemi açık işyerlerinde çalışır.

Dönüş (return_url) Parametreleri

Checkout sayfasından (/checkout) müşteri şu parametrelerle return_url'e döner:

https://siteniz.com/sonuc?mp_status=success|pending|failed&mp_order=SIP-1001&mp_tid=TXN…&mp_token=JWT

mp_token, secret_key ile imzalı bir HS256 JWT'dir (status, order, tid, amount, currency, ts). Siparişi onaylamadan önce imzayı doğrulayın veya webhook'u bekleyin.

Webhook Bildirimi (sunucudan sunucuya)

Panel → Ayarlar → Firma Ayarları → İşyeri Bildirimleri alanına URL'nizi kaydedin. Her durum değişikliğinde (onay, red, iade) JSON POST gönderilir:

POST https://siteniz.com/bildirim.php
X-PayStripet-Signature: sha256=<hex( HMAC_SHA256( ham_govde , secret_key ) )>

{"event":"payment.result","tid":"TXN…","order_id":"SIP-1001","status":"success",
 "method":"card|transfer","amount":149.9,"currency":"TRY","customer":"…","created_at":"…","ts":1760000000}
<?php
$body = file_get_contents('php://input');
$sig  = 'sha256=' . hash_hmac('sha256', $body, $secretKey);
if (!hash_equals($sig, $_SERVER['HTTP_X_PAYSTRIPET_SIGNATURE'] ?? '')) { http_response_code(401); exit; }
$evt = json_decode($body, true); // $evt['status'] → siparişi güncelleyin

Durumlar & Hata Kodları

AlanZorunluAçıklama
success—Ödeme onaylandı
pending—Havale/EFT bildirimi alındı, onay bekliyor
failed—Banka reddetti / hata
rejected—İşlem reddedildi / iptal edildi
refunded—İade edildi

Güvenlik & Limitler

Bot ve kart deneme (carding) saldırılarına karşı müşteriye görünmeyen korumalar devrededir:

  • Kart deneme sınırı: aynı IP'den 10 dakikada 8, saatte 25; aynı kart numarasıyla 10 dakikada 4, günde 10 deneme.
  • İstek sınırı: Ödeme ve başvuru istekleri IP başına dakikalık/saatlik sınırlıdır. Aşıldığında HTTP 429 döner.
  • Tek kullanımlık kodlar: ödeme sayfası güvenlik kodu yalnızca bir kez kullanılabilir; tekrar eden istek 409 ile reddedilir.
  • Eşzamanlı istek kilidi: aynı kart veya aynı sipariş için aynı anda gelen ikinci istek reddedilir (LOCKED / 409).
  • Giriş kilidi: mağaza ve yönetici girişinde aynı hesaba 15 dakikada 5, aynı IP'den 15 hatalı denemede giriş 15 dakika kilitlenir.

Desteklenen Diller ve Araçlar

PHPNode.jsPythoncURLJWT (HS256)WebhookÖdeme Linki & QRDemo Kit