Refactoring üstüne

Share Button

Bu konu üstüne bir giriş yazısı yazmak istedim ama üstad bana söyleyecek söz bırakmamış. Buyrun önce bunu okuyun sonra da spagetti yazılmış örnek bir kod üzerinde birlikte basitce refactoring gerçekleştirelim.

Aslında konunun özü gayet basit:
“Any fool can write code that a computer can understand.Good programmers write code that humans can understand.” (Martin Fowler)

Her apta bilgisayarın anlayabileceği kodu yazabilir. İyi programcılar insanların anlayabileceği kodu yazarlar.

Kodunuz bu standarda uyana kadar refactor etmeye devam edin. :)

if($_POST['bank_id'] == 1) {
  $mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<AbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</AbankRequest>';
	$curl = curl_init();
	$options = array(
		    CURLOPT_URL             => 'http://vpos.abank.com',
		    CURLOPT_POST            => true,
		    CURLOPT_RETURNTRANSFER  => true,
		    CURLOPT_SSL_VERIFYPEER  => false,
		    CURLOPT_SSL_VERIFYHOST  => true,
		    CURLOPT_HEADER          => false,
		    CURLOPT_POSTFIELDS      => $mBankXml
		);
	curl_setopt_array($curl, $options);
	$rd = curl_exec($curl);
	curl_close($curl);
        $xmlObject = simplexml_load_string($rd);
	if($xmlObject->response == 'approved') {
 		$sql = 'UPDATE pos_transactions SET status=1 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        } else {
		$sql = 'UPDATE pos_transactions SET status=0 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        }
} elseif($_POST['bank_id'] == 2) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<BbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</BbankRequest>';
	$curl = curl_init();
	$options = array(
		    CURLOPT_URL             => 'http://vpos.bbbank.com',
		    CURLOPT_POST            => true,
		    CURLOPT_RETURNTRANSFER  => true,
		    CURLOPT_SSL_VERIFYPEER  => false,
		    CURLOPT_SSL_VERIFYHOST  => true,
		    CURLOPT_HEADER          => false,
		    CURLOPT_POSTFIELDS      => $mBankXml
		);
	curl_setopt_array($curl, $options);
	$rd = curl_exec($curl);
	curl_close($curl);
        $xmlObject = simplexml_load_string($rd);
	if($xmlObject->response == 'approved') {
 		$sql = 'UPDATE pos_transactions SET status=1 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        } else {
		$sql = 'UPDATE pos_transactions SET status=0 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        }
} elseif($_POST['bank_id'] == 3) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<CbankRequest>
	<terminalid>10001</termçıkış noktasıinalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</CbankRequest>';
	$curl = curl_init();
	$options = array(
		    CURLOPT_URL             => 'http://vpos.cbank.com',
		    CURLOPT_POST            => true,
		    CURLOPT_RETURNTRANSFER  => true,
		    CURLOPT_SSL_VERIFYPEER  => false,
		    CURLOPT_SSL_VERIFYHOST  => true,
		    CURLOPT_HEADER          => false,
		    CURLOPT_POSTFIELDS      => $mBankXml
		);
	curl_setopt_array($curl, $options);
	$rd = curl_exec($curl);
	curl_close($curl);
        $xmlObject = simplexml_load_string($rd);
	if($xmlObject->response == 'approved') {
 		$sql = 'UPDATE pos_transactions SET status=1 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        } else {
		$sql = 'UPDATE pos_transactions SET status=0 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        }
} elseif($_POST['bank_id'] == 4) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<DbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</DbankRequest>';
	$curl = curl_init();
	$options = array(
		    CURLOPT_URL             => 'http://vpos.dbank.com',
		    CURLOPT_POST            => true,
		    CURLOPT_RETURNTRANSFER  => true,
		    CURLOPT_SSL_VERIFYPEER  => false,
		    CURLOPT_SSL_VERIFYHOST  => true,
		    CURLOPT_HEADER          => false,
		    CURLOPT_POSTFIELDS      => $mBankXml
		);
	curl_setopt_array($curl, $options);
	$rd = curl_exec($curl);
	curl_close($curl);
        $xmlObject = simplexml_load_string($rd);
	if($xmlObject->response == 'approved') {
 		$sql = 'UPDATE pos_transactions SET status=1 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        } else {
		$sql = 'UPDATE pos_transactions SET status=0 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        }
}

Ürkütücü dğeil mi ? Ama reel hayatta malesef bu ve daha da kötüleri de mevcut. Şimdi dilerseniz gelin bu kodları adım adım birlikte refactor edelim.

Öncelikle kodumuzu baştan uca incelediğimizde sayfaya post edilen banka kimliğine göre kodun belirli bir banka api sine veri göndermesi ve sonrasında isteğin sonucu başarılıysa veya başarısızsa veritabanında bir kaydın güncellenmesi gerekiyor.

Her apiye bir http isteği gönderdiğimize göre ilk olarak http isteği yapan bölümü fonksiyon haline getirelim.

/**
  Bu fonksiyon belirli bir url e 
  belirtilen veriyi post eder.

  @param string $url
  @param string $data
  @return string
 */
function sendHttpRequest($url, $data)
{
  $curl = curl_init();
  $options = array(
      CURLOPT_URL             => $url,
      CURLOPT_POST            => true,            
      CURLOPT_RETURNTRANSFER  => true,
      CURLOPT_SSL_VERIFYPEER  => false,   
      CURLOPT_SSL_VERIFYHOST  => true,            
      CURLOPT_HEADER          => false,                   
      CURLOPT_POSTFIELDS      => $data
      );                                                              
  curl_setopt_array($curl, $options);
  $response = curl_exec($curl);
  curl_close($curl);
  return $response
}

Bu değişiklikten sonra kodumuz aşağıdaki hali aldı.

if($_POST['bank_id'] == 1) {
  $mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<AbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</AbankRequest>';
	$apiResponse = sendHttpRequest('http://vpos.abank.com', $mBankXml);
        $xmlObject = simplexml_load_string($apiResponse);
	if($xmlObject->response == 'approved') {
 		$sql = 'UPDATE pos_transactions SET status=1 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        } else {
		$sql = 'UPDATE pos_transactions SET status=0 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        }
} elseif($_POST['bank_id'] == 2) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<BbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</BbankRequest>';
	$apiResponse = sendHttpRequest('http://vpos.bbank.com', $mBankXml);
        $xmlObject = simplexml_load_string($apiResponse);
	if($xmlObject->response == 'approved') {
 		$sql = 'UPDATE pos_transactions SET status=1 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        } else {
		$sql = 'UPDATE pos_transactions SET status=0 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        }
} elseif($_POST['bank_id'] == 3) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<CbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</CbankRequest>';
	$apiResponse = sendHttpRequest('http://vpos.cbank.com', $mBankXml);
        $xmlObject = simplexml_load_string($apiResponse);
	if($xmlObject->response == 'approved') {
 		$sql = 'UPDATE pos_transactions SET status=1 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        } else {
		$sql = 'UPDATE pos_transactions SET status=0 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        }
} elseif($_POST['bank_id'] == 4) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<DbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</DbankRequest>';
	$apiResponse = sendHttpRequest('http://vpos.dbank.com', $mBankXml);
        $xmlObject = simplexml_load_string($apiResponse);
	if($xmlObject->response == 'approved') {
 		$sql = 'UPDATE pos_transactions SET status=1 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        } else {
		$sql = 'UPDATE pos_transactions SET status=0 WHERE sessionid=' . $_SESSION['id'];
		mysql_query($sql);
        }
}

Farkındayım kod hala bok gibi görünüyor. Şimdi de transaction durumunu güncelleyen veritabanı sorgusu için küçük bir fonksiyon yazalım.

/**
  Bu fonksiyon pos transaction ının 
  durumunu günceller.

  @param integer transactionId
  @param int status
 */
function setTransactionStatus($transactionId, $status)
{
  $transactionId  = (int) $transactionId;
  $status         = (int) $status;
  $sqlText        = "UPDATE pos_transactions SET status={$status} WHERE sessionid={$transactionId}";
  mysql_query($sqlText);
}

Bu fonksiyondan sonra kodumuz aşağıdaki hali alacak.

if($_POST['bank_id'] == 1) {
  $mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<AbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</AbankRequest>';
	$apiResponse = sendHttpRequest('http://vpos.abank.com', $mBankXml);
        $xmlObject = simplexml_load_string($apiResponse);
	if($xmlObject->response == 'approved') {
 		setTransactionStatus($_SESSION['id'], 1);
        } else {
		setTransactionStatus($_SESSION['id'], 0);
        }
} elseif($_POST['bank_id'] == 2) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<BbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</BbankRequest>';
	$apiResponse = sendHttpRequest('http://vpos.bbank.com', $mBankXml);
        $xmlObject = simplexml_load_string($apiResponse);
	if($xmlObject->response == 'approved') {
 		setTransactionStatus($_SESSION['id'], 1);
        } else {
		setTransactionStatus($_SESSION['id'], 0);
        }
} elseif($_POST['bank_id'] == 3) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<CbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</CbankRequest>';
	$apiResponse = sendHttpRequest('http://vpos.cbank.com', $mBankXml);
        $xmlObject = simplexml_load_string($apiResponse);
	if($xmlObject->response == 'approved') {
 		setTransactionStatus($_SESSION['id'], 1);
        } else {
		setTransactionStatus($_SESSION['id'], 0);
        }
} elseif($_POST['bank_id'] == 4) {
	$mBankXml = 'data=<?xml version="1.0" encoding="utf-8"?>
	<DbankRequest>
	<terminalid>10001</terminalid>
	<merchantid>904567564</merchantid>
	<username>PROVAUT</username>
	<orderid>' . $_POST['orderid'] . '</orderid>
        <amount>' . $_POST['amount'] . '</amount>
	<card>
	<no>' . $_POST['ccno'] .'</no>
	<expdate>' . $_POST['expdate'] . '</expdate>
	<cvc2>' . $_POST['scode'] . '</cvc2>
	</card>
	</DbankRequest>';
	$apiResponse = sendHttpRequest('http://vpos.dbank.com', $mBankXml);
        $xmlObject = simplexml_load_string($apiResponse);
	if($xmlObject->response == 'approved') {
 		setTransactionStatus($_SESSION['id'], 1);
        } else {
		setTransactionStatus($_SESSION['id'], 0);
        }
}

