Etiket arşivi: payu puan

PayU Alu Entegrasyonu Puan Kullanımı

Bir önceki yazımda, PayU entegrasyonunda Loyalty points api kullanarak nasıl kredi kartı puanlarının kullanılabileceğini paylaşmıştım. Bu makalede ise puan sorgulama sonucu başarılı ise, yani kredi kartında puan bulunuyor ise, puan kullanma isteğini nasıl göndereceğimizi paylaşacağım.

Öncelikle, puan kullanabilmek için alu entegrasyonu yapmış olmanız gerekmektedir. Sonrasında yapmamız gereken çok fazla bir işlem yok aslında. PayU’ ya göndermiş olduğumuz alu requestine USE_LOYALTY_POINTS=YES parametresini ilave etmemiz gerekiyor.

Aşağıda örnek bir request paylaşıyorum. Parametreyi ilave ettikten sonra, son durumda tüm parametrelerin alfabetik olarak sıralanmış olduğuna dikkat ediniz.

BACK_REF=>http://localhost/odeme2/odeme/3ds_return.php
BILL_ADDRESS=>Billing address
BILL_ADDRESS2=>Billing address
BILL_CITY=>City
BILL_COUNTRYCODE=>TR
BILL_EMAIL=>deneme@payu.com.tr
BILL_FAX=>4543958674234
BILL_FNAME=>Serkan
BILL_LNAME=>Yıldırım
BILL_PHONE=>-
BILL_STATE=>State / Dept.
BILL_ZIPCODE=>12345234
CC_CVV=>***
CC_NUMBER=>435508**********
CC_OWNER=>TEST
CLIENT_IP=>127.0.0.1
DELIVERY_ADDRESS=>Delivery Address
DELIVERY_ADDRESS2=>Delivery Address
DELIVERY_CITY=>City
DELIVERY_COMPANY=>Company Name
DELIVERY_COUNTRYCODE=>TR
DELIVERY_EMAIL=>deneme@payu.com.tr
DELIVERY_FNAME=>Yıldırım
DELIVERY_LNAME=>Serkan
DELIVERY_PHONE=>454395867
DELIVERY_STATE=>State / Dept.
DELIVERY_ZIPCODE=>12345
EXP_MONTH=>12
EXP_YEAR=>2018
LANGUAGE=>TR
MERCHANT=>OPU_TEST
ORDER_DATE=>2015-12-17 08:07:32
ORDER_PCODE[0]=>T234435
ORDER_PINFO[0]=>Ürün bilgisi 1
ORDER_PNAME[0]=>Ürün1
ORDER_PRICE[0]=>20
ORDER_QTY[0]=>1
ORDER_REF=>4030
ORDER_VAT[0]=>0
PAY_METHOD=>CCVISAMC
PRICES_CURRENCY=>TRY
SELECTED_INSTALLMENTS_NUMBER=>1
USE_LOYALTY_POINTS=>YES

Buraya kadar her şeyin tamam olduğunu düşünüyorum. Peki kısmi puan kullanımı nasıl gerçekleştirilecek ?

Öncelikle kısmi puan kullanımı özelliği tüm bankalar tarafından desteklenmiyor. Yapı Kredi Bankası, Garanti ve Akbank tarafında şuan için kısmi puan kullanımı özelliği desteklenmektedir.

PayU tarafında kısmi puan kullanım isteği göndermek için, USE_LOYALTY_POINTS parametresine ilave olarak LOYALTY_POINTS_AMOUNT parametresini de requeste dahil etmeniz gerekmektedir.

Kartınızda 10 TL puan olduğunu düşünelim. 5 TL puan ile ödensin istiyor iseniz;  LOYALTY_POINTS_AMOUNT=5 olarak göndermeniz yeterli olacaktır.

PayU Puan Kullanımı ( Loyalty Points API ) Entegrasyonu

Bildiğiniz üzere bankalar, her ne kadar isimleri farklı da olsa (Bonus,Chip Para,Paraf Puan,Para Puan vb) müşterilerine kredi kartı alışverişlerinden puan kazandırmaktadır. Buraya kadar her şey güzel. Ancak bana göre asıl mesele puan kazanabilmek değil, kazandığın bu puanları bir yerlerde bir şekilde kullanabilmektir 🙂
PayU, üye işyerlerine bu konuda da bir çözüm sunuyor. PayU’nun geliştirmiş olduğu puan sorgu apisi ile, müşterilerinizin kredi kartlarında bulunan puan miktarını sorgulayabilir ve aynı zamanda bu puanları alışverişlerinde kullanabilmelerine olanak sağlayabilirsiniz.

