1. Go to this page and download the library: Download odemehub/php-sdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
odemehub / php-sdk example snippets
use Gurmehub\Odemehub\Client;
use Gurmehub\Odemehub\Options;
$client = new Client(new Options(
baseUrl: 'https://sandbox.odemehub.com',
team: '1000000001', // Çalışma Alanı Kimliği
apiKey: getenv('ODEMEHUB_API_KEY'),
apiSecret: getenv('ODEMEHUB_API_SECRET'),
));
use Gurmehub\Odemehub\Request\{Address, Card, PaymentCustomer, RegularPayment};
$customer = new PaymentCustomer(
billingAddress: new Address( // sekiz alanın hepsi zorunlu (Varsayılan Ödeyen açıksa eksik olabilir); şirket alanları üçü birlikte ya da hiç
firstname: 'Ahmet', lastname: 'Yılmaz',
email: '[email protected]', phone: '05551112233',
address: 'Kızılırmak Mah. Dumlupınar Blv. No:3',
district: 'Çankaya', province: 'Ankara', country: 'TR',
),
reference: 'musteri-88', // sizdeki müşteri anahtarı; kart saklanacaksa zorunlu, boşsa müşteri kaydedilmez
);
$card = new Card(
holderName: 'AHMET YILMAZ',
number: '5400360000000003',
expiryMonth: '12', expiryYear: '2030',
securityCode: '000',
shouldSave: true, // isteğe bağlı: başarılı ödemeden sonra kartı sakla
);
$payment = $client->regularPayment(new RegularPayment(
reference: 'SIP-10231', // sizdeki referans; en az bir rakam içermeli
amount: '450.00',
installmentNumber: 1,
ip: $_SERVER['REMOTE_ADDR'],
customer: $customer,
card: $card,
));
if ($payment->result->successful) {
$payment->transaction->token; // iade ve iptalde ödeme bununla adlandırılır
$payment->savedCard?->token; // shouldSave gönderildiyse ve kart saklandıysa
}
use Gurmehub\Odemehub\Request\RetrievePayments;
$payment = $client->retrievePayments(RetrievePayments::byToken($_POST['transaction_token']))->payments[0] ?? null;
if ($payment?->isSuccessful()) {
// siparişi ödendi olarak işaretleyin
}
$payment?->status; // Enum\TransactionStatus::Successful, Failed, Expired ...
$payment?->paymentStatus; // Enum\PaymentStatus: paranın akıbeti (sonradan Refunded olabilir)
$payment?->amount; // karttan çekilen tutar
use Gurmehub\Odemehub\Request\{CreateOrder, Item, MaxInstallments};
$order = $client->createOrder(new CreateOrder(
reference: 'SIP-10233',
successUrl: 'https://magazam.com/odeme/donus',
items: [
new Item(name: 'Kulaklık', unitAmount: '1200.00', quantity: 1, taxRate: '20', reference: 'SKU-1', saveAsProduct: true),
],
customer: $customer, // bilinen kadarı; kalanı sayfada sorulur. Hiç verilmeyebilir.
// müşteriyi buraya gönderin
$order->order->amount; // geçidin hesapladığı toplam
use Gurmehub\Odemehub\Request\{RetrieveOrders, UpdateOrder};
$order = $client->retrieveOrders(RetrieveOrders::byToken($token))->orders[0];
$order->isPaid();
$order->transaction?->token;
$order->customer?->reference; // her siparişte müşterisi gelir
// Açık siparişte yalnızca gönderilen alanlar değişir; kalemler gönderilirse tamamı yenilenir.
$client->updateOrder(new UpdateOrder(token: $token, description: 'Hediye paketi', clear: ['cancel_url']));
use Gurmehub\Odemehub\Enum\Currency;
use Gurmehub\Odemehub\Request\{CreatePaymentLink, RetrievePaymentLinks, UpdatePaymentLink};
$link = $client->createPaymentLink(new CreatePaymentLink(
currency: Currency::TRY,
items: [new Item(name: 'Bağış', unitAmount: '100.00', quantity: 1, taxRate: '0')],
reference: 'LNK-1', // boş bırakılırsa geçit LINK{n} üretir
expiresAt: '2026-12-31', // çalışma alanının saat dilimine göre gün
emailsCustomer: true, // ödeme tamamlanınca ödeyene, sayfada verdiği adrese e-posta gider; boş: gitmez
));
$link->paymentLink->token; // saklayın: linki bununla güncellersiniz ve sorgularsınız
$link->paymentLink->checkoutUrl; // linkin kendisi; ödenemezken (kapalı, süresi geçmiş) null
$link->paymentLink->expiresAt; // verilen günün sonu (çalışma alanı saatiyle), ISO 8601 UTC
$link->paymentLink->isTest; // ödemeleri şu an test ortamında mı alınıyor
$detail = $client->retrievePaymentLinks(RetrievePaymentLinks::byToken($link->paymentLink->token))->paymentLinks[0];
$detail->transactions; // son 50 deneme, yeniden eskiye
$detail->transactionsCount; // linkteki denemelerin tamamının sayısı
$detail->successful(); // listelenenlerden başarılı olanlar
$client->updatePaymentLink(new UpdatePaymentLink(token: $link->paymentLink->token, isActive: false));
use Gurmehub\Odemehub\Request\{CancelPayment, RefundPayment};
$refund = $client->refundPayment(new RefundPayment(token: $transactionToken, amount: '50.00')); // tutar boş: kalanın tamamı
$refund->refund->amount; // gerçekten geri giden tutar
$cancel = $client->cancelPayment(new CancelPayment(token: $transactionToken));
use Gurmehub\Odemehub\Request\RetrieveBin;
$bin = $client->retrieveBin(new RetrieveBin(bin: '415565', amount: '1200.00'));
$bin->issuerName; // Yapı Kredi
$bin->scheme; // Enum\CardScheme::Visa
foreach ($bin->installments as $installment) {
$installment->number; // 3
$installment->total; // 1236.00
}
use Gurmehub\Odemehub\Request\{CreateBankAccount, DeleteBankAccount, RetrieveBankAccounts, RetrieveBanks, RetrieveBankTransactions, UpdateBankAccount};
$client->retrieveBanks(new RetrieveBanks)->banks; // her bankada id, title ve fields (key, t_secret' => '…', 'access_token' => '…', 'refresh_token' => '…'],
));
$added->bankAccount?->token; // saklayın; banka reddettiyse null, nedeni result->message
$client->retrieveBankAccounts(new RetrieveBankAccounts); // bütün hesaplar; ya da en çok 50 token
$client->updateBankAccount(new UpdateBankAccount(token: $token, name: 'Ana hesap')); // settings: yalnızca değişecek bilgiler
$client->deleteBankAccount(new DeleteBankAccount($token)); // delete-bank-account/{token}
$page = $client->retrieveBankTransactions(new RetrieveBankTransactions(
bankAccountTokens: [$token], // 1–50 hesap
createdFrom: '2026-10-20', // boş: son 7 gün
createdTo: '2026-10-26',
page: 1, // perPage: page verilince varsayılan 50, en çok 250; ikisi de boşsa 250
));
foreach ($page->bankTransactions as $movement) {
$movement->amount; // işaretli: '22164.96' giren, '-40.00' çıkan
$movement->bookedAt; // bankanın kaydettiği an, ISO 8601 UTC
$movement->counterpartyIban;
}
$page->pagination->hasMorePages();
use Gurmehub\Odemehub\{PartnerClient, PartnerOptions};
use Gurmehub\Odemehub\Enum\WebhookEvent;
use Gurmehub\Odemehub\Request\{CreateLogo, CreatePaymentProvider, CreateTeam, CreateWebhookEndpoint, DeleteTeam, RetrieveTeams, UpdateCheckoutDesign, UpdateTeamModules};
$partner = new PartnerClient(new PartnerOptions(
baseUrl: 'https://sandbox.odemehub.com',
apiKey: getenv('ODEMEHUB_PARTNER_API_KEY'),
apiSecret: getenv('ODEMEHUB_PARTNER_API_SECRET'),
));
$team = $partner->createTeam(new CreateTeam(
name: 'Müşterim A.Ş.', // hepsi isteğe bağlı
timezone: 'Europe/Istanbul',
modules: ['orders', 'bank_transactions'],
))->team;
$team->slug; // Çalışma Alanı Kimliği; apiKey, apiSecret, gatewayUrl, isTest, modules ile saklayın
$client = $partner->teamClient($team); // çalışma alanının kendi anahtarıyla Client
$client->createPaymentProvider(new CreatePaymentProvider(
provider: 'iyzico', // retrieveProviders(): türler ve istedikleri ayarlar (fields)
name: 'iyzico',
settings: ['test_api_key' => '…', 'test_api_secret' => '…'], // sandbox çalışma alanı test'tir: test_ önekli ayarlar zorunlu
));
$client->createWebhookEndpoint(new CreateWebhookEndpoint(
url: 'https://ornek.com/odemehub/webhook',
events: [WebhookEvent::OrderPaid, 'transaction.successful'],
));
$logo = $client->createLogo(CreateLogo::fromBytes(file_get_contents('logo.png')));
$client->updateCheckoutDesign(new UpdateCheckoutDesign(logo: $logo->url, accentColor: '#0f766e'));
$partner->retrieveTeams(new RetrieveTeams(page: 1)); // ya da slugs: [...]; pagination döner
$partner->updateTeamModules(new UpdateTeamModules($team->slug, ['orders'])); // gönderilenler açık kalır; [] hepsini kapatır
$partner->deleteTeam(new DeleteTeam($team->slug)); // çalışma alanı ve içindeki her şey silinir
use Gurmehub\Odemehub\Request\RetrievePayments;
// Yanıtı alınamayan bir ödemenin akıbeti: referanstaki bütün denemeler
$client->retrievePayments(RetrievePayments::byReference('SIP-10231'));
// Belli günlerdeki bütün denemeler, reddedilenler dahil, durumu ve tutarıyla
$list = $client->retrievePayments(RetrievePayments::between('2026-09-26', '2026-10-02'));
foreach ($list->payments as $transaction) {
$transaction->status; // Enum\TransactionStatus; Timeout: sağlayıcı yanıt vermedi
$transaction->paymentStatus; // Enum\PaymentStatus: Paid, Refunded, PartiallyRefunded...
}
$client->retrievePayments(RetrievePayments::latest()); // son 7 gün
$page = 1;
do {
$list = $client->retrievePayments(RetrievePayments::between('2026-09-26', '2026-10-02')->withPage($page++, 250));
foreach ($list->payments as $transaction) {
// ...
}
} while ($list->pagination?->hasMorePages());