Evet kod çöplüğümüz ufaktan birşeye benzemeye başlıyor. Şimdi de API lere gönderdiğimiz istekleri fonksiyonlaştıralım.

/**
  ABank icin odeme istegi gonderir.
  @param string $orderId
  @param float $amount
  @param string $cardNo
  @param string $cvc2
  @param string $expDate
  @return boolean
 */
function sendABankPaymentRequest($orderId, $amount, $cardNo, $cvc2, $expDate)
{
  $strXml = 'data=<?xml version="1.0" encoding="utf-8"?>
    <AbankRequest>
    <terminalid>10001</terminalid>
    <merchantid>904567564</merchantid>
    <username>PROVAUT</username>
    <orderid>' . $orderId . '</orderid>
    <amount>' . $amount . '</amount>
    <card>
    <no>' . $cardNo .'</no>
    <expdate>' . $expDate . '</expdate>
    <cvc2>' . $cvc2 . '</cvc2>
    </card>
    </AbankRequest>';
  $apiResponse  = sendHttpRequest('http://vpos.abank.com', $strXml);
  $xmlObject    = simplexml_load_string($apiResponse);
  return ($xmlObject->response == 'approved') ? true : false;
}

/**
  BBank icin odeme istegi gonderir.
  @param string $orderId
  @param float $amount
  @param string $cardNo
  @param string $cvc2
  @param string $expDate
  @return boolean
 */