Bu yazımda sadece puan sorgulama kısmına ve bu işlemin nasıl yapılacağına değineceğim.

Dilerseniz şimdi bu sorgulamanın nasıl yapılacağını php programlama dili ile bir örnek ile açıklayalım.

Öncelikle, puan sorgulama işlemi için aşağıdaki url’ye istek yapacağız. Yapacağımız bu istek, HTTP(s) POST metodu ile olmalıdır.

“https://secure.payu.com.tr/api/loyalty-points/check”

Göndermemiz gereken parametreler aşağıdaki gibidir;

<?php

$apiEndPoint = ‘https://secure.payu.com.tr/api/loyalty-points/check’;

$data = array(

‘MERCHANT’ => ‘OPU_TEST’,
‘CC_NUMBER’ => ‘4355084355084358’,
‘EXP_MONTH’ => ’12’,
‘EXP_YEAR’ => ‘2018’,
‘CC_CVV’ => ‘000’,
‘CURRENCY’ => ‘TRY’,
‘DATE’ => gmdate(‘Y-m-d H:i:s’),
);
ksort($data);

$hashString = ”;

foreach ($data as $currentData) {
$hashString .= strlen(stripslashes($currentData));
$hashString .= stripslashes($currentData);
}
echo $hashString;
$data[‘HASH’] = hash_hmac(‘MD5′,$hashString,’SECRET_KEY’);

$handler = curl_init();
curl_setopt($handler, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($handler, CURLOPT_URL, $apiEndPoint);
curl_setopt($handler, CURLOPT_POST, true);
curl_setopt($handler, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($handler);
echo $result;

$resultInfo = curl_getinfo($handler);
$error = curl_error($handler);
curl_close($handler);

if (200 == $resultInfo[‘http_code’]) {
$resultXML = (array)simplexml_load_string($result);

if (isset($resultXML[‘STATUS’]) && ‘SUCCESS’ == $resultXML[‘STATUS’]) {
echo ‘Api call succeeded. There are ‘ . $resultXML[‘POINTS’] . ‘ points available worthing ‘ . $resultXML[‘AMOUNT’] . ‘ ‘ . $resultXML[‘CURRENCY’];
} else {
echo ‘Api call failed. <br>Result: ‘;
echo ‘<pre>’ . htmlentities($result) . ‘</pre>’;
}
} else {
echo ‘Api call failed. <br>Error: ‘;
echo ‘<pre>’;
print_r($error);
echo ‘</pre>’;
}

?>

Yukarıda paylaştığım kodları sırayla açıklayacak olursak;

  • Öncelikle requesti oluşturduk. Gerekli tüm parametreleri, kart bilgileri, merchant id ve diğer bilgileri doğru bir şekilde giriyoruz.
  • “ksort” fonksiyonu ile tüm parametreleri alfabetik olarak sıralıyoruz.
  • Hash fonksiyonuna göndermek üzere, hash string değerimizi oluşturuyoruz.
  • Hash değerini hesaplıyor ve diziye dahil ediyoruz.
  • Curl ile oluşturduğumuz requesti post ediyoruz.
  • Eğer tüm işlemleri doğru bir şekilde tamamladı iseniz, echo $result; satırında puan sorgusu ile dönen XML yanıtını almış olacaksınız.Aşağıda örnek XML yanıtını görebilirsiniz. Points elementi kartta bulunun puan miktarını, amount elementi ise, bu puanın TL karşılığını göstermektedir.

<epayment>
<status>SUCCESS</status>
<message>SUCCESS</message>
<points>88228</points>
<amount>882.28</amount>
<currency>TRY</currency>
<bank>AKBANK</bank>
<card_program_name>Axess</card_program_name>
<date>2015-10-08 08:03:05</date>
<hash>6246fc01bdc3267460d923e765cdf48f</hash>
</epayment>

Kodlarda bu aşamadan sonra yer alan kısımlar, XML parse işlemleri ile ilgili bu kısmı detaylandırmayacağım.

İlave bir bilgi olarak, bazı bankalar örneğin Akbank, puan sorgualama işlemlerinde kart sahibi bilgisini zorunlu tutmaktadır. Bu nedenle Akbank için puan sorgusu yaparken “CC_OWNER” parametresini de requeste dahil etmeniz gerekmektedir. Yukarıda paylaştığım örnek, test kartları ile yapıldığı için ben dahil etmedim.