Skip to content

Vepara ile NonSecure / 3D Ödeme

Açıklama: Vepara admini, üye işyeri web sitesinden yapılan ödemenin Non-Secure mi yoksa 3D mi yapılması gerektiğine karar verecektir. Aşağıdaki istek, üye işyeri web sitesinden Vepara ödeme entegrasyon sistemine gönderilmelidir. CURL post isteği, aşağıdaki parametrelerle Vepara'da alınmalıdır:

Gelen cevabın başarılı olması durumunda Link değerine yönlendirme yapılır ve kullanıcının döndüğü return_url'de işlemi kontrol etmek için bakınız İşlem Durumu

Yanıt Yönlendirme

Ödeme işleminden sonra son kullanıcı, aşağıda verilen parametreler kullanılarak üye işyeri web sitesine yönlendirilir.Yanıt doğrulaması için bir hash_key parametresi gönderilir. Üye işyeri istek parametresini hash_key değeriyle karşılaştırabilir.

Parametreler

json

$params = [ 

    'payment_status' => $status,
    'order_no' => $order_id,
    'invoice_id' => invoice_id,
    'status_code' => $error_code,
    'status_description' => $status_message,
    'payment_method' => $payment_type,
    'transaction_type' => $transaction_type,
    'error_code' => $error_code,
    'error' => $status_message,
    'hash_key' => $hash_key,
                
];

Yanıt Parametre Açıklamaları

json

$params = [ 

    'payment_status' => payment_staus 1 veya 0 olabilir. 1=başarılı, 0=başarısız,
    'order_no' => Vepara sipariş numarası,
    'invoice_id' => Üye işyeri fatura id'si,
    'status_code' => Vepara Status code, 100 başarılı işlem kodudur,
    'status_description' => İşlem açıklaması,
    'payment_method' => 1= kredi kartı, 2= mobil, 3= Wallet/cüzdan,
    'transaction_type' => transaction_type == “Auth” //işlem tutarı anında karttan düşülür,
    'transaction_type' => transaction_type == “Pre-Authorization” //işlem tutarı daha sonra karttan düşülecektir.
    'error_code' => status_code değerinin parametresi,
    'error' => status_description parametresinin değeri,
    'hash_key' => Vepara'dan gelen talebi dogrulamak icin,
                
];

Yanıt Doğrulama

Durum 1 payment_status == 1 ve transaction_type == “Auth” // İşlem başarılıdır ve işlem tutarı anında karttan düşülür.

Durum 2 payment_status == 1 ve transaction_type == “Pre-Authorization” // İşlem başarılı olup, işlem tutarı daha sonra karttan düşülecektir.

Durum 3 payment_status == 0 // İşlem başarısız.

Hash_key, isteğin Vepara'dan geldiğini doğrulamak için üye işyeri tarafında doğrulanmalıdır. Ayrıca İşlem Durumu servisi işlemin başarılı veya Başarısız olduğunu onaylar.

URL: /api/purchase/link

Test Sunucusu: https://test.vepara.com.tr/ccpayment/purchase/link

Canlı Sunucusu: https://app.vepara.com.tr/ccpayment/purchase/link

Method: POST

REQUEST BODY SCHEMA

json
{
  "type": "object",
  "properties": {
    "merchant_key" : {
        "type": "string",
        "description": "Vepara tarafından sağlanan üye işyerinin benzersiz anahtarıdır."
    },
    "invoice": {
      "type": "array",
      "description": "invoice öğe adı, miktar ve birim fiyat vb. listesiyle birleştirilmiş bir json formatlı dizedir. PHP Örneği yan tarafta sunulmuştur."
    },
     "currency_code": {
      "type": "string",
      "description": "Para biriminin ISO kodudur. Örneğin, USD, TRY, EUR vb."
    },
    "name" : {
      "type" : "string",
      "description": "Kişinin adı. Örneğin, ürünü satın alan kişinin adı ''john Dao'' ise ad ''john'' olmalıdır"
    },
    "surname" : {
      "type":"string",
      "description": "Kişinin soyadı. Örneğin ürünü satın alan kişinin adı “john Dao” ise soyadı “Dao” olmalıdır."  
    },
    
  },
  "required": ["merchant_key"],
  "required": ["invoice"],
  "required": ["currency_code"],
  "required": ["name"],
  "required": ["surname"],
}
200 Başarılı Sonuç
json
{
  "status": true,
  "status_code": 100,
  "success_message": "Success !",
  "link": "https://app.vepara.com.tr/ccpayment/makepayment/your_order_id",
  "order_id": "your_order_id"
}
400 Başarısız Sonuç
json
{
  "status": false,
  "status_code": 13,
  "success_message": "The total of your items price(20.00) is not equal to the invoice total(10.00)",
  "link": null,
  "order_id": 0
}

