API V2

İstek Parametreleri (Request Parameters)

API Gateway Adresi :

                
                    POST https://api.payreks.com/gateway/v2
                
            

Payreks API Gateway'ine aşağıda belirtilen parametreler gelmelidir. Yanında * işareti olanlar zorunlu parametrelerdir.

  • api_key*
  • token*
  • return_type
  • return_url
  • return_data*
  • product_name*
  • user_id*
  • user_info*
  • user_ip*
  • amount*
  • payment*

Parametre Ayrıntıları :

Parametre Türü Açıklama Örnek
api_key string Oluşturduğunuz mağazanıza ait sisteme tanımlanmış api key'iniz. (Zorunlu) XXXX-XXXXXX-XXXXXX-XXXX
token string Oluşturduğunuz mağazanıza ait sisteme tanımlanmış api key ve secret key'in HMAC-MD5(HMAC-256) standartlarına göre şifrelenmiş hali. (Zorunlu) XXXXXXXXXX
return_type string API servisimizin sizin belirttiğiniz geri dönüş adresine verdiği cevabın formatını belirtir. (Opsiyonel) json
return_url string Ödeme sonrası API servisimizin hangi adrese veri göndereceğini belirtir. (Opsiyonel) https://payreks.com/payreks_notify.php
return_data string API servisimize gelen bu verinin aynı şekilde geri dönüş adresinize ileteceği değeri belirtir. (Zorunlu) 123
product_name string Ödemesi yapılacak ürünün adını belirtir. (Zorunlu) 30 Kredi
user_id integer Alıcının sisteminizde kayıtlı ID numarasını belirtir. (Zorunlu) 801808
user_info string Alıcının sisteminize kayıtlı kullanıcı adı veya e-posta adresini belirtir. (Zorunlu) demouser, [email protected]
user_ip string Alıcının sisteminize giriş yaptığı anlık IP adresini belirtir. (Zorunlu) 123.12.34.123
amount string Ödemesi yapılacak ürünün fiyatını belirtir. (Zorunlu) 5.95
payment string Ödeme yöntemini belirtir (Kredi Kartı : 1) (Havale/EFT : 2) (Mobil Ödeme : 3) (İninal Kart : 4) (Zorunlu) 1

Cevap Parametreleri (Response Parameters)

Payreks Elektronik Cüzdan sisteminde kayıtlı mağazanızın belirttiğiniz geri dönüş linkine, aşağıdaki parametreler ile JSON formatında cevap verilmektedir.

  • status
  • link

Parametre Ayrıntıları :

Parametre Türü Açıklama
status integer API cevabının durumunu belirtir. 200,500,502,503,504,505,506 değerlerini içerir.
link string API cevabına göre mağaza ödeme ekranınızın URL'sini belirtir.

status Parametresinin Alabileceği Değerler Ve Anlamları :

Değer Türü Anlam
200 integer İşlemin başarılı olması halinde dönen cevaptır.
500 integer Verinin işlenmediği durumlarda dönen cevaptır.
502 integer Payreks servisleri üzerinde bakım çalışması olduğu zamanda dönen cevaptır.
503 integer Parametrelerin eksik, boş veya hatalı gönderildiğinde dönen cevaptır.
504 integer Gönderdiğiniz parametrelere ait bir mağazanın bulunamadığında dönen cevaptır.
505 integer İstek atan servis IP'sinin, erişim izni olmadığında dönen cevaptır.
506 integer token parametresiyle gönderilen hash değerinin hatalı olduğunda dönen cevaptır.

API Token Oluşturma

Bu bölüm Payreks API Gateway'ine gönderilen token değerinin nasıl oluşturulacağını gösterir.

Token İçin Gereken Değerler :

  • api_key
  • secret_key
Parametre Türü Açıklama Örnek
api_key string Oluşturduğunuz mağazanıza ait sisteme tanımlanmış api key'iniz. XXXX-XXXXXX-XXXXXX-XXXX
secret_key string Oluşturduğunuz mağazanıza ait sisteme tanımlanmış secret key'iniz. XXXXXXXXXX

Token Oluşturma Fonksiyonu (PHP) :

                
<?php
    $apiKey = "XXXX-XXXXXX-XXXXXX-XXXX";
    $secretKey = "XXXXXXXXXX";
    function APITokenCreate($apiKey, $secretKey)
    {
		$context = hash_init("sha256", HASH_HMAC, $secretKey);
		hash_update($context, $apiKey);
		$return = hash_final($context);
		$context2 = hash_init("md5", HASH_HMAC, $secretKey);
		hash_update($context2, $return);
		return hash_final($context2);
	}
    $APIToken = APITokenCreate($apiKey, $secretKey);
?>
                
            

İstek Örnek Kodlama

