Üyelik Tarihi: 10.05.2005
Yer: konya
Yaş: 35
Mesaj: 44
|
php deki kodu asp de çalışırtırmak
bu kodu buldum bunu ASP de nasıl uyarlarım yani XML olarak nasıl post ederim
kod bilgim zayıf yardımcı olursanız sevinirim..?
<?PHP
define ('CURL_METHOD', 'LINUX'); // LINUX veya PHP
define ('TEST_ORTAMI', 'E'); // E veya H (E: Test sonuçlarının ekrana yazılması amacıyla)
if (TEST_ORTAMI == 'E') { // Bankadan dönen XML sonucu ekrana da yazdırmak için E seçelim
$apiname = "aktest1"; //API kullanıcı adı
$apipass = "aktest1"; //API kullanıcı şifresi
$apiclient = "112345678"; // Firma SanalaPOS ID
// $banka değişkeni ödeme sayfasından post edilerek hangi banka serverine daha gönderileceği belirlenir
// Tek banka ise buna gerek yok
if ($HTTP_POST_VARS["banka"] == "akbank") {
$gateway = "https://www.sanalakpos.com/servlet/cc5ApiServer";
}
if ($HTTP_POST_VARS["banka"] == "fortis") {
$gateway = "https://vpos.est.com.tr/servlet/cc5ApiServer";
}
if ($HTTP_POST_VARS["banka"] == "finansbank") {
$gateway = "https://www.fbwebpos.com/servlet/cc5ApiServer";
}
if ($HTTP_POST_VARS["banka"] == "garanti") {
$gateway = "https://ccpos.garanti.com.tr/servlet/cc5ApiServer";
}
if ($HTTP_POST_VARS["banka"] == "halkbank") {
$gateway = "https://vpos.est.com.tr/servlet/cc5ApiServer";
}
if ($HTTP_POST_VARS["banka"] == "isbank") {
$gateway = "https://spos.isbank.com.tr/servlet/cc5ApiServer";
}
if ($HTTP_POST_VARS["banka"] == "kocbank") {
$gateway = "https://www.kocbankvpos.com/servlet/cc5ApiServer";
}
// Direk istediğimiz bankayı herhangi bir yerden post data almadan test etmek için aşağıdakilerden birini seç
$gateway = "https://cc5test.est.com.tr/servlet/cc5ApiServer"; //EST Test server
// $gateway = "https://www.fbwebpos.com/servlet/cc5ApiServer";
// $gateway = "https://ccpos.garanti.com.tr/servlet/cc5ApiServer"; // Garanti bank gerçek server
// Aşağıdaki kodlar test için elle girildi. Ama ödeme sayfasından post edilerek kullanıcak tabi gerçek uygulamada
// Gerçek uygulamada burası silinecek ve ödeme sayfasından post edilecek değişkenler kullanılacak...
$type = "Auth"; // Kart para çekme işlemi için Auth/PreAuth vs....
$oid = "Ord-1232"; / Order_Id
$ip=GetHostByName($REMOTE_ADDR);
$cardno = "4242424242424242";
$expmonth = "05";
$expyear = "08";
$cv2 = "001";
$total = "10.05";
$taksit = ""; // Kaç taksit yapılacak
}
// Evet, aşağıdaki bankanın bizden beklediği XML veri formatı. Değişkenleri ödeme sayfasından post ediyoruz. (Burada yukarıdaki statik değerleri kullanıyoruz)
$request = "DATA=<?XML version=\"1.0\" encoding=\"ISO-8859-9\"?>
<CC5Request>
<Name>$apiname</Name>
<Password>$apipass</Password>
<ClientId>$apiclient</ClientId>
<IPAddress>$ip</IPAddress>
<Email>$email</Email>
<Mode>P</Mode>
<OrderId>$oid</OrderId>
<GroupId></GroupId>
<TransId></TransId>
<UserId></UserId>
<Type>$type</Type>
<Number>$cardno</Number>
<Expires>$expmonth/$expyear</Expires>
<Cvv2Val>$cv2</Cvv2Val>
<Total>$total</Total>
<Currency>949</Currency>
<Taksit>$taksit</Taksit>
<BillTo>
<Name>$Bname</Name>
<Street1>$Baddr1</Street1>
<Street2>$Baddr2</Street2>
<Street3></Street3>
<City>$Bcity</City>
<StateProv></StateProv>
<PostalCode>$Bzip</PostalCode>
<Country>$Bcountry</Country>
<Company></Company>
<TelVoice>$phone</TelVoice>
</BillTo>
<ShipTo>
<Name>$userid</Name>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City></City>
<StateProv></StateProv>
<PostalCode></PostalCode>
<Country></Country>
</ShipTo>
<Extra></Extra>
</CC5Request>
";
if (CURL_METHOD == "LINUX") {
// linux cURL metodu - shell üzerinden curl çalıştırılır, biraz daha hızlıdır. Shell erişim hakkınız olmalı
$result = `curl -s -d '$request' $gateway`;
$sresult = explode("\n",$result);
foreach ($sresult as $da)
{
$i=strpos($da,">");
$j=strrpos($da,"<");
$x=strpos($da,"<");
$key= substr($da,$x+1,$i-$x-1);
$val= substr($da,$i+1,$j-$i-1);
$ret[$key]=$val;
if ($key == "ProcReturnCode") $ProcReturnCode = $val;
if ($key == "AuthCode") $AuthCode = $val;
if ($key == "ErrMsg") $ErrMsg = $val;
if ($key == "HOSTMSG") $HOSTMSG = $val;
}
}
else {
// PHP cURL metodu
$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL,$gateway); // set url to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // times out after 4s
curl_setopt($ch, CURLOPT_POSTFIELDS, $request); // add POST fields
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Eğer SSL uyarısı alınıyorsa bunu açalım
$result = curl_exec($ch); // run the whole process
if (curl_errno($ch)) print curl_error($ch);
else curl_close($ch);
$response_tag="Response";
$posf = strpos ( $result, ("<" . $response_tag . ">") );
$posl = strpos ( $result, ("</" . $response_tag . ">") ) ;
$Response = substr ( $result, $posf+strlen($response_tag)+2 , $posl - $posf - strlen($response_tag)-2 ) ;
$response_tag="OrderId";
$posf = strpos ( $result, ("<" . $response_tag . ">") );
$posl = strpos ( $result, ("</" . $response_tag . ">") ) ;
$OrderId = substr ( $result, $posf+strlen($response_tag)+2 , $posl - $posf - strlen($response_tag)-2 ) ;
$response_tag="AuthCode";
$posf = strpos ( $result, "<" . $response_tag . ">" );
$posl = strpos ( $result, "</" . $response_tag . ">" ) ;
$AuthCode = substr ( $result, $posf+strlen($response_tag)+2 , $posl - $posf - strlen($response_tag)-2 ) ;
$response_tag="ProcReturnCode";
$posf = strpos ( $result, "<" . $response_tag . ">" );
$posl = strpos ( $result, "</" . $response_tag . ">" ) ;
$ProcReturnCode = substr ( $result, $posf+strlen($response_tag)+2 , $posl - $posf - strlen($response_tag)-2 ) ;
$response_tag="ErrMsg";
$posf = strpos ( $result, "<" . $response_tag . ">" );
$posl = strpos ( $result, "</" . $response_tag . ">" ) ;
$ErrMsg = substr ( $result, $posf+strlen($response_tag)+2 , $posl - $posf - strlen($response_tag)-2 ) ;
$response_tag="HOSTMSG";
$posf = strpos ( $result, "<" . $response_tag . ">" );
$posl = strpos ( $result, "</" . $response_tag . ">" ) ;
$HOSTMSG = substr ( $result, $posf+strlen($response_tag)+2 , $posl - $posf - strlen($response_tag)-2 ) ;
}
// Bankadan dönen XML sonucu ekrana yazdırmak için
if (TEST_ORTAMI == 'E') {echo htmlspecialchars($result); exit();}
if ($ProcReturnCode == "00") {
if (!headers_sent($filename, $linenum)) {
// Bankadan 00 başarılı kodu gelmişse artık işleme devam edebiliriz
header ("Location: checkout_process.PHP?auth_code=$AuthCode");
}
else { // Eğer header already sent by... uyarısı çıkıyorsa javaScriptle deneyelim
$isSSL = $_SERVER['SERVER_PORT'] == '443' ? 'https' : 'http';
$host = strlen($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:$_SERVER['SERVER_NAME'];
echo '<script LANGUAGE="JavaScript">';
echo 'window.location="'. $isSSL .'://'.$host. '/' . 'checkout_process.PHP?auth_code='.$AuthCode.'";';
echo '// -->';
echo '</script>';
}
}
else { // Bankadan 00 başarılı kodu gelmmeişse gelen koda göre neymiş problem bir bakalım
switch ($ProcReturnCode) {
case "01": $msg = "Kredi kartınız için bankanız provizyon talep etmektedir. İşlem sonuçlanmamıştır."; break;
case "02": $msg = "Kredi kartınız için bankanız provizyon talep etmektedir. İşlem sonuçlanmamıştır."; break;
case "04": $msg = "Bu kredi kartı ile alışveriş yapamazsınız. Başka bir kartla tekrar deneyiniz."; break;
case "05": $msg = "İşlem onaylanmadı. Kredi kartınız ile işlem limitini aşmış olabilirsiniz. Bankanızı arayınız."; break;
case "09": $msg = "Kredi kartınız yenilenmiştir. Yenilenmiş kartınız ile tekrar deneyiniz."; break;
case "10": $msg = "İşlem onaylanmadı. Başka bir kredi kartı ile işlem yapmayı deneyiniz."; break;
case "14": $msg = "Kredi kart numaranız hatalıdır. Kart bilgilerinizi kontrol edip tekrar deneyiniz."; break;
case "16": $msg = "Kredi kartınızın bakiyesi yetersiz. Başka bir kredi kartı ile tekrar deneyiniz."; break;
case "30": $msg = "Bankanıza ulaşılamadı. Tekrar denemenizi tavsiye ediyoruz."; break;
case "36": $msg = "Kredi kartınız kayıp veya çalıntı olarak bildirilmiştir."; break;
case "41": $msg = "Kredi kartınız kayıp veya çalıntı olarak bildirilmiştir."; break;
case "43": $msg = "Kredi kartınız kayıp veya çalıntı olarak bildirilmiştir."; break;
case "51": $msg = "Kredi kartınızın bakiyesi yetersiz. Başka bir kredi kartı ile tekrar deneyiniz."; break;
case "54": $msg = "İşlem onaylanmadı. Kartınızı kontrol edip tekrar deneyiniz."; break;
case "57": $msg = "İşlem onaylanmadı. Başka bir kredi kartı ile işlem yapmayı deneyiniz."; break;
case "58": $msg = "Yetkisiz bir işlem yapıldı. Örn: Kredi kartınızın ait olduğu banka dışında bir bankadan taksitlendirme yapıyor olabilirsiniz. Başka bir kredi kartı ile işlem yapmayı deneyiniz."; break;
case "62": $msg = "İşlem onaylanmadı. Başka bir kredi kartı ile işlem yapmayı deneyiniz."; break;
case "65": $msg = "Kredi kartınızın günlük işlem limiti dolmuştur. Başka bir kredi kartı ile deneyiniz."; break;
case "77": $msg = "İşlem onaylanmadı. Başka bir kredi kartı ile işlem yapmayı deneyiniz."; break;
case "82": $msg = "İşlem onaylanmadı. Kart bilgilerinizi kontrol edip tekrar deneyiniz."; break;
case "91": $msg = "Bankanıza ulaşılamıyor. Başka bir kredi kartı ile tekrar deneyiniz."; break;
default: $msg = 'Bir hata oluştu (Hata Kodu:'.$ProcReturnCode.') Tekrar deneyiniz. sorun devam ederse lütfen bizimle temasa geçiniz.'; break;
}
if (!headers_sent($filename, $linenum)) {
// Problem $msg değişkenine atandı. Bunu bir ekranda gösterelim ve işleme baştan başlayalım olayı burada
header ("Location: checkout_payment.PHP?payment_error=creditcard&error=$msg"); // Buraya yönlenecek sayfa belirtilir
}
else { // Eğer header already sent by... uyarısı çıkıyorsa javaScriptle deneyelim birde
$isSSL = $_SERVER['SERVER_PORT'] == '443' ? 'https' : 'http';
$host = strlen($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:$_SERVER['SERVER_NAME'];
echo '<script LANGUAGE="JavaScript">';
echo 'window.location="'. $isSSL .'://'.$host. '/' . 'checkout_payment.PHP?payment_error=creditcard&error='.$msg.'";';
echo '// -->';
echo '</script>';
}
}
?>
|