Kod Örnekleri

PHP Örneği
php
  <?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://test.vepara.com.tr/ccpayment/purchase/link',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
    "merchant_key": "$2y$10$pYBYN9zej0QOz0OXBJetBukuMiUT3qZ.NXQCX6yL8njwJzxLHscE.",
    "currency_code": "TRY",
    "name": "İsim",
    "surname": "Soyisim",
    "invoice": "{\\"invoice_id\\":\\"test-invoice-8\\",\\"invoice_description\\":\\"Testdescription\\",\\"total\\":100,\\"items\\":[{\\"name\\":\\"Item1\\",\\"price\\":100,\\"quantity\\":1,\\"description\\":\\"TEst\\"}]}"
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Ruby Örneği
ruby
require "uri"
require "json"
require "net/http"

url = URI("https://test.vepara.com.tr/ccpayment/purchase/link")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request.body = JSON.dump({
  "merchant_key": "$2y$10$pYBYN9zej0QOz0OXBJetBukuMiUT3qZ.NXQCX6yL8njwJzxLHscE.",
  "currency_code": "TRY",
  "name": "İsim",
  "surname": "Soyisim",
  "invoice": "{\"invoice_id\":\"test-invoice-8\",\"invoice_description\":\"Testdescription\",\"total\":100,\"items\":[{\"name\":\"Item1\",\"price\":100,\"quantity\":1,\"description\":\"TEst\"}]}"
})

response = https.request(request)
puts response.read_body
Python Örneği
python
import http.client
import json

conn = http.client.HTTPSConnection("test.vepara.com.tr/")
payload = json.dumps({
  "merchant_key": "$2y$10$pYBYN9zej0QOz0OXBJetBukuMiUT3qZ.NXQCX6yL8njwJzxLHscE.",
  "currency_code": "TRY",
  "name": "İsim",
  "surname": "Soyisim",
  "invoice": "{\"invoice_id\":\"test-invoice-8\",\"invoice_description\":\"Testdescription\",\"total\":100,\"items\":[{\"name\":\"Item1\",\"price\":100,\"quantity\":1,\"description\":\"TEst\"}]}"
})
headers = {
  'Content-Type': 'application/json'
}
conn.request("POST", "/ccpayment/purchase/link", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Nodejs Örneği
javascript
const axios = require('axios');
let data = JSON.stringify({
  "merchant_key": "$2y$10$pYBYN9zej0QOz0OXBJetBukuMiUT3qZ.NXQCX6yL8njwJzxLHscE.",
  "currency_code": "TRY",
  "name": "İsim",
  "surname": "Soyisim",
  "invoice": "{\"invoice_id\":\"test-invoice-8\",\"invoice_description\":\"Testdescription\",\"total\":100,\"items\":[{\"name\":\"Item1\",\"price\":100,\"quantity\":1,\"description\":\"TEst\"}]}"
});

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'https://test.vepara.com.tr/ccpayment/purchase/link',
  headers: { 
    'Content-Type': 'application/json'
  },
  data : data
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});
C# Örneği
c#
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://test.vepara.com.tr/ccpayment/purchase/link");
var content = new StringContent("{\n    \"merchant_key\": \"$2y$10$pYBYN9zej0QOz0OXBJetBukuMiUT3qZ.NXQCX6yL8njwJzxLHscE.\",\n    \"currency_code\": \"TRY\",\n    \"name\": \"İsim\",\n    \"surname\": \"Soyisim\",\n    \"invoice\": \"{\\\"invoice_id\\\":\\\"test-invoice-8\\\",\\\"invoice_description\\\":\\\"Testdescription\\\",\\\"total\\\":100,\\\"items\\\":[{\\\"name\\\":\\\"Item1\\\",\\\"price\\\":100,\\\"quantity\\\":1,\\\"description\\\":\\\"TEst\\\"}]}\"\n}", null, "application/json");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());