يعد BKM Express نظام الدفع السهل والسريع في تركيا مما يجعل المدفوعات الممكنة عبر الإنترنت دون إعطاء معلومات عن بطاقة الائتمان الكاملة حتى توفر لك هذه المكتبة واجهة برمجة تطبيقات بسيطة لذلك.
###### ملاحظة: تعمل حاليًا على هذا المشروع. لم يتم الانتهاء من الوثائق بعد.
يمكنك ببساطة تثبيت هذه المكتبة عبر الملحن.
أولاً ، أضف هذا السطر إلى composer.json الخاص بك
{
"require" : {
"travijuu/bkm-express" : " 1.0.3 "
}
} ثم قم بتشغيل أمر composer update .
هناك أربع خطوات لإجراء معاملة الدفع.
لنبدأ بالخطوة الأولى.
use Travijuu BkmExpress BkmExpress ;
use Travijuu BkmExpress Common Bank ;
use Travijuu BkmExpress Common Bin ;
use Travijuu BkmExpress Common Installment ;
$ mid = ' 7b928290-b6d2-469e-ac10-29eb36b8c1f6 ' ; // BKM Merchant ID
$ successUrl = ' https://example.com/bkm/success ' ;
$ cancelUrl = ' https://example.com/bkm/error ' ;
$ privateKeyPath = ' /path/to/mykey.pem ' ;
$ publicKeyPath = ' /path/to/mykey.pub ' ;
$ bkmPublicKeyPath = ' /path/to/bkm.pub ' ;
// Infrastructure of the bank you choose as a default payment gateway.
// ['Posnet', 'NestPay', 'Gvp'] one of them should be chosen.
$ defaultBank = ' NestPay ' ;
$ bkm = new BkmExpress ( $ mid , $ successUrl , $ cancelUrl , $ privateKeyPath , $ publicKeyPath , $ bkmPublicKeyPath , $ defaultBank );
$ wsdl = ' /path/to/BkmExpressPaymentService.wsdl ' ;
$ sAmount = 100.50 ; // Sale Amount
$ cAmount = 4.50 ; // Cargo Amount
$ banks = [];
$ bank = new Bank ( ' 0062 ' , ' Garanti Bank ' , ' Garanti Bank via BKM Express ' );
$ bin = new Bin ( ' 554960 ' );
$ installment = new Installment ( $ cAmount , $ sAmount , 1 , ' Garanti Bank without installment ' , true );
$ bin -> addInstallment ( $ installment );
$ installment = new Installment ( $ cAmount , $ sAmount , 3 , ' Garanti Bank with 3 installments ' , true );
$ bin -> addInstallment ( $ installment );
$ bank -> addBin ( $ bin );
$ banks [] = $ bank ;
$ response = $ bkm -> initPayment ( $ wsdl , $ sAmount , $ cAmount , $ banks ); بعد ذلك ، قم بتقديم طلب آخر إلى $response->getUrl() مع 3 معلمات عن طريق إعادة توجيه الصفحة إلى BKM Express
[
' t ' => $ response -> getToken (),
' s ' => $ response -> getSignature (),
' ts ' => $ response -> getTimestamp ()
]طريقة أخرى لطلب النشر. (ولكن لا يفضل)
< form name =" bankexpresspayForm " id =" bankexpresspayForm " action =" <?php echo $response->getUrl(); ?> " method =" POST " >
< input type =" hidden " name =" t " value =" <?php echo $response->getToken(); ?> " >
< input type =" hidden " name =" ts " value =" <?php echo $response->getSignature(); ?> " >
< input type =" hidden " name =" s " value =" <?php echo $response->getTimestamp(); ?> " >
<!-- To support javascript unaware/disabled browsers -->
< noscript >
< center >
Eğer yönlenme olmazsa lütfen tıklayınız. < br >
</ center >
</ noscript >
</ form >
< script type =" text/javascript " >
setTimeout ( function ( ) {
$ ( '#bankexpresspayForm' ) . submit ( ) ;
} , 500 ) ;
</ script >بعد هذه الخطوة ، يجب إعادة توجيهك إلى موقع BKM Express.
بمجرد تسجيل الدخول إلى النظام ، سيتم سرد بطاقات الائتمان المتاحة. لذلك ، يمكن للعميل رؤية جميع خيارات التقسيم التي يتم إرسالها في تهيئة طلب الدفع.
بعد اختيار بطاقة الائتمان ، سيتم طلب كلمة مرور الرسائل القصيرة من العميل.
في الخطوة التالية ، ستقوم BKM Express بتقديم طلب SOAP إلى طلبك للحصول على معلومات API المصرفية المرتبطة بالبطاقة المحددة للعميل ( Request Merch Info )
هام: يجب أن تعلن عن عنوان URL لخدمة WebService لخدمة عملاء BKM Express.
وبالتالي ، ستقوم BKM Express بتقديم طلب SOAP إلى عنوان URL هذا للحصول على معلومات API Bank من الخادم الخاص بك.
use Travijuu BkmExpress Common VirtualPos ;
use Travijuu BkmExpress Payment RequestMerchInfo RequestMerchInfoWSRequest ;
$ wsdlServer = ' /path/to/RequestMerchInfoService_latest.wsdl ' ;
$ virtualPosList = [];
$ virtualPos = new VirtualPos ();
$ virtualPos -> setPosUrl ( ' https://sanalposprovtest.garanti.com.tr/VPServlet ' )
-> setPosUid ( ' 600218 ' );
-> setPosPwd ( ' 123qweASD ' );
-> setMpiUrl ( ' https://sanalposprovtest.garanti.com.tr/servlet/gt3dengine ' )
-> setMpiUid ( ' 600218 ' )
-> setMpiPwd ( ' 123qweASD ' )
-> setMd ( '' )
-> setXid ( '' )
-> setCIp ( ' 192.168.0.1 ' )
-> setExtra ( ' {"terminalprovuserid":"PROVAUT", "terminalmerchantid":"7000679", "storekey":"12345678", "terminalid":"30690168"} ' )
-> setIs3ds ( false )
-> setIs3dsFDec ( false );
// Garanti Bank Id: 0062
$ virtualPosList [ ' 0062 ' ] = $ virtualPos ;
/* This callback can help you to be informed what kind of
* payment method is selected in BKM Express website.
* You may insert this into database for info purposes.
* Note: This is optional.
*/
$ callback = function ( RequestMerchInfoWSRequest $ request ) {
$ token = $ response -> getToken ();
$ bankId = $ response -> getBankId ();
$ installment = $ response -> getInstallment ();
. . .
}
$ bkm -> requestMerchInfo ( $ wsdlServer , $ virtualPosList , $ callback ); سيتم إرجاع نتيجة هذا الطلب إلى BKM Express وستقوم بإجراء معاملة مصرفية بمعلومات API الخاصة بك. بعد ذلك ، ستقدم BKM Express طلبًا منشورًا وفقًا لنتيجة المعاملة المصرفية ( success / cancel url )
ستقوم BKM Express بتقديم طلب منشور إلى عنوان URL للنجاح (https://example.com/bkm/success) أو إلغاء url (https://example.com/bkm/error) تحتاج إلى الحصول على بيانات النشر وتمريرها إلى وظيفة تأكيد
ملاحظة: https://example.com/bkm/success/ {OrderCode} يمكنك استخدام عنوان URL للنجاح مثل هذا بحيث يمكن أن يساعدك على فهم الطلب الذي تحاول دفعه.
// This part can be used in both success and cancel url. $confirmation->success() will return the result.
$ data = $ _POST ;
$ confirmation = $ bkm -> confirm ( $ data );
if ( $ confirmation -> isSuccess ()) {
// remember the callback which I decribed above. If you save $token, $bankId, $installment into your database, now you can use them to identify the posResponse.
$ token = $ confirmation -> getToken ();
$ bankId = ' 0062 ' ; // get the bank Id from database according to token
$ posResponse = $ bkm -> getPosResponse ( $ bankId , $ confirmation -> getPosRef ());
// This means that bank transcation is successfully completed so you got the money
// now you can save the success result to your database.
if ( $ posResponse -> isSuccess ()) {
$ authCode = $ posResponse -> getAuthCode ();
$ rawResponse = $ posResponse -> getRawResponse ();
. . .
} else {
// Transaction failed so get the error message and code
$ errorCode = $ posResponse -> getResponseCode ();
$ errorMessage = $ posResponse -> getResponseMessage ();
. . .
}
} بصرف النظر عن success url ، ستقوم BKM Express بعمل طلب المنشور هذا إلى عنوان URL للتأكيد على الاحتياطات. افترضوا أنه قد لا يتم الوصول إلى الطلب الذي تم إرساله إلى success url .
هام: يجب أن تعلن عن عنوان URL للتأكيد على خدمة عملاء BKM Express.
$ data = $ _POST ;
$ confirmation = $ bkm -> confirm ( $ data );
/* You can use the same methodology as above.
* Save $token, $bankId, $installment into your database,
* now you can use them to identify the posResponse. (Garanti, YKB, Akbank, etc..)
*/
$ token = $ confirmation -> getToken ();
$ bankId = ' 0062 ' ; // get the bank Id from database according to token
$ posResponse = $ bkm -> getPosResponse ( $ bankId , $ confirmation -> getPosRef ());إذا كان لديك أي اقتراحات ، فلا تتردد في إنشاء مشكلة هنا على Github و/أو مفترق هذا الريبو ، وقم بإجراء تغييرات وتقديم طلب سحب!