function sendBBankPaymentRequest($orderId, $amount, $cardNo, $cvc2, $expDate)
{
  $strXml = 'data=<?xml version="1.0" encoding="utf-8"?>
    <BbankRequest>
    <terminalid>10001</terminalid>
    <merchantid>904567564</merchantid>
    <username>PROVAUT</username>
    <orderid>' . $orderId . '</orderid>
    <amount>' . $amount . '</amount>
    <card>
    <no>' . $cardNo .'</no>
    <expdate>' . $expDate . '</expdate>
    <cvc2>' . $cvc2 . '</cvc2>
    </card>
    </BbankRequest>';
  $apiResponse  = sendHttpRequest('http://vpos.bbank.com', $strXml);
  $xmlObject    = simplexml_load_string($apiResponse);
  return ($xmlObject->response == 'approved') ? true : false;
}

/**
  CBank icin odeme istegi gonderir.
  @param string $orderId
  @param float $amount
  @param string $cardNo
  @param string $cvc2
  @param string $expDate
  @return boolean
 */
function sendCBankPaymentRequest($orderId, $amount, $cardNo, $cvc2, $expDate)
{
  $strXml = 'data=<?xml version="1.0" encoding="utf-8"?>
    <CbankRequest>
    <terminalid>10001</terminalid>
    <merchantid>904567564</merchantid>
    <username>PROVAUT</username>
    <orderid>' . $orderId . '</orderid>
    <amount>' . $amount . '</amount>
    <card>
    <no>' . $cardNo .'</no>
    <expdate>' . $expDate . '</expdate>
    <cvc2>' . $cvc2 . '</cvc2>
    </card>
    </CbankRequest>';
  $apiResponse  = sendHttpRequest('http://vpos.bbank.com', $strXml);
  $xmlObject    = simplexml_load_string($apiResponse);
  return ($xmlObject->response == 'approved') ? true : false;
}

