Ana içeriğe geç

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ı
orderPaymentOrderPayment(channelReference, successUrl, customer, items: OrderItem[], cancelUrl?, description?, currency?, paymentProviderToken?)
subscriptionPaymentSubscriptionPayment(channelReference, items: SubscriptionItem[], successUrl, customer, cancelUrl?, webhookUrl?, paymentProviderToken?)
retrieveSubscription / cancelSubscriptionRetrieveSubscription(subscriptionToken) / CancelSubscription(subscriptionToken)
retrieveBinRetrieveBin(bin, amount, paymentProviderToken?, currency?)
saveProductSaveProduct(channelReference, name, type, amount, taxRate, period?, currency?, isActive?)
saveCardSaveCard(customer, card, paymentProviderToken?)
savedCardsSavedCards(customer: NamedCustomer)
defaultSavedCard / deleteSavedCardDefaultSavedCard(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.