3 Ekim 2013

Garanti Sanal Pos Kurulumu - (PHP XMLPay)



Merhaba arkadaşlar, elektronik ticaretin payının artması ve internette üreticilerin tüketiciye ulaşmasının kolaylaşmasıyla firmaların sanal pos kullanımları arttı. Dolayısı ile kodlayıcların sanal pos kurulumlarını bilmeleri gerekiyor. Bende sizlere yardımcı olması için Garanti XMLPay sanal pos kurulumunu açıklamaya çalışacağım.



Öncelikle elinizde olması gereken bilgiler:
1- Güncel kod örnekleri ve ayrıntılı açıklamalar
 link: http://www.garantipos.com.tr/mailing/GVP.zip

2- Sanal Pos yönetim paneli giriş bilgileri
 https://sanalposweb.garanti.com.tr
 ( mail yolu ile kullanıcıya iletilmiş olması gerekli iletilmedi ise garanti sanal pos hizmetlerini arayın )

 Bu bilgiler elinizde olduğunu varsayalım ve panele girelim.
 1- Panelde sol menüden "yönetim" alanına girelim.
 2- "Şifre parola resetleme" alanına girelim.
 3- "PROVAUT" (Provizyon Kullanıcısı) üzerine tıklayalım ve şifre bilgilerini girip kaydedelim. (sizde bir yere php dosyası için provaut adı ile not alın.) Bu işlem ile uygulamamızın müşterilerin kart bilgilerinden para çekmemisi aktifleştiriyoruz.
 4- Aynı şekilde "şifre parola resetleme"den "PROVRFN" alanına girip şifre bilgileri girelim. Bu işlem ile birazdan oluşturacağımız İptal/İade Kullanıcısı işlemlerini yapabilmesini aktifleştiriyoruz.
 5- Yönetim panelinden "Kullanıcı tanımlama" işlemlerine giriyoruz.
 6- Kullanıcı Sayfa Rolü "Sipariş Görüntüleme" yi seçerek bir kullanıcı oluşturuyoruz. Girdiğimiz bilgileri not alıyoruz.
 Sonraki sayfada "Tüm terminallerde tam yetkiliyi" seçiyoruz ve kaydediyoruz.
 (Bu kullanıcı https://sanalposweb.garanti.com.tr/ panelinden giriş yaparak siparişleri görecek isterse iptal (aynı gün için) veya iade edecek.)
 7- Yönetim panelinden "3d secure key değiştirme" alanına giriyoruz. "Terminal No" yu php dosyamız için not alıyoruz. 3d secure için bir anahtar oluşturmamız gerekmekte işlemlerimizin aktif olabilmesi için.
 http://www.string-functions.com/string-hex.aspx sitesine girip 24 karakter rastgele bişeyler yazalım ve "convert" butonuna basalım. çıkan yeni metni kopyalayalım,
 garanti paneline geri dönelim "secure key" alanına yapıştırıp kaydedelim. (sizde php dosyası için not alın.)

 Şimdi XML Pay PHP dosyamızı açıyoruz.
 Aşağıdaki sayfa Curl ile XML üzerinden bilgilendirme yapmaktadır.
 xml sonucu güzel gözükmesi için pretty xml fonksiyonu kullanılmıştır.

gerekli alanlara kısa açıklama girilmiştir.
sorularınız olursa yorum ile beklerim.
kolay gelsin.


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title></title>
</head>
<body>
    <?php
/** Prettifies an XML string into a human-readable and indented work of art
 *  @param string $xml The XML as a string
 *  @param boolean $html_output True if the output should be escaped (for use in HTML)
 */
function xmlpp($xml, $html_output=false) {
    $xml_obj = new SimpleXMLElement($xml);
    $level = 4;
    $indent = 0; // current indentation level
    $pretty = array();
    
    // get an array containing each XML element
    $xml = explode("n", preg_replace('/>s*</', ">n<", $xml_obj->asXML()));

    // shift off opening XML tag if present
    if (count($xml) && preg_match('/^<?s*xml/', $xml[0])) {
      $pretty[] = array_shift($xml);
    }

    foreach ($xml as $el) {
      if (preg_match('/^<([w])+[^>/]*>$/U', $el)) {
          // opening tag, increase indent
          $pretty[] = str_repeat(' ', $indent) . $el;
          $indent += $level;
      } else {
        if (preg_match('/^</.+>$/', $el)) {            
          $indent -= $level;  // closing tag, decrease indent
        }
        if ($indent < 0) {
          $indent += $level;
        }
        $pretty[] = str_repeat(' ', $indent) . $el;
      }
    }   
    $xml = implode("n", $pretty);   
    return ($html_output) ? htmlentities($xml) : $xml;
}


  $ip = $_SERVER['REMOTE_ADDR']; 


  
  $strMode = "PROD";
        $strVersion = "v0.01";
        $strTerminalID = "xxx"; // 3d secure key degistirme alaninda yaz&#305;yor
        $strTerminalID_ = "0xxx"; //TerminalID basina 0 eklenerek 9 digite tamamlanmali
        $strProvUserID = "PROVAUT"; //
        $strProvisionPassword = "xxx"; // Provaut icin olusturdugumuz sifre
        $strUserID = "xxxxxx"; // isyeri numarasi
        $strMerchantID = "xxx"; // isyeri numarasi
        $strIPAddress = "$ip";  // Kart bilgileri giren kisinin ip adresi
        $strEmailAddress = "eticaret@garanti.com.tr";
        $strOrderID = "Deneme"; // sizin ozel islem id niz
        $strInstallmentCnt = ""; // Taksit Sayisi. Bos gonderilirse taksit yapilmaz
        $strNumber = $_POST['cardnumber']; // kredi karti numarasi
        $strExpireDate = $_POST['cardexpiredatemonth'].$_POST['cardexpiredateyear']; // kart son kullanim bilgileri
        $strCVV2 = $_POST['cardcvv2']; //kart cvv2 kodu
        $strAmount = "1"; //cekilecek ucret 1.00 TL icin 100 gonderilmelidir. Kurus hesabina göre islem yapmaktadir 1=1 kurus 100= 1tl
        $strType = "sales"; //tip
        $strCurrencyCode = "949"; // para birimi turk lirasi icin 949
        $strCardholderPresentCode = "0";
        $strMotoInd = "N";
        $strHostAddress = "https://sanalposprov.garanti.com.tr/VPServlet";
        $SecurityData = strtoupper(sha1($strProvisionPassword.$strTerminalID_));
        $HashData = strtoupper(sha1($strOrderID.$strTerminalID.$strNumber.$strAmount.$SecurityData));
        $xml= "<?xml version="1.0" encoding="UTF-8"?>
        <GVPSRequest>
        <Mode>$strMode</Mode><Version>$strVersion</Version>
        <Terminal><ProvUserID>$strProvUserID</ProvUserID><HashData>$HashData</HashData><UserID>$strUserID</UserID><ID>$strTerminalID</ID><MerchantID>$strMerchantID</MerchantID></Terminal>
        <Customer><IPAddress>$strIPAddress</IPAddress><EmailAddress>$strEmailAddress</EmailAddress></Customer>
        <Card><Number>$strNumber</Number><ExpireDate>$strExpireDate</ExpireDate><CVV2>$strCVV2</CVV2></Card>
        <Order><OrderID>$strOrderID</OrderID><GroupID></GroupID><AddressList><Address><Type>S</Type><Name></Name><LastName></LastName><Company></Company><Text></Text><District></District><City></City><PostalCode></PostalCode><Country></Country><PhoneNumber></PhoneNumber></Address></AddressList></Order><Transaction><Type>$strType</Type><InstallmentCnt>$strInstallmentCnt</InstallmentCnt><Amount>$strAmount</Amount><CurrencyCode>$strCurrencyCode</CurrencyCode><CardholderPresentCode>$strCardholderPresentCode</CardholderPresentCode><MotoInd>$strMotoInd</MotoInd><Description></Description><OriginalRetrefNum></OriginalRetrefNum></Transaction>
        </GVPSRequest>";
    
        If ($_POST['IsFormSubmitted'] == ""){
        }
        else {
        
   $ch=curl_init();
   curl_setopt($ch, CURLOPT_URL, $strHostAddress);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_POST, 1) ;
   curl_setopt($ch, CURLOPT_POSTFIELDS, "data=".$xml);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
   $results = curl_exec($ch);
   curl_close($ch);

   echo "<b>Giden istek </b><br />";
   echo $xml;
   echo "<br /><b>Gelen Yanit </b><br />";
   echo '<pre>' . xmlpp($results, true) . '</pre>';
   
   $xml_parser = xml_parser_create();
   xml_parse_into_struct($xml_parser,$results,$vals,$index);
   xml_parser_free($xml_parser);
   
   //Sadece ReasonCode degerini aliyoruz.
   $strReasonCodeValue = $vals[$index['REASONCODE'][0]]['value'];
   $islem_no = $vals[$index['RETREFNUM'][0]]['value'];
   
   echo "<br /><b>islem Sonucu </b><br />";
   if($strReasonCodeValue == "00")
   { 
    echo "<br>islem no: $islem_no<br>";
   } else {
    echo "<br>islem Basarisiz<br>"; 
   }
        }
    ?>
    <form action="?" method="post">
        Card Number: <input name="cardnumber" type="text" />
        <br />
        Expire Date (mm): <input name="cardexpiredatemonth" type="text" />
        <br />
        Expire Date (yy): <input name="cardexpiredateyear" type="text" />
        <br />
        CVV2: <input name="cardcvv2" type="text" />
        <br />
        <input type="hidden" name="IsFormSubmitted" value="submitted" />
        <input id="submit" type="submit" value="islemi Gonder" />
    </form>
</body>
</html>

NOT: işlemlerinizi sipariş görüntüleme kullanıcısı ile panele girerek takip edebilirsiniz. tüm metni indir: http://www.mediafire.com/view/?47ifg7v04i2gzro

barisla.com

2 yorum:

Unknown dedi ki...

Siteme nasıl entegre ediyoruz

Barış dedi ki...

lan geredeli ramazan beni buldun yine :D

mail attım kontrol et