/**
  DBank icin odeme istegi gonderir.
  @param string $orderId
  @param float $amount
  @param string $cardNo
  @param string $cvc2
  @param string $expDate
  @return boolean
 */
function sendDBankPaymentRequest($orderId, $amount, $cardNo, $cvc2, $expDate)
{
  $strXml = 'data=<?xml version="1.0" encoding="utf-8"?>
    <DbankRequest>
    <terminalid>10001</terminalid>
    <merchantid>904567564</merchantid>
    <username>PROVAUT</username>
    <orderid>' . $orderId . '</orderid>
    <amount>' . $amount . '</amount>
    <card>
    <no>' . $cardNo .'</no>
    <expdate>' . $expDate . '</expdate>
    <cvc2>' . $cvc2 . '</cvc2>
    </card>
    </DbankRequest>';
  $apiResponse  = sendHttpRequest('http://vpos.bbank.com', $strXml);
  $xmlObject    = simplexml_load_string($apiResponse);
  return ($xmlObject->response == 'approved') ? true : false;
}

Ve… kodumuzun yeni hali…

if($_POST['bank_id'] == 1) {
  $bankResponse = sendABankPaymentRequest($_POST['orderId'], 
                                          $_POST['amount'], 
                                          $_POST['ccno'], 
                                          $_POST['cvc2'], 
                                          $_POST['expdate']);
  if($bankResponse) {
    setTransactionStatus($_SESSION['id'], 1);
  } else {
    setTransactionStatus($_SESSION['id'], 0);
  }
} elseif($_POST['bank_id'] == 2) {
  $bankResponse = sendBBankPaymentRequest($_POST['orderId'], 
                                          $_POST['amount'], 
                                          $_POST['ccno'], 
                                          $_POST['cvc2'], 
                                          $_POST['expdate']);
  if($bankResponse) {
    setTransactionStatus($_SESSION['id'], 1);
  } else {
    setTransactionStatus($_SESSION['id'], 0);
  }
} elseif($_POST['bank_id'] == 3) {
  $bankResponse = sendCBankPaymentRequest($_POST['orderId'], 
                                          $_POST['amount'], 
                                          $_POST['ccno'], 
                                          $_POST['cvc2'], 
                                          $_POST['expdate']);
  if($bankResponse) {
    setTransactionStatus($_SESSION['id'], 1);
  } else {
    setTransactionStatus($_SESSION['id'], 0);
  }
} elseif($_POST['bank_id'] == 4) {
  $bankResponse = sendDBankPaymentRequest($_POST['orderId'], 
                                          $_POST['amount'], 
                                          $_POST['ccno'], 
                                          $_POST['cvc2'], 
                                          $_POST['expdate']);
  if($bankResponse) {
    setTransactionStatus($_SESSION['id'], 1);
  } else {
    setTransactionStatus($_SESSION['id'], 0);
  }
}

Eskiye oranla kodumuz oldukça kısa ve okunaklı oldu. Ancak yine de Aynı işi yapan blokların tekrar etmesi biraz can sıkıcı. Dilerseniz gelin şimdi de bankalara istek gönderen fonksiyonları tekilleştirelim ve sonuca göre bir kerede pos transaction durumumuzu güncelleyelim.

/**
  kimliği belirtilen bankaya ödeme isteği gönderir.

  @param int bankId
  @param string $orderId
  @param float $amount
  @param string $cardNo
  @param string $cvc2
  @param string $expDate
  @return boolean
 */

function sendPaymentRequest($bankId, $orderId, $amount, $cardNo, $cvc2, $expDate)
{
  $functionMap = array(
        1 => 'sendABankPaymentRequest',
        2 => 'sendBBankPaymentRequest',
        3 => 'sendCBankPaymentRequest',
        4 => 'sendDBankPaymentRequest'
      );

  if(!in_array($bankId, $functionMap)) {
    return false;
  }
  
  $function = $functionMap[$bankId];

  return $$function($_POST['orderId'],
      $_POST['amount'],
      $_POST['ccno'],
      $_POST['cvc2'],
      $_POST['expdate']);
}

Bu geliştirmeden sonra kodumuz son olarak aşağıdaki hali alacaktır.

$bankResponse = sendPaymentRequest($_POST['bank_id'],
    $_POST['orderId'], 
    $_POST['amount'], 
    $_POST['ccno'], 
    $_POST['cvc2'], 
    $_POST['expdate']);