Bu bölüm Payreks API Gateway'ine gönderilen örnek bir kodlama (PHP) içerir.

                
<?php
    //Curl Function
    function curlRequest($url,$data)
	{
		$_ch = curl_init($url);
		curl_setopt($_ch, CURLOPT_CUSTOMREQUEST, "POST");
		if (is_array($data))
			curl_setopt($_ch, CURLOPT_POSTFIELDS, http_build_query($data));
		curl_setopt($_ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($_ch, CURLOPT_SSL_VERIFYPEER, false);
		$_output = curl_exec($_ch);
		curl_close($_ch);
		return $_output;
	}

    //Token Create Function
    function APITokenCreate($apiKey, $secretKey)
    {
		$context = hash_init("sha256", HASH_HMAC, $secretKey);
		hash_update($context, $apiKey);
		$return = hash_final($context);
		$context2 = hash_init("md5", HASH_HMAC, $secretKey);
		hash_update($context2, $return);
		return hash_final($context2);
	}

    //Client IP Address Function
    function getRealIpAddress()
	{
		$ipAddress = null;
		if (isset($_SERVER['HTTP_CLIENT_IP']))
			$ipAddress = $_SERVER['HTTP_CLIENT_IP'];
		else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
			$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
		else if(isset($_SERVER['HTTP_X_FORWARDED']))
			$ipAddress = $_SERVER['HTTP_X_FORWARDED'];
		else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
			$ipAddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
		else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
			$ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
		else if(isset($_SERVER['HTTP_FORWARDED']))
			$ipAddress = $_SERVER['HTTP_FORWARDED'];
		else if(isset($_SERVER['REMOTE_ADDR']))
			$ipAddress = $_SERVER['REMOTE_ADDR'];
		else
			$ipAddress = 'UNKNOWN';
		return $ipAddress;
	}

    $apiKey = "XXXX-XXXXXX-XXXXXX-XXXX"; //Mağaza api key
    $secretKey = "XXXXXXXXXX"; //Mağaza secret key

    $APIToken = APITokenCreate($apiKey, $secretKey); //Api token
    $userID = "801808"; //Alıcı ID numarası
    $userInfo = "[email protected]"; //Alıcı e-posta adresi veya kullanıcı adı
    $userIP = getRealIpAddress(); //Alıcı IP adresi
    $callbackUrl = "https://payreks.com/payreks_notify.php"; // (Opsiyonel) Ödeme sonra verilerin gönderileceği geri dönüş adresi
    $productName = "30 TL Bakiye"; //Ürün Adı
    $returnData = "30" // Ödeme sonra hesaba yüklenecek değer (Aynı şekilde geri döner)
    $amount = 5.95 //Ödemesi yapılacak ürünün fiyatı
    $payment = "1" //Kredi kartı : 1 , Havale/EFT : 2 , Mobil Ödeme : 3 , İninal Kart : 4

    //Api istek adresi
    $requestURL = "https://api.payreks.com/gateway/v2";
    //Api istek dizisi
    $requestData = [
        "api_key" => $apiKey, // Zorunlu
		"token" => $APIToken, // Zorunlu
		"return_type" => "json", // Opsiyonel
        "return_url" => $callbackUrl, // Opsiyonel
        "product_name" => $productName, // Zorunlu
        "return_data" => $returnData, // Zorunlu
		"user_id" => $userID, // Zorunlu
	    "user_info" => $userInfo, // Zorunlu
	    "user_ip" => $userIP, // Zorunlu
        "amount" => $amount, // Zorunlu
		"payment" => "1" // Zorunlu
	];

    $APIRequest = curlRequest($requestURL,$requestData);
    $APIResponse =  json_decode($APIRequest);

    $APIStatus = $APIResponse->status; //Api cevap durum kodu
    $APILink = $APIResponse->link; //Payreks ortak ödeme sayfası adresi
?>
                
            

Geri Dönüş Parametreleri (Callback Parameters)

Bu bölüm ödeme sonrası belirtiğiniz geri dönüş adresine gönderilen parametreleri içerir.

  • order_id
  • credit
  • user_id
  • user_info
  • pay_label
  • total_price
  • net_price
  • hash

Parametre Ayrıntıları :

Parametre Türü Açıklama Örnek
order_id string Ödemeye ait sipariş numarasını belirtir. XXXXXXXX
credit integer Ödemesi yapılan ürünün dijital değerini belirtir. (Alıcının hesabına yüklenecek kredi) 10
user_id integer Payreks API Gateway'ine gönderdiğiniz user_id parametresini belirtir. 801808
user_info integer Payreks API Gateway'ine gönderdiğiniz user_info parametresini belirtir. demouser, [email protected]
pay_label string Ödemenin hangi kanaldan yapıldığını belirtir. CREDIT, MOBILE, EFT, ININAL
net_price float Ödeme sonrası Payreks Elektronik Cüzdanınıza yüklenecek bakiyeyi belirtir. 10.00
hash string Ödeme işlemi sırasında oluşan hash (sha256) kodunu belirtir. (Güvenlik için hash kontrolü yapınız) xxxxxxxxxxxxxxxxxxxxxxxx

UYARI : Geri dönüş sayfanıza işlemler başarılıysa OK yazdırmalısınız. Aksi bir durumda ödeme onaya düşmez.

Geri Dönüş Örnek Kodlama (Callback Example)

Bu bölüm geri dönüş sayfası için örnek bir kodlama (PHP) içerir.

                
<?php
    //Payreks Filter Function
    function payreksFilter($string)
	{
		$escapes = ["--",";","/*","*/","//","#","||","<","|","&",">","'",")","(","*","\""];
		$filterString = $string;
		foreach ($escapes as $row)
			$filterString = str_replace($row,"",$filterString);
		return $filterString;
	}

    //Payreks Hash Control Function
    function payreksHashControl($type, $data, $key)
	{
		$context = hash_init($type, HASH_HMAC, $key);
		hash_update($context, $data);
		return hash_final($context);
	}

    //Post Control
    if (!$_POST)
	    die("do not have post values");

    //Get Post Values
    $orderID = isset($_POST['order_id']) ? payreksFilter($_POST['order_id']) : null;
    $credit = isset($_POST['credit']) ? payreksFilter($_POST['credit']) : null;
    $userID = isset($_POST['user_id']) ? payreksFilter($_POST['user_id']) : null;
    $userInfo = isset($_POST['user_info']) ? payreksFilter($_POST['user_info']) : null;
    $payLabel = isset($_POST['pay_label']) ? payreksFilter($_POST['pay_label']) : null;
    $totalPrice = isset($_POST['total_price']) ? payreksFilter($_POST['total_price']) : null;
    $netPrice = isset($_POST['net_price']) ? payreksFilter($_POST['net_price']) : null;
    $hash = isset($_POST['hash']) ? $_POST['hash'] : null;

    //Control Post Keys
    if ($orderID === null || $credit === null || $userID === null || $userInfo === null || $payLabel === null ||
                    $totalPrice === null || $netPrice === null || $hash === null)
	    die("missing value");

    //Control Post Values
    if ($orderID === "" || $credit === "" || $userID === "" || $userInfo === "" || $payLabel === "" ||
                    $totalPrice === "" || $netPrice === "" || $hash === "")
	    die("empty value");

    $apiKey = "XXXX-XXXXXX-XXXXXX-XXXX"; //Mağaza api key
    $secretKey = "XXXXXXXXXX"; //Mağaza secret key

    $hashData = md5($orderID . $credit . $userID . $userInfo . $payLabel . $totalPrice . $netPrice . $apiKey);
    $hashCreate = payreksHashControl('sha256', $hashData, $secretKey);

    //Hash Control
    if ($hash !== $hashCreate)
	    die("wrong hash");

    #Bu bölüme user_id ve user_info parametreleriyle gelen değerleri kontrol ettirerek alıcının doğrulunu kontrol ettiriniz.
    #Örnek (Kendi altyapınıza göre düzenleyiniz)
    $controlUser = $db->prepare("SELECT id FROM users WHERE email = ? && id = ?");
    $controlUser->execute(array($userInfo, $userID));

    //User Control
    if ($controlUser->rowCount() <= 0)
	    die("user not found");

    #Bu bölüme sipariş log kaydı ve order_id parametresini kullanarak log kaydı olup olmadığını kontrol ettiriniz.
    #Örnek (Kendi altyapınıza göre düzenleyiniz)
    $controlLog = $db->prepare("SELECT id FROM payreks_log WHERE order_id = ? ");
    $controlLog->execute(array($orderID));

    //Log Control
    if ($controlLog->rowCount() > 0)
	    die("order already have");

    //Insert Log Data
    $insertLogData = $db->prepare("INSERT INTO payreks_log (order_id,user_id,user_info,pay_label,credit,net_price,date_time) VALUES
                    ('$orderID','$userID','$userInfo','$payLabel','$credit','$netPrice','" . date("Y-m-d H:i:s") . "')");
    $insertLogData->execute();

    //If Log Can Not Insert
    if (!$insertLogData)
	    die("log can not insert");

    #Bu bölüme alıcı hesabına kredi yükleme işlemini yaptırınız.
    #Örnek (Kendi altyapınıza göre düzenleyiniz)
    //Update Customer Credit
    $updateCredit = $db->prepare("UPDATE user SET credit = credit + '$credit'  WHERE id = ? and email = ");
    $updateCredit->execute();

    //If Credit Can Not Upload
    if (!$updateCredit)
	    die("credit can not upload");

    //Tüm kontroller sağlandıktan ve alıcıya kredi yüklendikten sonra ekrana OK yazdırmalısınız.
    die("OK");
?>