Created
February 25, 2015 08:01
-
-
Save refo/27fa6bcc9ed19c2ca64b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Refik ÖNAL | |
refikonal@gmail.com | |
20130308.0144 | |
referans dosyalar: | |
classes/controller/page.php : action_siparis_kayit() - Yusuf Güzel | |
views/static/3d-test.php | |
views/static/3d-test2.php | |
*/ | |
class Ykb { | |
private $mid = '6700000000'; | |
private $tid = '67000000'; | |
private $posnetid = '00000'; | |
private $username = 'username'; | |
private $password = 'password'; | |
private $ip = '0.0.0.0'; | |
private $id_prefix = 'prefix_'; | |
/** 3D Secure return url | |
* | |
* Yeni Ykb instance'ı oluşturulduktan sonra Controller'da set edilebilir. | |
* Zaten Öylesi daha mantıklı zaten bence | |
* | |
* $ykb = new Ykb; | |
* $ykb->url = URL::site('...'); | |
* $ykb->tds( $tahsilat_bilgileri ) | |
* | |
*/ | |
public $url = ''; | |
/* Sandbox | |
private $xml_url = 'http://setmpos.ykb.com/PosnetWebService/XML'; | |
private $tds_url = 'http://setmpos.ykb.com/3DSWebService/YKBPaymentService'; | |
//*/ | |
//* Production | |
private $xml_url = 'https://www.posnet.ykb.com/PosnetWebService/XML'; | |
private $tds_url = 'https://www.posnet.ykb.com/3DSWebService/YKBPaymentService'; | |
//*/ | |
private $req; | |
private $xml; | |
private $xml_res; | |
private function _create_request() | |
{ | |
$req = Request::factory($this->xml_url); | |
$client = $req->client(); | |
$client->options(CURLOPT_SSL_VERIFYHOST, 0); | |
$client->options(CURLOPT_SSL_VERIFYPEER, 0); | |
$client->options(CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); | |
$client->options(CURLOPT_INTERFACE, $this->ip); | |
$xml_root = '<?xml version="1.0" encoding="ISO-8859-9"?><posnetRequest/>'; | |
$xml = new SimpleXMLElement($xml_root); | |
$xml->addChild('mid', $this->mid); | |
$xml->addChild('tid', $this->tid); | |
$xml->addChild('username', $this->username); | |
$xml->addChild('password', $this->password); | |
$this->xml = $xml; | |
return $req; | |
} | |
private function _create_xid($len = 20) | |
{ | |
$uid = (string)uniqid(); | |
if ($len < 14) return $uid; | |
$id = $this->id_prefix; | |
$id = substr($id, 0, $len - strlen($uid) - 1) . '_'; | |
$id .= str_pad($uid, $len - strlen($id), '0', STR_PAD_LEFT); | |
return $id; | |
} | |
public function trans($arr) | |
{ | |
/* | |
$arr = array( | |
'cc' => '5526599100034581', | |
'exp' =>'1402', | |
'cvc' => '000', | |
'name' => 'HAYDAR', | |
'amount' => '100', | |
); | |
*/ | |
//.. | |
$req = $this->_create_request(); | |
$reqdata = array( | |
//'cardHolderName' => $arr['name'], | |
'ccno' => $arr['cc'], | |
'expDate' => $arr['exp'], | |
'cvc' => $arr['cvc'], | |
'amount' => $arr['amount'], | |
//'XID' => $this->_create_xid(20), | |
'orderID' => $this->_create_xid(24), | |
'currencyCode' => 'YT', | |
//'tranType' => 'Sale', | |
); | |
$this->xml->tranDateRequired = 1; | |
$xml_req = $this->xml->addChild('sale'); | |
foreach($reqdata as $k => $v) $xml_req->addChild($k, $v); | |
$req->query('xmldata', $this->xml->asXML() ); | |
$result = new stdClass(); | |
$result->xid = $reqdata['orderID']; | |
try { | |
$res = $req->execute(); | |
$xml = new SimpleXMLElement( $res->body() ); | |
$result->xml = $xml; | |
$result->json = json_encode($xml); | |
} catch(Exception $e) { | |
// YKB'den XML dönmedi yada XML'de problem var | |
$result->ok = FALSE; | |
$result->error = 'Banka ile irtibata geçilemedi'; | |
return $result; | |
} | |
if ( $xml->approved != 1 ) { | |
$result->ok = FALSE; | |
$result->error = 'Kart tahsil edilemedi'; | |
return $result; | |
} | |
$result->ok = TRUE; | |
return $result; | |
} | |
public function tds_trans() | |
{ | |
$post = & $_POST; | |
$xid = $post['Xid']; | |
/* --------------------------------------- | |
// Decrypt | |
// --------------------------------------- | |
$req = $this->_create_request(); | |
$reqdata = array( | |
'bankData' => $post['BankPacket'], | |
'merchantData' => $post['MerchantPacket'], | |
'sign' => $post['Sign'], | |
); | |
$xml_req = $this->xml->addChild('oosResolveMerchantData'); | |
foreach($reqdata as $k => $v) $xml_req->addChild($k, $v); | |
$req->query('xmldata', $this->xml->asXML() ); | |
$res = $req->execute(); | |
$xml = new SimpleXMLElement( $res->body() ); | |
// ---------------------------------------*/ | |
// --------------------------------------- | |
// Trans | |
// --------------------------------------- | |
$req = $this->_create_request(); | |
$reqdata = array( | |
'bankData' => $post['BankPacket'], | |
'wpAmount' => '0', // Kaç puan kullanılsın | |
); | |
$xml_req = $this->xml->addChild('oosTranData'); | |
foreach($reqdata as $k => $v) $xml_req->addChild($k, $v); | |
$req->query('xmldata', $this->xml->asXML() ); | |
$result = new stdClass(); | |
$result->xid = $xid; | |
try { | |
$res = $req->execute(); | |
$xml = new SimpleXMLElement( $res->body() ); | |
$result->xml = $xml; | |
$result->json = json_encode($xml); | |
} catch(Exception $e) { | |
// YKB'den XML dönmedi yada XML'de problem var | |
$result->ok = FALSE; | |
$result->error = 'Banka ile irtibata geçilemedi'; | |
return $result; | |
} | |
if ( $xml->approved != 1 ) { | |
$result->ok = FALSE; | |
$result->error = 'Kart tahsil edilemedi'; | |
return $result; | |
} | |
$result->ok = TRUE; | |
$result->xid = $xid; | |
return $result; | |
// --------------------------------------- | |
} | |
public function tds($arr) | |
{ | |
/* | |
$arr = array( | |
'cc' => '5526599100034581', | |
'exp' =>'1402', | |
'cvc' => '000', | |
'name' => 'HAYDAR', | |
'amount' => '100', | |
); | |
*/ | |
//.. | |
$req = $this->_create_request(); | |
$reqdata = array( | |
'cardHolderName' => $arr['name'], | |
'ccno' => $arr['cc'], | |
'expDate' => $arr['exp'], | |
'cvc' => $arr['cvc'], | |
'amount' => $arr['amount'], | |
'XID' => $this->_create_xid(20), | |
'posnetid' => $this->posnetid, | |
'currencyCode' => 'YT', | |
'installment' => '00', | |
'tranType' => 'Sale', | |
); | |
$xml_req = $this->xml->addChild('oosRequestData'); | |
foreach($reqdata as $k => $v) $xml_req->addChild($k, $v); | |
$req->query('xmldata', $this->xml->asXML() ); | |
$result = new stdClass(); | |
$result->xid = $reqdata['XID']; | |
try { | |
$res = $req->execute(); | |
$xml = new SimpleXMLElement( $res->body() ); | |
$result->xml = $xml; | |
$result->json = json_encode($xml); | |
} catch(Exception $e) { | |
// YKB'den XML dönmedi yada XML'de problem var | |
$result->ok = FALSE; | |
$result->error = 'Banka ile irtibata geçilemedi'; | |
return $result; | |
} | |
if ( $xml->approved != 1 ) { | |
$result->ok = FALSE; | |
$result->error = 'Kart bilgileri hatalı'; | |
return $result; | |
} | |
$result->ok = TRUE; | |
$result->form = $this->_create_tds_form( $xml->oosRequestDataResponse ); | |
return $result; | |
} | |
private function _create_tds_form($xml_resdata) | |
{ | |
$formdata = array( | |
'mid' => $this->mid, | |
'posnetID' => $this->posnetid, | |
'posnetData' => $xml_resdata->data1, | |
'posnetData2' => $xml_resdata->data2, | |
'digest' => $xml_resdata->sign, | |
'vftCode' => '00', | |
'lang' => 'tr', | |
'url' => '', | |
'merchantReturnURL' => $this->url, | |
'openANewWindow' => '1', | |
); | |
$form = Form::open($this->tds_url, array('method'=>'POST', 'target'=>'YKBWindow', 'id'=>'ykb_tds') ); | |
foreach($formdata as $k => $v) $form .= Form::hidden($k, $v); | |
$form .= Form::close(); | |
$js = '(function(a){a(function(){var b=a("#ykb_tds"),d=a("#ykb_tds_open");b.find("[name=url]").val(location.href);var c=1*b.find("[name=openANewWindow]").val();window.name=c?"merchantWindow":"YKBWindow";d.click(function(){c&&(x=-5,y=-60,screen&&(y=(screen.availHeight-600-70)/2,x=(screen.availWidth-650)/2),window.open("","YKBWindow","width=650,height=600,screenX="+x+",screenY="+y+",top="+y+",left="+x+",status=yes,location=yes,resizable=no,scrollbars=yes"));b.submit()})})})(jQuery);'; | |
$form .= '<script>' . $js . '</script>'; | |
return $form; | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment