İşlem İade / İptal
Bir ödemenin iade işlemi, belli durumlar için iptal, belli durumlar için iade şeklinde gerçekleştirilir.
İptal: Eğer iade edilecek ödeme için henüz gün sonu olmamışsa ve bu ödemenin daha önce yapılmış bir kısmi iadesi yoksa bu işlem "İptal" olarak adlandırılır.
İade: Eğer iade edilecek ödemenin daha önce bir kısmi iadesi yapılmış ise, ya da ödemenin geçtiği günden farklı bir günde iade isteği gelirse, bu işlem "İade" olarak adlandırılır.
Http metotu, Enpoint, Headers(Başlıklar) ve Request(İstek) bilgileri aşağıda verilmiştir.
Metod |
API Endpoint |
Content-Type |
POST |
/api/refund |
application/json |
Parametre |
Gereklilik |
Content-Type |
Authorization |
Zorunlu |
Bearer |
Accept |
Zorunlu |
application/json |
Parametre |
Veri Tipi |
Gereklilik |
Açıklama |
invoice_id |
string |
Zorunlu |
Tamamlanan ödemeyi gösteren benzersiz fatura numarası. |
amount |
double / boş string |
Zorunlu |
İade edilecek miktar. Eğer miktar boş bir string ("") olarak iletilirse, toplam işlem miktarı iade edilir. Burada kalan miktar = toplam işlem miktarı - kısmi iadelerin toplam miktarı |
app_id |
string |
Zorunlu |
PayBull'dan elde edilen benzersiz Uygulama Anahtarı |
app_secret |
string |
Zorunlu |
PayBull'dan elde edilen benzersiz Uygulama Parolası |
merchant_key |
string |
Zorunlu |
PayBull'dan elde edilen benzersiz Üye işyeri Anahtarı |
hash_key |
string |
Zorunlu |
Hash Anahtarı Oluşturma |
refund_webhook_key |
string |
İsteğe Bağlı |
İade başarısı veya başarısızlık durumu hakkında bildirim almak için kullanılır. Paybull Üye işyeri Paneli'nde İade webhook URL'si atamak gereklidir. |
HASH ANAHTARI OLUŞTURMA
function generateRefundHashKey($amount, $invoice_id, $merchant_key, $app_secret) {
$data = $amount.'|'.$invoice_id.'|'.$merchant_key;
$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", null, $iv
);
$msg_encrypted_bundle = "$iv:$salt:$encrypted";
$hash_key = str_replace('/', '__', $msg_encrypted_bundle);
return $hash_key;
}
public static string GenerateHashKey(string invoice_id, string merchant_key, string app_secret){
var data = invoice_id+'|'+merchant_key;
var sha1 = new SHA1Managed();
Random rnd = new Random();
var iv = sha1.ComputeHash(Encoding.UTF8.GetBytes(rnd.ToString()));
var password = sha1.ComputeHash(Encoding.UTF8.GetBytes(app_secret)).ToString();
rnd = new Random();
var shaSalt = sha1.ComputeHash(Encoding.UTF8.GetBytes(rnd.ToString())).ToString();
var salt = shaSalt.Substring(0, 4);
var sha256 = new SHA256Managed();
var saltWithPassword = sha256.ComputeHash(Encoding.UTF8.GetBytes(password+salt));
var encrypted = EncryptString(data,saltWithPassword,iv);
var msg_encrypted_bundle = iv + ":" + salt + ":" + encrypted;
msg_encrypted_bundle = msg_encrypted_bundle.Replace("/","__");
return msg_encrypted_bundle;
}
public static string EncryptString(string plainText, byte[] key, byte[] iv){
Aes encryptor = Aes.Create();
encryptor.Mode = CipherMode.CBC;
encryptor.Key = key;
encryptor.IV = iv;
MemoryStream memoryStream = new MemoryStream();
ICryptoTransform aesEncryptor = encryptor.CreateEncryptor();
CryptoStream cryptoStream = new CryptoStream(memoryStream, aesEncryptor, CryptoStreamMode.Write);
byte[] plainBytes = Encoding.ASCII.GetBytes(plainText);
cryptoStream.Write(plainBytes, 0, plainBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] cipherBytes = memoryStream.ToArray();
memoryStream.Close();
cryptoStream.Close();
string cipherText = Convert.ToBase64String(cipherBytes, 0, cipherBytes.Length);
return cipherText;
}
function generateRefundHashKey(invoice_id , merchant_key , app_secret) {
data = invoice_id + "|" + merchant_key;
var randNumIv = Math.floor(Math.random() * (99999999999999999 - 10000000000000000) + 10000000000000000);
var hashNumIv = sha1(randNumIv);
hashNumIv = hashNumIv.create();
var iv = hashNumIv.slice(0,16);
var hashPass = sha1(app_secret);
hashPass = hashPass.create();
var password = hashPass.hex();
var randNumSalt = Math.floor(Math.random() * (99999999999999999 - 10000000000000000) + 10000000000000000);
var hashNumSalt = sha1(randNumIv);
hashNumSalt = hashNumSalt.create();
var salt = hashNumSalt.hex();
var strPassSalt = password + salt;
var hashStr = sha1(strPassSalt);
hashStr.create();
var saltWithPassword = strPassSalt.hex();
var encrypted = "";
var msg_encrypted_bundle = iv + ":" + salt + ":" + encrypted;
var hashKey = msg_encrypted_bundle.replaceAll("/" , "_");
return hashKey;
}
import random
from Crypto.Hash import SHA1
from Crypto.Hash import SHA256
def generateRefundHashKey(invoice_id , merchant_key , app_secret) :
data = invoice_id + "|" + merchant_key
randNumIv = str(random.randint(10000000000000000,99999999999999999))
hashNumIv = SHA1.new()
hashNumIv.update(randNumIv.encode("UTF-8"))
hashNumber = hashNumIv.hexdigest()
iv = hashNumber[:16]
hashAppSec = SHA1.new()
hashAppSec.update(app_secret.encode("UTF-8"))
password = hashAppSec.hexdigest()
randNumSalt = str(random.randint(10000000000000000,99999999999999999))
hashNumSalt = SHA1.new()
hashNumSalt.update(randNumSalt.encode("UTF-8"))
hashSalt = hashNumSalt.hexdigest()
salt = hashSalt[:4]
strPassSalt = password + salt
hashStr = SHA256.new()
hashStr.update(strPassSalt.encode("UTF-8"))
saltWithPassword = hashStr.hexdigest()
encrypted = ""
msg_encrypted_bundle = iv + ":" + salt + ":" + encrypted
hash_key = msg_encrypted_bundle.replace("/" , "_")
return hash_key
Status Code 100 ve 101 döndüğü durumlar İade işleminin başarılı bir şekilde yapıldığını bildirmektedir. İşlem Durumunu Refunded
olarak güncelleyebilirsiniz. Banka tarafında iade işleminin kabul edilmediği durumlarda PayBull Operasyon ekibi tarafından iadeler yapılmaktadır.
status_code |
transaction_status |
100 |
Refunded |
101 |
Awaiting Refunded |
ÖRNEK KODLAR
{
"amount" : "10",
"invoice_id" : "c9fa2586-89f5-4898-a6b6-34554fbe1c89",
"hash_key": "1al1:47tri3g5nM4Snmc_ri3g_R1NylhHZcj0Zu3EuluVWRq9YMaHo2npFjXr7Nfe04po",
"app_id": "c3d81ae3cc3011ef10dcefa31a458d65",
"app_secret": "217071ea9f3f2e9b695d8f0039024e64",
"merchant_key" :"$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he"
}
{
"status_code": 100,
"status_description": "Refund completed successfully",
"order_no": "15925741639038",
"invoice_id": "66955",
"ref_no": "5454545dgdgd545545"
}
{
"status_code": 49,
"status_description": "Refund Failed",
"order_no": "15925741639038",
"invoice_id": "66955",
"ref_no": ""
}