if($bankResponse) {
  setTransactionStatus($_SESSION['id'], 1);
} else {
  setTransactionStatus($_SESSION['id'], 0);
}

Berker’in comment’inden sonra gelen edit:

$bankResponse = sendPaymentRequest($_POST['bank_id'],
    $_POST['orderId'], 
    $_POST['amount'], 
    $_POST['ccno'], 
    $_POST['cvc2'], 
    $_POST['expdate']);
setTransactionStatus($_SESSION['id'], (int) $bankResponse);

Göktuğ’nun comment’inden sonra sendPaymentRequest() fonksiyonuna gelen edit:

/**
  kimliği belirtilen bankaya ödeme isteği gönderir.

  @param int bankId
  @param string $orderId
  @param float $amount
  @param string $cardNo
  @param string $cvc2
  @param string $expDate
  @return boolean
 */

function sendPaymentRequest($bankId, $orderId, $amount, $cardNo, $cvc2, $expDate)
{
  $functionMap = array(
        1 => 'sendABankPaymentRequest',
        2 => 'sendBBankPaymentRequest',
        3 => 'sendCBankPaymentRequest',
        4 => 'sendDBankPaymentRequest'
      );

  if(!in_array($bankId, $functionMap)) {
    return false;
  }

  return $functionMap[bankId]($orderId,
      $amount,
      $cardNo,
      $cvc2,
      $expDate);
}
Share Button

About İbrahim Gündüz

1983 yılında İstanbul’da doğdu. İlkokul yıllarında cobol ve basic le olan tanışması, yazılıma olan ilgisini arttırdı 2005 yılında. Uludağ Üniversitesi Teknik Bilimler Meslek Yüksek Okulu Elektronik bölümünden mezun olan Gündüz, çeşitli alanlarda faaliyet gösteren kurumlarda yazılım geliştirici olarak görev almıştır. Mesleki ilgi alanları, ölçeklenebilir sistemler, uygulama entegrasyonları ve ödeme sistemleridir. Halen Markafoni back end geliştirici olarak çalışmaktadır.

9 Comments

  • Ekim 17, 2012 - 5:06 am | Permalink

    Hatta

    “`
    if($bankResponse) {
    setTransactionStatus($_SESSION[‘id’], 1);
    } else {
    setTransactionStatus($_SESSION[‘id’], 0);
    }
    “`

    kısmı da şöyle yazılabilir:

    “`
    setTransactionStatus($_SESSION[‘id’], $bankResponse);
    “`

    • admin
      Ekim 17, 2012 - 6:34 am | Permalink

      Haklısın Berker. Teşekkürler :)

  • Ekim 17, 2012 - 7:36 am | Permalink

    Blog’uma webrazzi’den referans verildi, bu kadar mutlu olmadım <3

    "Her developer, refactoring'i tadacaktır" diyerek, ergen misali de "klavysene sağlık" diyerek yorumuma son veriyorum. "Klavyene sağlık"

  • Ekim 17, 2012 - 2:03 pm | Permalink

    İbrahim yine çok güzel bir yazı olmuş. Ellerine sağlık.

    Öncelikle bir debug;
    return $$function($_POST['orderId'],
    yerine
    return $function($_POST['orderId'],
    olmalı

    Sonrasında da 1 değişkenden daha kurtaran ufak bir edit:
    $function = $functionMap[$bankId];

    return $$function($_POST['orderId'],
    $_POST['amount'],
    $_POST['ccno'],
    $_POST['cvc2'],
    $_POST['expdate']);

    yerine aşağıdaki şekilde de kullanabiliriz.

    return $functionMap[$bankId]($_POST['orderId'],
    $_POST['amount'],
    $_POST['ccno'],
    $_POST['cvc2'],
    $_POST['expdate']);

    • admin
      Ekim 17, 2012 - 7:15 pm | Permalink

      Katkın için çok teşekkür ederim Göktuğ. Yazıyı tekrar güncelledim. Eline sağlık.

  • Ekim 26, 2012 - 4:03 pm | Permalink

    Kardeşim ellerine sağlık, böyle doğru, nokta atışı, türkçe yazılara çok ihtiyacımız var.

    • admin
      Ekim 26, 2012 - 9:22 pm | Permalink

      Eyvallah İrfan. Teşekkür ederim.

  • Kasım 4, 2012 - 3:09 am | Permalink

    Çok güzel bir yazı olmuş. Very nice. Nice böyle yazılara.

  • Kasım 4, 2012 - 6:40 am | Permalink

    Eyvallah üstad. Teşekkür ederim.

  • Bir Cevap Yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir