Non-Secure Ödeme
Ödeme API'si, sipariş ve kredi kartı ayrıntı bilgilerini paybull ödeme entegrasyon sistemine göndermek için kullanılır. Üye işyeri web sitesi, ödeme sayfasını yüklemeden hemen ödeme durumunu almalıdır. API başarı durumuna göre, alışveriş sepeti ve sipariş durumu buna göre değiştirilmelidir. Bu ödeme API'sinde diğer ödeme apilerde gibi getPos Api'yi çağırmaya gerek yoktur.
Method |
API Uç Noktası (Endpoint) |
İçerik-Türü |
POST |
/api/paySmart2D |
application/x-www-form-urlencoded |
Parametre |
Veri Türü |
Şart |
Açıklama |
cc_holder_name |
string |
Zorunlu |
Kart Üzerindeki Ad Soyad. |
cc_no |
string |
Zorunlu |
Kart numarası. |
expiry_month |
string |
Zorunlu |
Kart son kullanma ayı. |
expiry_year |
string |
Zorunlu |
Kart son kullanma yılı. 2030 |
cvv |
string |
Zorunlu |
3 haneli güvenlik kodu, yabancı kartlarda 4 hanelidir. |
currency_code |
string |
Zorunlu |
Para birimi kodu. USD , TRY , EUR |
installments_number |
number |
Zorunlu |
Taksit Sayısı. |
invoice_id |
string |
Zorunlu |
Benzersiz fatura numarası. |
invoice_description |
string |
Zorunlu |
Sepet açıklaması. |
name |
string |
Zorunlu |
Ürünü satın alan kişinin adı. |
surname |
string |
Zorunlu |
Ürünü satın alan kişinin soyadı. |
total |
double |
Zorunlu |
Ödeme yapılacak tutar. 1000.58 |
merchant_key |
string |
Zorunlu |
PayBull üzerinden almış olduğunuz benzersiz Üye İşyeri Anahtarı |
items |
string |
Zorunlu |
Sepetteki ürünler |
cancel_url |
string |
Zorunlu |
Başarısız ödeme URL'i. |
return_url |
string |
Zorunlu |
Başarılı ödeme URL'i. |
response_method |
string |
Opsiyonel |
POST / GET parametreleri iletilir. |
hash_key |
string |
Zorunlu |
Benzersiz anahtar. İşlemin bankaya ulaşmadan, kullanıcının ödemeyle ilgili değişiklikler yapamamasını ve ödemenin güvenli olarak tamamlanmasını sağlanır. bkz.Hash Key Oluşturma |
bill_address1 |
string |
Opsiyonel |
Ürünü satın alan kişinin 1. Adres Satırı. |
bill_address2 |
string |
Opsiyonel |
Ürünü satın alan kişinin 2. Adres Satırı . |
bill_city |
string |
Opsiyonel |
Ürünü satın alan kişinin Şehir. |
bill_postcode |
string |
Opsiyonel |
Ürünü satın alan kişinin Posta kodu. |
bill_state |
string |
Opsiyonel |
Ürünü satın alan kişinin İlçe. |
bill_country |
string |
Opsiyonel |
Ürünü satın alan kişinin Ülke. |
bill_email |
string |
Opsiyonel |
Ürünü satın alan kişinin email adresi. |
bill_phone |
string |
Opsiyonel |
Ürünü satın alan kişinin telefon numarası. |
card_program |
string |
Opsiyonel |
WORLD , BONUS , MAXIMUM , BANKKART_COMBO , PARAF , AXESS , ADVANT , CARD_FNS değerlerinin biri gönderilir. |
ip |
string |
Opsiyonel |
Ürünü satın alan kişinin ip adresini temsil eder. |
transaction_type |
string |
Opsiyonel |
PreAuth / Auth parametresi iletilir, ödemenin 20 gün içinde tamamlanması veya iptal edilmesi gerekir, aksi takdirde otomatik olarak iptal edilir. |
sale_webhook_key |
string |
Opsiyonel |
Bir satın alma talebi tamamlandığında, Paybull bir gönderi talebi gönderir. Paybull Üye İş Yeri Panelinde Satış web kancası URL'ni atamalıdır. |
YİNELENEN TALEP
Parametre |
Veri Türü |
Şart |
Açıklama |
order_type |
Integer |
Zorunlu |
1 iletildiğinde Paybull ödemeyi yineleme için doğrular. |
recurring_payment_number |
Integer |
Zorunlu |
Tekrarlanacak ödeme sayısını tanımlar. İlk tutar 100 TL ve recurring_payment_number 5 ise, toplam tutar 100 TL * 5 = 500 TL olarak işlem . (Her işleme işlem maliyeti eklenebilir) |
recurring_payment_cycle |
string |
Zorunlu |
recurring_payment_interval parametresinin birim türünü tanımlar. D / M / Y Örn : D: Günler ,M: Aylar , Y: Yıllar |
recurring_payment_interval |
Integer |
Zorunlu |
Aralık değerini tanımlar. recurring_payment_interval = 2 ve recurring_payment_cycle = "M" ise, işlem 2 ayda bir gerçekleşecektir. |
recurring_webhook_key |
string |
Zorunlu |
Paybull Üye İş Yeri Panelinde Satış web kancası URL'ni atamalıdır. |
TARIM TALEP
Parametre |
Veri Türü |
Şart |
Açıklama |
maturity_period |
Integer |
Zorunlu |
İşlem tarım ise bir tamsayı gönderilmelidir. |
payment_frequency |
Integer |
Zorunlu |
İşlem tarım ise bir tamsayı gönderilmelidir. |
HASH KEY OLUŞTURMA
function generateHashKey($total, $installment, $currency_code, $merchant_key, $invoice_id, $app_secret)
{
$data = $total . '|' . $installment . '|' . $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", null, $iv);
$msg_encrypted_bundle = "$iv:$salt:$encrypted";
$msg_encrypted_bundle = str_replace('/', '__', $msg_encrypted_bundle);
return $msg_encrypted_bundle;
}
public static string GenerateHashKey(string total,string installment,string currency_code,string merchant_key,string invoice_id,string app_secret){
var data = total + '|'+installment+'|'+currency_code+'|'+merchant_key+'|'+invoice_id;
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 encrypted = "asdasdasd";
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 generateHashKey(total , installment , currency_code , merchant_key , invoice_id , app_secret) {
var data = total + "|" + installment + "|" + currency_code + "|" + merchant_key + "|" + invoice_id;
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);
strPassSalt.create();
var saltWithPassword = strPassSalt.hex();
var encrypted = "";
var msg_encrypted_bundle = iv + ":" + salt + ":" + encrypted;
msg_encrypted_bundle = msg_encrypted_bundle.replaceAll("/" , "_");
return msg_encrypted_bundle;
}
ÖRNEK KODLAR
payment_status = 1 Tamamlandı ,payment_status = 0 Başarısız
<form target="_top" action="https://test.paybull.com/ccpayment/api/paySmart3D" method="post" id="three_d_form">
<input type="hidden" name="cc_holder_name" value="John Dao"/>
<input type="hidden" name="cc_no" value="4508034508034509"/>
<input type="hidden" name="expiry_month" value="12"/>
<input type="hidden" name="expiry_year" value="26"/>
<input type="hidden" name="cvv" value="000"/>
<input type="hidden" name="currency_code" value="TRY"/>
<input type="hidden" name="installments_number" value="1"/>
<input type="hidden" name="invoice_id" value="PAYBULL-INVOICE-1"/>
<input type="hidden" name="invoice_description" value="INVOICE TEST DESCRIPTION"/>
<input type="hidden" name="name" value="John"/>
<input type="hidden" name="surname" value="Dao"/>
<input type="hidden" name="total" value="10.00"/>
<input type="hidden" name="merchant_key" value="$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he"/>
<input type="hidden" name="cancel_url" value="FAIL URL"/>
<input type="hidden" name="return_url" value="SUCCES URL"/>
<input type="hidden" name="hash_key" value="32d54deec44e1d10:b45b:FCi9MQ...."/>
<input type="hidden" name="items" value='[{"name":"URUN","price":10.00,"quantity":1,"description":"ACIKLAMA"}]'/>
<input type="submit" value="Öde" />
</form>
Array
(
[order_no] => 167879639814398
[order_id] => 167879639814398
[invoice_id] => 1678796401PAYBULL
[status_code] => 100
[status_description] => Payment Successfully Completed
[credit_card_no] => 540667****5403
[transaction_type] => Auth
[payment_status] => 1 // Tamamlandı
[payment_method] => 1
[error_code] => 100
[error] => Payment Successfully Completed
[auth_code] => 262818
[merchant_commission] => 0
[user_commission] => 0
[merchant_commission_percentage] => 0
[merchant_commission_fixed] => 0
[installment] => 1
[amount] => 10
[hash_key] => 6781df462c7582b9:b645:3ExMA6uvr6y3h3L7MXjhGFLSpPVP8ox2bx__tqx8__shp2MlEQLOkfo9Y0ceHySRVX
[md_status] => 1
[original_bank_error_code] =>
[original_bank_error_description] =>
)
Array
(
[order_no] => 167879630753329
[order_id] => 167879630753329
[invoice_id] => 1678796307PAYBULL
[status_code] => 41
[status_description] => N-status/Challenge authentication via ACS: https://emvacs.bkm.com.tr/acs/creq
[credit_card_no] => 540667****5403
[transaction_type] => Auth
[payment_status] => 0 // Başarısız
[payment_method] => 1
[error_code] => 41
[error] => N-status/Challenge authentication via ACS: https://emvacs.bkm.com.tr/acs/creq
[auth_code] =>
[merchant_commission] => 0
[user_commission] => 0
[merchant_commission_percentage] => 0
[merchant_commission_fixed] => 0
[installment] => 1
[amount] => 10
[hash_key] => 166d91df38bcd714:720e:HMFSjSLvbicqoHJUu1p+wDZ8oqBSR3YsTjqa2q3nW8dHqePOYhH78yypXOO0Oe5l
[md_status] => 0
[original_bank_error_code] => 99
[original_bank_error_description] => Authentication failed
)
Array
(
[order_no] =>
[order_id] =>
[invoice_id] => 1678797131PAYBULL
[status_code] => 68
[status_description] => Invalid hash key
[credit_card_no] =>
[transaction_type] => Auth
[payment_status] => 0
[payment_method] => 1
[error_code] => 68
[error] => Invalid hash key
[auth_code] =>
[hash_key] => f37135dd8bc6ebca:4042:8lWRu9cq4cDTVGN0HrclX+Uz+x78LxrIWdsHWX16CvI=
)