PHP SDK
Kurulum
PHP 8.2 ve üzeri gerekir.
composer require odemehub/php-sdk
İstemci
use Gurmehub\Odemehub\Client;
use Gurmehub\Odemehub\Options;
$client = new Client(new Options(
baseUrl: 'https://odeme.gurmehub.com',
team: getenv('ODEMEHUB_TEAM'), // Çalışma Alanı Kimliği
channelToken: getenv('ODEMEHUB_CHANNEL_TOKEN'),
apiKey: getenv('ODEMEHUB_API_KEY'),
apiSecret: getenv('ODEMEHUB_API_SECRET'),
));
Client ikinci parametre olarak bir GuzzleHttp\ClientInterface alır; verilmezse 60 saniye zaman aşımlı bir Guzzle istemcisi kullanılır.
İstek sınıfları Gurmehub\Odemehub\Request, yanıt sınıfları Gurmehub\Odemehub\Response, istisnalar Gurmehub\Odemehub\Exception ad alanındadır.
Müşteri ve kart
use Gurmehub\Odemehub\Request\{Card, Customer, TaxDetails};
$customer = new Customer(
channelReference: 'musteri-88',
firstname: 'Ahmet',
lastname: 'Yılmaz',
phone: '05551112233',
address: 'Kızılırmak Mah. Dumlupınar Blv. No:3',
district: 'Çankaya',
province: 'Ankara',
country: 'Türkiye',
// tax: new TaxDetails(companyTitle: '...', taxNumber: '...', taxOffice: '...'),
);
$card = new Card(
holderName: 'AHMET YILMAZ',
number: '5400360000000003',
securityCode: '000',
expiryMonth: '12',
expiryYear: '2030',
shouldSave: false,
);
Regular ödeme
use Gurmehub\Odemehub\Request\RegularPayment;
$payment = $client->regularPayment(new RegularPayment(
channelReference: 'SIP-10231',
amount: '450.00',
installmentNumber: 1,
ip: $_SERVER['REMOTE_ADDR'],
customer: $customer,
card: $card,
));
$payment->result->successful; // bool
$payment->result->message; // ?string
$payment->transactionToken; // string
$payment->conversion; // ?Response\Conversion
$payment->savedCard; // ?Response\SavedCard
3D Secure ödeme
use Gurmehub\Odemehub\Request\SecurePayment;
$payment = $client->securePayment(new SecurePayment(
channelReference: 'SIP-10232',
amount: '450.00',
installmentNumber: 1,
ip: $_SERVER['REMOTE_ADDR'],
customer: $customer,
callbackUrl: 'https://magazam.com/odeme/donus',
card: $card,
));
if ($payment->result->successful) {
header('Location: '.$payment->redirectUrl);
exit;
}
callbackUrl adresindeki işleyici:
use Gurmehub\Odemehub\Request\RetrievePayment;
$outcome = $client->retrievePayment(new RetrievePayment(
transactionToken: $_POST['transaction_token'],
));
if ($outcome->result->successful) {
// ödendi
}
Akış: Secure (3D) Ödeme.
Ödeme sorgusu
use Gurmehub\Odemehub\Request\RetrievePayment;
$payment = $client->retrievePayment(new RetrievePayment(transactionToken: $transactionToken));
İade ve iptal
use Gurmehub\Odemehub\Request\{CancelPayment, RefundPayment};
$cancel = $client->cancelPayment(new CancelPayment(transactionToken: $transactionToken));
$refund = $client->refundPayment(new RefundPayment(transactionToken: $transactionToken, amount: '100.00'));
$refund->type; // 'refund' | 'cancel'
$refund->amount; // geri verilen tutar
Diğer uçlar
| Metot | İstek sınıfı |
|---|---|
orderPayment | OrderPayment(channelReference, successUrl, customer, items: OrderItem[], cancelUrl?, description?, currency?, paymentProviderToken?) |
subscriptionPayment | SubscriptionPayment(channelReference, items: SubscriptionItem[], successUrl, customer, cancelUrl?, webhookUrl?, paymentProviderToken?) |
retrieveSubscription / cancelSubscription | RetrieveSubscription(subscriptionToken) / CancelSubscription(subscriptionToken) |
retrieveBin | RetrieveBin(bin, amount, paymentProviderToken?, currency?) |
saveProduct | SaveProduct(channelReference, name, type, amount, taxRate, period?, currency?, isActive?) |
saveCard | SaveCard(customer, card, paymentProviderToken?) |
savedCards | SavedCards(customer: NamedCustomer) |
defaultSavedCard / deleteSavedCard | DefaultSavedCard(customer: NamedCustomer, savedCardToken) / DeleteSavedCard(...) |
Örnekler her uç sayfasının SDK örnekleri bölümündedir.
Hata yönetimi
use Gurmehub\Odemehub\Exception\{
AuthenticationException, OdemehubException, SignatureException,
TransportException, UnexpectedResponseException, ValidationException,
};
try {
$payment = $client->regularPayment($request);
} catch (ValidationException $e) {
$e->errors; // ['transaction.amount' => ['...']]
} catch (AuthenticationException $e) {
// 401
} catch (UnexpectedResponseException $e) {
$e->status; // ör. 403
} catch (SignatureException $e) {
// yanıtın imzası tutmadı
} catch (TransportException $e) {
// gateway'e ulaşılamadı; sonuç bilinmiyor
}
Abonelik webhook'u
use Gurmehub\Odemehub\Exception\SignatureException;
try {
$webhook = $client->subscriptionWebhook(
file_get_contents('php://input'),
$_SERVER['HTTP_X_SIGNATURE'] ?? null,
);
} catch (SignatureException $e) {
http_response_code(400);
exit;
}
match (true) {
$webhook->isActive() => null, // $webhook->subscription->endsAt
$webhook->isPastDue() => null, // $webhook->subscription->checkoutUrl
$webhook->isCancelled() => null,
$webhook->isEnded() => null,
};
http_response_code(200);
Ayrıntılar: Abonelik Webhook'u.