BKM 2.0 PHP SDK For LARAVEL 8.x
- Henüz BETA aşamasındadır. Lütfen kullanmayınız.
- Resmi BKM library kullanılarak Laravel entegrasyonu sağlanmaya çalışılmaktadır.
- Buradaki tüm ayarlar SDK kolaylaştırmak için yapılan yeni özelliklere göre yazılmıştır.
- Daha önce dökümantasyonda belirtilmiş olan özellikler geçerlidir.
Composer ile kurulumu gerçekleştirin;
composer require saimyildiz/larabex
Configure
Composer ile kurulumu gerçekleştirdikten sonra .env
içerisine BKM_ENVIRONMENT, BKM_MID, BKM_PUBLIC_KEY, BKM_PRIVATE_KEY tanımlamalarını gerçekleştiriniz.
.env
içerisindeki BKM_ENVIRONMENT değeri DEV, SANDBOX, PREPROD ya da PRODUCTION şeklinde tanımlanmalıdır.
php artisan vendor:publish --provider="Saimyildiz\Larabex\LarabexServiceProvider"
config/app.php içerisinde servisi ekleyin;
Saimyildiz\Larabex\LarabexServiceProvider::class,
config/app.php içerisinde Facade ekleyin;
return [
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
// ...
'Larabex' => Saimyildiz\Larabex\Facade\Larabex::class,
],
// ...
];
Bex::configure methodu
- Bex sınıfını ayarlamak için kullanılır.
use Bex\easy\Bex;
require_once "../../bex2-sdk-php/src/main/Bex/Bex.php";
$bex = Bex::configure(
$environment, // DEV, LOCAL, SANDBOX, PREPROD, PRODUCTION
$merchantId, // BKM Tarafından verilen ID değeri
$privateKey // BKM tarafından verilen private key değeri
);
Ticket Oluşturmak
-
NONCE_URL
,INSTALLMENT_URL
,$amount
değerlerini bir map dizide alır. -
Burda dikkat edilmesi gerekenler
- Eğer VPOS tanımlarınızı BKM tarafından otomatik yapılmıyorsa VPOS bilgilerini sizin sağlanmanız gerekmektedir.
- Taksit hesaplamaları için
INSTALLMENT_URL
göndermelisiniz. - Ticket oluşturma işlemi girdi olarak bir map dizi alır ve bu map dizi içerisinde aşağıdaki girdiler olmalıdır.
$amount
nonceUrl
installmentUrl
- Çıktı olarak ticket ile ilgili aşağıdaki değerleri bir map dizi içerisinde alacaksınız. Bu değerlerin BKM UI uygulamalasına parametre olarak verilmesi gerekmektedir.
- id
- path
- token
-
Taksit Hesaplama işlemi yapılacak şekilde ticket oluşturmak
...configure Bex
$ticket = $bex->createTicket(array(
'amount' => $amount, // (zorunlu)
'nonceUrl' => NONCE_URL, // (zorunlu)
'installmentUrl' => INSTALLMENT_URL, // (seçimli)
'orderId' => Sipariş Numarası, // (seçimli)
'tckn' => array( // (seçimli)
'no' => TC Kimlik Numarası, // (seçimli)
'check' => TC Kimlik Numarası Kontrolü // (seçimli)
),
'msisdn' => array( // (seçimli)
'no' => Telefon Numarası, // (zorunlu)
'check' => Telefon Numarası Kontrolü, // (seçimli)
),
'campaignCode' => "Kampanya kodu" // (seçimli)
)
);
echo $ticket['id']; // ticket id
echo $ticket['path']; // ticket path
echo $ticket['token']; // ticket token
- Taksit hesaplama işlemi olmadan ticket oluşturmak
...configure Bex
$ticket = $bex->createTicket(array(
'amount' => $amount,
'nonceUrl' => NONCE_URL
)
);
echo $ticket['id']; // ticket id
echo $ticket['path']; // ticket path
echo $ticket['token']; // ticket token
Ticket Yenileme
...configure Bex
$ticket = $bex->refreshTicket(array(
'amount' => $amount, // (zorunlu)
'nonceUrl' => NONCE_URL, // (zorunlu)
'installmentUrl' => INSTALLMENT_URL, // (seçimli)
'orderId' => Sipariş Numarası, // (seçimli)
'tckn' => array( // (seçimli)
'no' => TC Kimlik Numarası, // (seçimli)
'check' => TC Kimlik Numarası Kontrolü // (seçimli)
),
'msisdn' => array( // (seçimli)
'no' => Telefon Numarası, // (zorunlu)
'check' => Telefon Numarası Kontrolü, // (seçimli)
),
'campaignCode' => "Kampanya kodu" // (seçimli)
)
);
echo $ticket['id']; // ticket id
echo $ticket['path']; // ticket path
echo $ticket['token']; // ticket token
Sonuç Sorgulama
- Sorgulama işlemi ticket üzerinden yapıldığı için ticket path kullanılır.
- Daha önce ticket oluşturulduğunda alınan ticket path değeri girdi olarak gönderilir.
...configureBex
$result = $bex->queryTicket($ticketPath)
Taksit Hesaplama işlemleri
- Taksit işlemi için MoneyUtils düzgün format kullanmanızı sağlar. Format olarak 1300,50 şeklinde olmalıdır.
- VPosUtil sample2 içerisinde bulabilirsiniz.
- VPosUtil VPos bilgilerinize göre düzenlemeniz gerekir.
- VPos bilgilerinizin aşağıdaki örnekte gönderimini görebilirsiniz.
- $calback fonksiyon olarak doldurulması gerekmektedir.
- Girdi: map dizisi olarak alırsınız. Map dizi içerisinde ;
- map dizi
- 'ticketId'
- 'totalAmount'
- 'bin'
- 'bank'
- map dizi
- Çıktı: Çıktı olarak dizi içerisinde bir taksit map dizisi dönülmelidir.
- dizi
- map dizi
- numberOfInstallment: Taksit Sırası
- 'installmentAmount: Taksit Tutarı
- totalAmount: Toplam tutar
- vposConfig: sample2 deki VPosUtil dosyasını inceleyiniz
- bank: banka kodu.
- map dizi
- dizi
Örnek: Bu örnekte her zaman 2 taksit olacak şekilde taksitlendirme yapılmıştır.
use Bex\util\MoneyUtils;
require_once "./VposUtil.php";
...configure Bex
$bex->installments(function ($installmentArray){
$installments = array();
$totalAmountStr = $installmentArray["totalAmount"];
// iki taksit yapalım
$installmentAmount = MoneyUtils::formatTurkishLira(
MoneyUtils::toFloat($totalAmountStr) / 2.0
);
// 1.ci taksiti ayarlayalım.
array_push($installments, array(
'numberOfInstallment' => 1,
'installmentAmount' => $installmentAmount,
'totalAmount' => $totalAmountStr,
'vposConfig' => VposUtil::prepareVposConfig(
$installmentArray['bank']
)
));
// 2. Taksiti ayarlayalım.
array_push($installments, array(
'numberOfInstallment' => 2,
'installmentAmount' => $installmentAmount,
'totalAmount' => $totalAmountStr,
'vposConfig' => VposUtil::prepareVposConfig(
$installmentArray['bank']
)
));
// Taksitleri bir array olarak dönelim.
return $installments;
});
Onay İşlemi ( Nonce Approve )
- Nonce işlemi nasıl çalışır ?
- Öncelikle BKM'den sisteminize onay alma isteği gelir.
- Bu isteğin alındığında dair sisteminizden BKM'ye cevap dönülür.
- Ardından BKM'ye onayladım veya onaylamadım şekilde bir istekte bulunulur.
- Bunun sonucunda BKM ödeme işlemini gerçekleştirir veya gerçekleştirmez.
-
Nonce işlemi çift taraflı bir işlem olduğundan SDK içerisinde response flush işlemi kullanılmıştır. Bu işlemin çalışmabilmesi için aşağıdaki configurasyonları yapmış olmanız gerekmektedir. -
php.ini
dosyasında aşağıdaki değerleri off yapmalısınız. _output_buffering = Off
_zlib.output_compression = Off
-Nginx
kullanıyorsanıznginx.conf
dosyasında _gzip off;
_proxy_buffering off;
-
Veya aşağıdaki komutları bex.php içerisinde kullanarak ini ayarlarını değiştirebilirsiniz.
-
ini_set("output_buffering", 0);
// off ini_set("zlib.output_compression", 0);
-
flush ile ilgili daha detalı bilgiyi aşağıdaki linkte görebilirsiniz. https://stackoverflow.com/questions/3133209/how-to-flush-output-after-each-echo-call
-
callback
function
: işlemin yapılacağı callback fonksiyonunu belirtir.- Girdiler (array)
- map dizi
- id // ticket id değerini tutar.
- path // ticket path değerini tutar.
- token // ticket token değerini tutar.
- totalAmount // toplam tutar
- orderId // Sipariş numarası
- totalAmountWithInstallmentCharge // Vade farkı
- numberOfInstallments // Taksit Sayısı
- hash // Kartın hash değeri
- tcknMatch // TCKN uyumlu (true, false)
- msisdnMatch // Telefon numarası uyumlu.
- map dizi
- Çıktılar
- boolean,
- true => // İşlemi onayladığınızı belirtir.
- false => işlemi reddettiğinizi belirtir.
- boolean,
- Girdiler (array)
Örnek: Örnekte görüleceği gibi approve fonksiyonunda sizden beklenen bir callback `function vermenizdir.
$bex->approve(function ($nonceArray) use ($amount) {
if ($nonceArray['totalAmount'] === $amount) {
return true;
}
return false;
});
Örnek
- Sample2 klasörü içerisindeki örneği inceleyebilirsiniz.
- Örnekte README dosyasında işlemler ile ilgili genel açıklamalarını bulabilirsiniz.