BKM Express es un sistema de pago fácil y rápido en Turquía, lo que hace posibles pagos en línea sin proporcionar información completa de la tarjeta de crédito, por lo que esta biblioteca le proporciona una API simple para ello.
###### Nota: Actualmente trabajando en este proyecto. La documentación aún no se ha completado.
Simplemente puede instalar esta biblioteca a través del compositor.
En primer lugar, agregue esta línea a su composer.json
{
"require" : {
"travijuu/bkm-express" : " 1.0.3 "
}
} y luego ejecute el comando composer update .
Hay cuatro pasos para realizar transacciones de pago.
Comencemos con el primer paso.
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 ); Luego, haga la solicitud de publicación a $response->getUrl() con 3 parámetros redirigiendo la página a BKM Express
[
' t ' => $ response -> getToken (),
' s ' => $ response -> getSignature (),
' ts ' => $ response -> getTimestamp ()
]Otra forma de solicitud posterior. (Pero no preferido)
< 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 >Después de este paso, debe ser redirigido al sitio web BKM Express.
Una vez que el cliente inició sesión en el sistema, se enumerarán las tarjetas de crédito disponibles. Por lo tanto, el cliente puede ver todas las opciones de cuota que se envían en la solicitud de pago inicializan.
Después de la selección de la tarjeta de crédito, se solicitará una contraseña de SMS al cliente.
En el siguiente paso, BKM Express realizará una solicitud SOAB a su solicitud para obtener información de la API bancaria que esté relacionada con la tarjeta seleccionada del cliente ( Request Merch Info )
IMPORTANTE: debe declarar una URL de servicio web para el servicio al cliente BKM Express.
Por lo tanto, BKM Express realizará una solicitud SOAP a esta URL para obtener información de la API bancaria de su servidor.
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 ); El resultado de esta solicitud se devolverá a BKM Express y realizará una transacción bancaria con la información de su API bancaria. Después de eso, BKM Express realizará una solicitud posterior de acuerdo con el resultado de la transacción bancaria ( success / cancel url )
BKM Express realizará una solicitud de publicación para la URL de éxito (https://example.com/bkm/success) o cancele la URL (https://example.com/bkm/error) Debe obtener los datos posteriores y pasarlo en función de confirmación
NOTA: https://example.com/bkm/success/{orderCode} Puede usar su URL de éxito como esta para que pueda ayudarlo a comprender qué orden está tratando de pagar.
// 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 ();
. . .
}
} Además de success url , BKM Express hará esta solicitud de publicación a su URL de confirmación para su precaución. Asumieron que la solicitud enviada a success url no se puede alcanzar.
IMPORTANTE: Debe declarar URL de confirmación al servicio al cliente 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 ());Si tiene alguna sugerencia, no dude en crear un problema aquí en GitHub y/o bifurcado este repositorio, realice cambios y envíe una solicitud de extracción.