3D Ödeme
Açıklama: paySmart3D API, Vepara ödeme entegrasyon sistemine sipariş ve kredi kartı ayrıntı bilgilerini göndermek için kullanılır. Üye işyeri web sitesi ödeme formunu gönderdikten sonra kullanıcı banka sayfasına yönlendirilecektir. Ödeme, banka ağ geçidinde bir SMS koduyla doğrulanacaktır. Ödeme başarılı olduktan sonra, kullanıcı üye iş yerinin başarı URL'sine yönlendirilecektir, aksi takdirde üye işyeri tarafından belirlenen iptal URL'ne yönlendirilecektir. Bu ödeme API'sinde diğer ödeme API gibi getpos API 'yi çağırmaya gerek yoktur.
Özel Notlar
paySmart3D API 'na ajax isteğini göndermeyin. "/api/paySmart3D" URL ’ine HTML form gönderimi olmalıdır.
Yanıttan Özel Notlar
Durum 1
payment_status == 1 ve transaction_type == “Auth” // İşlem başarılı ve işlem tutar anında karttan düşülür.
Durum 2
payment_status == 1 ve transaction_type == “PreAuth” // İşlem başarılı olup, işlem tutarı kredi kartından bloke edilir. Bloke tutarın karttan çekilmesi için /api/confirmPayment çağırılmalıdır.
hash_key isteğin Vepara'dan geldiğini doğrulamak için üye işyeri tarafından kullanılır. Ayrıca İşlem Durumu servisi işlemin başarılı veya başarısız olduğunu doğrular.
Durum 3
payment_status == 0 ise işlem başarısız demektir.
hash_key isteğin Vepara'dan geldiğini doğrulamak için üye işyeri tarafından kullanılır. Ayrıca İşlem Durumu servisi işlemin başarılı veya başarısız olduğunu doğrular.
Not
cancel_url, ödeme başarısız olduğunda yönlendirme için kullanılır. ve ödeme başarılı olduğunda yönlendirme için return_url kullanılır.
Başarısız veya başarılı ödemeden bağımsız olarak, aşağıdaki anahtarlar iptal ve başarılı url ile sorgu dizesinde mevcuttur:
vepara_status, order_id ve invoice_id. Örneğin, başarılı URL https://alanadim.com/ ise, başarılı ödemeden sonra vepara, https://alanım.com/?vepara_status=1&order_no=234234232&invoice_id=73434 adresine yönlendirecektir
Sorgu dizesinde, vepara_status = 1 ise, sepeti temizlemek ve sipariş durumunu "Tamamlandı" olarak değiştirmek için " /api/checkstatus " çağrılmalıdır.
URL: /api/paySmart3D
Test Sunucusu: https://test.vepara.com.tr/ccpayment/api/paySmart3D
Canlı Sunucusu: https://app.vepara.com.tr/ccpayment/api/paySmart3D
Method: POST
REQUEST BODY SCHEMA
{
"type": "object",
"properties": {
"cc_holder_name": {
"type": "string",
"description": "Kart üzerindeki isim"
},
"cc_no":{
"type" : "string",
"description" : "Kart Numarası"
},
"expiry_year": {
"type": "int",
"description": "Kart son kullanım yılı, dört haneli olmalı"
},
"expiry_mounth": {
"type":"int",
"description": "Kart son kullanım ayı"
},
"cvv": {
"type": "int",
"description": "Kartın arkasında yer alan en az 3 haneli sayı, AMEX kartlarda 4 hanedir ( vpos_type = insurance ise isteğe bağlı olarak gönderilir)"
},
"currency_code": {
"type": "string",
"description": "Para biriminin ISO kodudur. Örneğin, USD, TRY, EUR vb."
},
"installments_number" : {
"type": "integer",
"description":"Taksit sayısı"
},
"invoice_id": {
"type": "string",
"description": "Ödeme yapılacak sepetin sipariş numarası, benzersiz göndermeye dikkat edin"
},
"invoice_description" : {
"type": "string",
"description" : "Ödeme yapılacak sepete özel bir açıklama giriniz. Örneğin: 4578 nolu sipariş ödemesi"
},
"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."
},
"total": {
"type": "decimal",
"description": "Toplam ürün tutarı"
},
"merchant_key" : {
"type": "string",
"description": "Vepara tarafından sağlanan üye işyerinin benzersiz anahtarıdır."
},
"items": {
"type": "array",
"description": "Sepetteki ürünler, örneğin PHP'de json_encode ile diziyi alın",
"example": [{"name":"Item3","price":885.85,"quantity":1,"description":"item3 description"}]
},
"return_url" : {
"type": "string",
"description": "Ödeme başarılı ise dönüş yapılacak URL"
},
"cancel_url" : {
"type": "string",
"description": "Ödeme başarısız olduğunda yönlendirme için kullanılır ve ödeme başarılı olduğunda yönlendirme için return_url kullanılır."
},
"hash_key": {
"type": "string",
"description": "işlemin bankaya ulaşmadan, kullanıcının ödemeyle ilgili değişiklikler yapamamasını ve ödemenin güvenli olarak tamamlanmasını sağlamaktadır. Aşağıda verilen hash anahtarını yazmak için kullanılan algoritma için tıklayınız veya sağ taraftaki PHP sekmesinden örneğini inceleyiniz."
}
},
"required": ["cc_holder_name"],
"required": ["cc_no"],
"required": ["expiry_year"],
"required": ["expiry_month"],
"required": ["currency_code"],
"required": ["cvv"],
"required": ["installments_number"],
"required": ["invoice_id"],
"required": ["invoice_description"],
"required": ["name"],
"required": ["surname"],
"required": ["total"],
"required": ["merchant_key"],
"required" : ["items"],
"required" : ["return_url"],
"required" : ["cancel_url"],
"required" : ["hash_key"],
}
RESPONSE BODY
200 Başarılı Sonuç
{
<form id="the-form" method="post" action="https://test.vepara.com.tr/ccpayment/sr/redirect-to-bank"><input type="hidden" name="invoice_id" value="169262955487156" /><input type="hidden" name="amount" value="1.00" /><input type="hidden" name="client_id" value="31083" /><input type="hidden" name="return_url" value="https://test.vepara.com.tr/ccpayment/payment/dummy_return_url?brand_order_id=169262955487156" /></form><script type="text/javascript">
window.onload = function(){
document.getElementById("the-form").action ="https://dummy-bank.softrobotics.lt/payment/3d";
document.getElementById("the-form").submit();
}
</script>
}
422 Başarısız Sonuç
{
"message": "The merhchant key field must be a string. (and 1 more error)",
"errors": {
"merchant_key": [
"The merhchant key field must be a string.",
"The merchant key field is required."
]
}
}
Hash-Key Oluşturma
Request Body Scheme
{
"type": "object",
"properties": {
"currency_code": {
"type": "string",
"description": "Para biriminin ISO kodudur. Örneğin, USD, TRY, EUR vb."
},
"merchant_key" : {
"type": "string",
"description": "Vepara tarafından sağlanan üye işyerinin benzersiz anahtarıdır."
},
"invoice_id": {
"type": "string",
"description": "Ödeme yapılacak sepetin sipariş numarası, benzersiz göndermeye dikkat edin"
},
"app_secret": {
"type": "string",
"description": "app_secret üye işyerine verilen benzersiz ve gizli bir anahtardır."
},
"total": {
"type": "string",
"description": "Toplam ürün tutarı"
},
"installments_number" : {
"type": "string",
"description":"Taksit sayısı"
},
},
"required": ["merchant_key"],
"required": ["currency_code"],
"required": ["invoice_id"],
"required": ["app_secret"],
"required": ["total"],
"required": ["installments_number"],
}
RESPONSE BODY
200 Başarılı Sonuç
{
"Hash Key": "fd11c23d8e654717:88c8:hgHyeat3CAXK+1k6MC09m9rlfQ31Z6Bnd1ElcGxVAq9oYAmCWfTl+73TnuQ0SBjleoOujI2NUv8SRb8jprForFMSUvpPPvn+dnPXMqNi2hA="
}
Hash Key Oluşturma Kod Örnekleri
PHP Örneği
public static function hashGenerator($currency_code,$merchant_key,$invoice_id,$app_secret,$total,$installments_number)
{
$data = $total . '|' . $installmentsNumber . '|' . $currency_code . '|' . $merchant_key . '|' . $invoice_id;
$iv = substr(sha1(mt_rand()), 0, 16);
$password = sha1($app_secret);
$salt = substr(sha1(mt_rand()), 0, 4);
$saltWithPassword = hash('sha256', $password . $salt);
$encrypted = openssl_encrypt(
$data, 'aes-256-cbc', $saltWithPassword, 0, $iv
);
$msg_encrypted_bundle = $iv . ':' . $salt . ':' . $encrypted;
$msg_encrypted_bundle = str_replace('/', '__', $msg_encrypted_bundle);
return response()->json(['Hash Key' =>$msg_encrypted_bundle ]);
}
Ruby Örneği
require "digest"
def generateHashKey(secretKey, iv, salt, status, total, invoiceId, orderId, currencyCode)
if secretKey.nil? || iv.nil? || salt.nil?
return nil
end
# Combine secretKey and salt, and then hash the result using SHA256
saltSum = Digest::SHA1.hexdigest(secretKey) + salt
saltHash = Digest::SHA256.hexdigest(saltSum)
# Construct the decryptedMsg string
decryptedMsg = "#{status}|#{total}|#{invoiceId}|#{orderId}|#{currencyCode}"
# Combine iv, saltHash, and decryptedMsg using a colon separator
hashKey = "#{iv}:#{saltHash}:#{decryptedMsg}"
# Replace forward slashes with underscores in the hashKey
hashKey = hashKey.gsub("/", "_")
return hashKey
end
Python Örneği
from Crypto.Hash import SHA1
from Crypto.Hash import SHA256
def generateHashKey(secretKey, iv, salt, status, total, invoiceId, orderId, currencyCode):
if secretKey is None or iv is None or salt is None:
return None
# Create a SHA1 hash of the secretKey
hashStr = SHA1.new()
hashStr.update(secretKey.encode("UTF-8"))
password = hashStr.hexdigest()
# Combine password and salt, then create a SHA256 hash
strSum = password + salt
hashSalt = SHA256.new()
hashSalt.update(strSum.encode("UTF-8"))
salt = hashSalt.hexdigest()
# Construct the decryptedMsg string
decryptedMsg = f"{status}|{total}|{invoiceId}|{orderId}|{currencyCode}"
# Combine iv, salt, and decryptedMsg using a colon separator
hashKey = f"{iv}:{salt}:{decryptedMsg}"
# Replace forward slashes with underscores in the hashKey
hashKey = hashKey.replace("/", "_")
return hashKey
secretKey = "your_secret_key"
iv = "your_iv"
salt = "your_salt"
status = "your_status"
total = "your_total"
invoiceId = "your_invoice_id"
orderId = "your_order_id"
currencyCode = "your_currency_code"
generatedHashKey = generateHashKey(secretKey, iv, salt, status, total, invoiceId, orderId, currencyCode)
print("Generated Hash Key:", generatedHashKey)
Nodejs Örneği
function generateHashKey(secretKey, iv, salt, status, total, invoiceId, orderId, currencyCode) {
var hashKey = iv + ':' + salt + ':' + status + '|' + total + '|' + invoiceId + '|' + orderId + '|' + currencyCode;
hashKey = hashKey.replace(/\//g, '_');
var password = CryptoJS.SHA1(secretKey).toString();
var strSalt = password + salt;
var saltHash = CryptoJS.SHA256(strSalt).toString();
return hashKey.replace(/\//g, '_');
}
var secretKey = "your_secret_key";
var iv = "your_iv";
var salt = "your_salt";
var status = "your_status";
var total = "your_total";
var invoiceId = "your_invoice_id";
var orderId = "your_order_id";
var currencyCode = "your_currency_code";
var generatedHashKey = generateHashKey(secretKey, iv, salt, status, total, invoiceId, orderId, currencyCode);
console.log("Generated Hash Key: " + generatedHashKey);
C# Örneği
using System;
using System.Security.Cryptography;
using System.Text;
using System.Linq;
public class HashGenerator
{
public string GenerateHashKey(string total, string installment, string currency_code, string merchant_key, string invoice_id, string app_secret)
{
string data = total + "|" + installment + "|" + currency_code + "|" + merchant_key + "|" + invoice_id;
Random mt_rand = new Random();
string iv = Sha1Hash(mt_rand.Next().ToString()).Substring(0, 16);
string password = Sha1Hash(app_secret);
string salt = Sha1Hash(mt_rand.Next().ToString()).Substring(0, 4);
string saltWithPassword = "";
using (SHA256 sha256Hash = SHA256.Create())
{
saltWithPassword = GetHash(sha256Hash, password + salt);
}
string encrypted = Encryptor(data, saltWithPassword.Substring(0, 32), iv);
string msg_encrypted_bundle = iv + ":" + salt + ":" + encrypted;
msg_encrypted_bundle = msg_encrypted_bundle.Replace("/", "__");
return msg_encrypted_bundle;
}
private string GetHash(HashAlgorithm hashAlgorithm, string input)
{
byte[] data = hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(input));
var sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}
private string Sha1Hash(string password)
{
return string.Join("", SHA1CryptoServiceProvider.Create().ComputeHash(Encoding.UTF8.GetBytes(password)).Select(x => x.ToString("x2")));
}
private string Encryptor(string TextToEncrypt, string strKey, string strIV)
{
byte[] PlainTextBytes = System.Text.Encoding.UTF8.GetBytes(TextToEncrypt);
AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider();
aesProvider.BlockSize = 128;
aesProvider.KeySize = 256;
aesProvider.Key = System.Text.Encoding.UTF8.GetBytes(strKey);
aesProvider.IV = System.Text.Encoding.UTF8.GetBytes(strIV);
aesProvider.Padding = PaddingMode.PKCS7;
aesProvider.Mode = CipherMode.CBC;
ICryptoTransform cryptoTransform = aesProvider.CreateEncryptor(aesProvider.Key, aesProvider.IV);
byte[] EncryptedBytes = cryptoTransform.TransformFinalBlock(PlainTextBytes, 0, PlainTextBytes.Length);
return Convert.ToBase64String(EncryptedBytes);
}
public static void Main(string[] args)
{
HashGenerator hashGenerator = new HashGenerator(); // HashGenerator sınıfından bir nesne oluşturun
string hashKey = hashGenerator.GenerateHashKey("10", "1", "TRY", "$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he", "Vepara-INVOICE-2", "217071ea9f3f2e9b695d8f0039024e64");
Console.WriteLine("Hash Key:"+ hashKey);
}
}
Pay Smart 3D Kod Örnekleri
PHP Örneği
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://test.vepara.com.tr/ccpayment/api/paySmart3D',
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('cc_holder_name' => 'asddasddddd','cc_no' => '4132260000000003','expiry_month' => '12','expiry_year' => '2024','currency_code' => 'TRY','installments_number' => '1','invoice_id' => '03b9659f-03f4-48af-ad9d-b42e8c11407d','invoice_description' => 'ewrwer','total' => '125','merchant_key' => '$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he','items' => '[{"name":"Item3","price":125.00,"quantity":1,"description":"item3 description"}]','name' => 'Yasin','surname' => 'Kılıç','hash_key' => '17a800423ccdeab5:6541:dl5CJlHN9ElmApnqUw9t1KEjTVoJgO8DJUm9qDqf557tkO2B0cqMMgEI9ke9eHCjHhoEIbJD+2e8T2YefjwfJ82zUhNP9ofXYDFSMXYz95J1tyhxNYuT0EUjzhr6oWlrT__t3TAb05O6exZ+rSk4tPQ==','return_url' => 'https://www.github.com.tr/
','cancel_url' => 'https://www.google.com.tr/'),
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJqdGkiOiIzY2JmMGU1NWYzY2ZjMjYzNDc3ZWJmMmQ0ODEzNWQ1NmEyZWE3YjI3Zjk1MGRiYmFkZTlmZjgyNzAxMmIwNWU3OWFhNjdlY2Q0ODM1YTQwY2VlMmUyODkwYWM4MmNjZDk4NjRkMjUzYTI0Njc3YTcyM2Y3ZTMyMjI2N2QzY2VkYyIsImF1ZCI6MTAwMDcsInN1YiI6NiwiY2lkIjo5ODk1MCwibmJmIjoxNzA1MzE5ODgzLCJleHAiOjE3MDUzMzQyODMsImlhdCI6MTcwNTMyNzA4Mywic2NvcGVzIjpbXX0.fa5qR9F24cOaS824soLvMTRgwoAt_uk0ZoZIvs3uHl3BeoT-3GK3wbrBktESZKb-oh9HyvmuHjq_X47uK2TAbw'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Ruby Örneği
require "uri"
require "net/http"
url = URI("https://test.vepara.com.tr/ccpayment/api/paySmart3D")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxNSIsImp0aSI6ImEyZTlkMzllYTcxMTRhMTE4ODY3NmQxNmNmMWZjYzNmYzcyYmJmYTBkYTRiNWZlMDRmZjFlNmY1ZmY4M2E4N2JiOTcyNzBlMWIyOTNhYjQ3IiwiaWF0IjoxNjkzMzExMjI5LjQ1ODcsIm5iZiI6MTY5MzMxMTIyOS40NTg3LCJleHAiOjE2OTMzMTg0MjkuNDUzMiwic3ViIjoiMzgyIiwic2NvcGVzIjpbXX0.GyabFvLN5JldPXpnX-q3bBUEcPWlVMxsoaGnB3-2Erxuk-aaezCCtbS6ccJpEgUF3TnWdLv3jCpRiFy0NvXpKVAfH5MCKGRoe1D6FDoa-aPHswqEd-avo5VfbT346S2nsHytYYWcFWGVuhrJ3ZprLP0GYdDCqMTJd4jV33_pyMET_J0VFuEdKNJ051F7JyhzSMysE5dsC-sdIRMENYtZzVnO41lr0FJmdLJjwiZSIBmf_0C3CRRwRD8qLkGnUITO13CJvLbx_Wgz4mrXe-CrlvuOtqybBqK24iiNDY2WIMjnRyYsi9QbMeenU46x4UlH9SSDVb0ypQRX5fI7oYx7v6yJE0kYmSX8SmOgFuTup-86Hmd52KfvRfn8lpV35Ul2tqWmhP5INhyP9klyuITmFyj4FjNkRBBFLJR-1jyCVdyL3XdwMNzxVcZA-QcHwOiaU1hBsuHlbWOY7E7SWt8nrn4Zz1OJVHuuiL5Fcrntik-r17pNIvmN7QZJl9hXcsM7hLNVZN79NnOiKhDx7Vn_q211YxVu-MEFG31o8-HEQ3XmGCqk2xydyuRKWE1jbl9CFsD1VYZ80Z1Xpb0AH2Wb3WbemQaWA0qlGTQo21vnVSTQK4KLwgzifdVl2aUQK0KqzCMph4TFaqv88Xvs46So0s1fazkLhysX1R6GYLfaQpU"
form_data = [['cc_holder_name', 'asddasddddd'],['cc_no', '4132260000000003'],['expiry_month', '12'],['expiry_year', '2024'],['currency_code', 'TRY'],['installments_number', '1'],['invoice_id', '03b9659f-03f4-48af-ad9d-b42e8c11407d'],['invoice_description', 'ewrwer'],['total', '125'],['merchant_key', '$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he'],['items', '[{"name":"Item3","price":125.00,"quantity":1,"description":"item3 description"}]'],['name', 'Yasin'],['surname', 'Kılıç'],['hash_key', '17a800423ccdeab5:6541:dl5CJlHN9ElmApnqUw9t1KEjTVoJgO8DJUm9qDqf557tkO2B0cqMMgEI9ke9eHCjHhoEIbJD+2e8T2YefjwfJ82zUhNP9ofXYDFSMXYz95J1tyhxNYuT0EUjzhr6oWlrT__t3TAb05O6exZ+rSk4tPQ=='],['return_url', 'http://merchant-domain.com?success.php
'],['cancel_url', 'http://merchant-domain.com?fail.php']]
request.set_form form_data, 'multipart/form-data'
response = https.request(request)
puts response.read_body
Python Örneği
import http.client
import mimetypes
from codecs import encode
conn = http.client.HTTPSConnection("test.vepara.com.tr")
dataList = []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=cc_holder_name;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("asddasddddd"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=cc_no;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("4132260000000003"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=expiry_month;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("12"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=expiry_year;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("2024"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=currency_code;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("TRY"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=installments_number;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("1"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=invoice_id;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("03b9659f-03f4-48af-ad9d-b42e8c11407d"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=invoice_description;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("ewrwer"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=total;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("125"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=merchant_key;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=items;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("[{\"name\":\"Item3\",\"price\":125.00,\"quantity\":1,\"description\":\"item3 description\"}]"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=name;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("Yasin"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=surname;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("Kılıç"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=hash_key;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("17a800423ccdeab5:6541:dl5CJlHN9ElmApnqUw9t1KEjTVoJgO8DJUm9qDqf557tkO2B0cqMMgEI9ke9eHCjHhoEIbJD+2e8T2YefjwfJ82zUhNP9ofXYDFSMXYz95J1tyhxNYuT0EUjzhr6oWlrT__t3TAb05O6exZ+rSk4tPQ=="))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=return_url;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("http://merchant-domain.com?success.php"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=cancel_url;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("http://merchant-domain.com?fail.php"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload = body
headers = {
'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxNSIsImp0aSI6ImEyZTlkMzllYTcxMTRhMTE4ODY3NmQxNmNmMWZjYzNmYzcyYmJmYTBkYTRiNWZlMDRmZjFlNmY1ZmY4M2E4N2JiOTcyNzBlMWIyOTNhYjQ3IiwiaWF0IjoxNjkzMzExMjI5LjQ1ODcsIm5iZiI6MTY5MzMxMTIyOS40NTg3LCJleHAiOjE2OTMzMTg0MjkuNDUzMiwic3ViIjoiMzgyIiwic2NvcGVzIjpbXX0.GyabFvLN5JldPXpnX-q3bBUEcPWlVMxsoaGnB3-2Erxuk-aaezCCtbS6ccJpEgUF3TnWdLv3jCpRiFy0NvXpKVAfH5MCKGRoe1D6FDoa-aPHswqEd-avo5VfbT346S2nsHytYYWcFWGVuhrJ3ZprLP0GYdDCqMTJd4jV33_pyMET_J0VFuEdKNJ051F7JyhzSMysE5dsC-sdIRMENYtZzVnO41lr0FJmdLJjwiZSIBmf_0C3CRRwRD8qLkGnUITO13CJvLbx_Wgz4mrXe-CrlvuOtqybBqK24iiNDY2WIMjnRyYsi9QbMeenU46x4UlH9SSDVb0ypQRX5fI7oYx7v6yJE0kYmSX8SmOgFuTup-86Hmd52KfvRfn8lpV35Ul2tqWmhP5INhyP9klyuITmFyj4FjNkRBBFLJR-1jyCVdyL3XdwMNzxVcZA-QcHwOiaU1hBsuHlbWOY7E7SWt8nrn4Zz1OJVHuuiL5Fcrntik-r17pNIvmN7QZJl9hXcsM7hLNVZN79NnOiKhDx7Vn_q211YxVu-MEFG31o8-HEQ3XmGCqk2xydyuRKWE1jbl9CFsD1VYZ80Z1Xpb0AH2Wb3WbemQaWA0qlGTQo21vnVSTQK4KLwgzifdVl2aUQK0KqzCMph4TFaqv88Xvs46So0s1fazkLhysX1R6GYLfaQpU',
'Content-type': 'multipart/form-data; boundary={}'.format(boundary)
}
conn.request("POST", "/ccpayment/api/paySmart3D", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Nodejs Örneği
const axios = require('axios');
const FormData = require('form-data');
let data = new FormData();
data.append('cc_holder_name', 'asddasddddd');
data.append('cc_no', '4132260000000003');
data.append('expiry_month', '12');
data.append('expiry_year', '2024');
data.append('currency_code', 'TRY');
data.append('installments_number', '1');
data.append('invoice_id', '03b9659f-03f4-48af-ad9d-b42e8c11407d');
data.append('invoice_description', 'ewrwer');
data.append('total', '125');
data.append('merchant_key', '$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he');
data.append('items', '[{"name":"Item3","price":125.00,"quantity":1,"description":"item3 description"}]');
data.append('name', 'Yasin');
data.append('surname', 'Kılıç');
data.append('hash_key', '17a800423ccdeab5:6541:dl5CJlHN9ElmApnqUw9t1KEjTVoJgO8DJUm9qDqf557tkO2B0cqMMgEI9ke9eHCjHhoEIbJD+2e8T2YefjwfJ82zUhNP9ofXYDFSMXYz95J1tyhxNYuT0EUjzhr6oWlrT__t3TAb05O6exZ+rSk4tPQ==');
data.append('return_url', 'http://merchant-domain.com?success.php\n');
data.append('cancel_url', 'http://merchant-domain.com?fail.php');
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://test.vepara.com.tr/ccpayment/api/paySmart3D',
headers: {
'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxNSIsImp0aSI6ImEyZTlkMzllYTcxMTRhMTE4ODY3NmQxNmNmMWZjYzNmYzcyYmJmYTBkYTRiNWZlMDRmZjFlNmY1ZmY4M2E4N2JiOTcyNzBlMWIyOTNhYjQ3IiwiaWF0IjoxNjkzMzExMjI5LjQ1ODcsIm5iZiI6MTY5MzMxMTIyOS40NTg3LCJleHAiOjE2OTMzMTg0MjkuNDUzMiwic3ViIjoiMzgyIiwic2NvcGVzIjpbXX0.GyabFvLN5JldPXpnX-q3bBUEcPWlVMxsoaGnB3-2Erxuk-aaezCCtbS6ccJpEgUF3TnWdLv3jCpRiFy0NvXpKVAfH5MCKGRoe1D6FDoa-aPHswqEd-avo5VfbT346S2nsHytYYWcFWGVuhrJ3ZprLP0GYdDCqMTJd4jV33_pyMET_J0VFuEdKNJ051F7JyhzSMysE5dsC-sdIRMENYtZzVnO41lr0FJmdLJjwiZSIBmf_0C3CRRwRD8qLkGnUITO13CJvLbx_Wgz4mrXe-CrlvuOtqybBqK24iiNDY2WIMjnRyYsi9QbMeenU46x4UlH9SSDVb0ypQRX5fI7oYx7v6yJE0kYmSX8SmOgFuTup-86Hmd52KfvRfn8lpV35Ul2tqWmhP5INhyP9klyuITmFyj4FjNkRBBFLJR-1jyCVdyL3XdwMNzxVcZA-QcHwOiaU1hBsuHlbWOY7E7SWt8nrn4Zz1OJVHuuiL5Fcrntik-r17pNIvmN7QZJl9hXcsM7hLNVZN79NnOiKhDx7Vn_q211YxVu-MEFG31o8-HEQ3XmGCqk2xydyuRKWE1jbl9CFsD1VYZ80Z1Xpb0AH2Wb3WbemQaWA0qlGTQo21vnVSTQK4KLwgzifdVl2aUQK0KqzCMph4TFaqv88Xvs46So0s1fazkLhysX1R6GYLfaQpU',
...data.getHeaders()
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
C# Örneği
var options = new RestClientOptions("https://test.vepara.com.tr")
{
MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("/ccpayment/api/paySmart3D", Method.Post);
request.AddHeader("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxNSIsImp0aSI6ImEyZTlkMzllYTcxMTRhMTE4ODY3NmQxNmNmMWZjYzNmYzcyYmJmYTBkYTRiNWZlMDRmZjFlNmY1ZmY4M2E4N2JiOTcyNzBlMWIyOTNhYjQ3IiwiaWF0IjoxNjkzMzExMjI5LjQ1ODcsIm5iZiI6MTY5MzMxMTIyOS40NTg3LCJleHAiOjE2OTMzMTg0MjkuNDUzMiwic3ViIjoiMzgyIiwic2NvcGVzIjpbXX0.GyabFvLN5JldPXpnX-q3bBUEcPWlVMxsoaGnB3-2Erxuk-aaezCCtbS6ccJpEgUF3TnWdLv3jCpRiFy0NvXpKVAfH5MCKGRoe1D6FDoa-aPHswqEd-avo5VfbT346S2nsHytYYWcFWGVuhrJ3ZprLP0GYdDCqMTJd4jV33_pyMET_J0VFuEdKNJ051F7JyhzSMysE5dsC-sdIRMENYtZzVnO41lr0FJmdLJjwiZSIBmf_0C3CRRwRD8qLkGnUITO13CJvLbx_Wgz4mrXe-CrlvuOtqybBqK24iiNDY2WIMjnRyYsi9QbMeenU46x4UlH9SSDVb0ypQRX5fI7oYx7v6yJE0kYmSX8SmOgFuTup-86Hmd52KfvRfn8lpV35Ul2tqWmhP5INhyP9klyuITmFyj4FjNkRBBFLJR-1jyCVdyL3XdwMNzxVcZA-QcHwOiaU1hBsuHlbWOY7E7SWt8nrn4Zz1OJVHuuiL5Fcrntik-r17pNIvmN7QZJl9hXcsM7hLNVZN79NnOiKhDx7Vn_q211YxVu-MEFG31o8-HEQ3XmGCqk2xydyuRKWE1jbl9CFsD1VYZ80Z1Xpb0AH2Wb3WbemQaWA0qlGTQo21vnVSTQK4KLwgzifdVl2aUQK0KqzCMph4TFaqv88Xvs46So0s1fazkLhysX1R6GYLfaQpU");
request.AlwaysMultipartFormData = true;
request.AddParameter("cc_holder_name", "asddasddddd");
request.AddParameter("cc_no", "4132260000000003");
request.AddParameter("expiry_month", "12");
request.AddParameter("expiry_year", "2024");
request.AddParameter("currency_code", "TRY");
request.AddParameter("installments_number", "1");
request.AddParameter("invoice_id", "03b9659f-03f4-48af-ad9d-b42e8c11407d");
request.AddParameter("invoice_description", "ewrwer");
request.AddParameter("total", "125");
request.AddParameter("merchant_key", "$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he");
request.AddParameter("items", "[{\"name\":\"Item3\",\"price\":125.00,\"quantity\":1,\"description\":\"item3 description\"}]");
request.AddParameter("name", "Yasin");
request.AddParameter("surname", "Kılıç");
request.AddParameter("hash_key", "17a800423ccdeab5:6541:dl5CJlHN9ElmApnqUw9t1KEjTVoJgO8DJUm9qDqf557tkO2B0cqMMgEI9ke9eHCjHhoEIbJD+2e8T2YefjwfJ82zUhNP9ofXYDFSMXYz95J1tyhxNYuT0EUjzhr6oWlrT__t3TAb05O6exZ+rSk4tPQ==");
request.AddParameter("return_url", "http://merchant-domain.com?success.php");
request.AddParameter("cancel_url", "http://merchant-domain.com?fail.php");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);