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
$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ı
$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
{
"type": "object",
"properties": {
"merchant_key" : {
"type": "string",
"description": "Vepara tarafından sağlanan üye işyerinin benzersiz anahtarıdır."
},
"invoice": {
"type": "string",
"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ç
{
"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ç
{
"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
$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
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
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
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
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());