3D Model ile Ödeme
3D Model'i kullanmak için “payment_completed_by” : “merchant” olarak paySmart3D apisine istek atılmalıdır. paySmart3D apisinden “md_status” : 1 dönmesi kartın doğrulandılığı anlamına gelir ve tutarı karttan çekmek için /payment/complete
apisini çağrılması gereklidir.
Api'ye 15 dakika içerisinde sonuç iletilmez ise otomatik, "Başarısız" olarak sonuçlanır.
paySmart3D yönlendirmeden gelen istek üzerinden md_status değeri kontrol edilerek işlem başlatılmalıdır.
md_status = 1 ( Kart Doğrulandı )
md_status = 0 ( Kart Doğrulanmadı )
Enpoint, Headers(Başlıklar) ve Request(İstek) bilgileri aşağıda verilmiştir.
Method |
API Uç Noktası (Endpoint) |
İçerik-Türü |
POST |
/payment/complete |
application/json |
Parametre |
Şart |
İçerik-Türü |
Authorization |
Zorunlu |
Bearer |
Accept |
Zorunlu |
application/json |
Parametre |
Veri Türü |
Şart |
Açıklama |
merchant_key |
string |
Zorunlu |
PayBull üzerinden almış olduğunuz benzersiz Üye İşyeri Anahtarı |
invoice_id |
string |
Zorunlu |
Ödemeyi başlattığınız benzersiz fatura numarası. |
order_id |
string |
Zorunlu |
Ödemeyi başlattığın benzersiz sipariş kimliği. |
status |
string |
Zorunlu |
Ödemeyi tamamlamak için ; complete Ödemeyi iptal etmek için; cancel iletilmelidir. |
hash_key |
string |
Zorunlu |
Benzersiz anahtar.bkz.Hash Key Oluşturma |
HASH KEY OLUŞTURMA
function generateConfrimPaymentHashKey($merchant_key, $invoice_id, $order_id, $status, $app_secret)
{
$data = $merchant_key . '|' . $invoice_id . '|' . $order_id . '|' . $status;
$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 merchant_key, string invoice_id,string order_id, string status,
string app_secret){
var data = merchant_key + '|'+invoice_id+'|'+order_id+'|'+status;
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(merchant_key, invoice_id, order_id, status, app_secret) {
var data = merchant_key + "|" + invoice_id + "|" + order_id + "|" + status;
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;
}
import random
from Crypto.Hash import SHA1
from Crypto.Hash import SHA256
def generateHashKey(merchant_key, invoice_id, order_id, status, app_secret) :
data = merchant_key + "|" + invoice_id + "|" + order_id + "|" + status;
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
msg_encrypted_bundle = msg_encrypted_bundle.replace("/" , "_")
return msg_encrypted_bundle
Örnek Kodlar
{
"merchant_key": "$2y$10$w/ODdbTmfubcbUCUq/ia3OoJFMUmkM1UVNBiIQIuLfUlPmaLUT1he",
"invoice_id": "9a197ed9-cfaf-4456-b0fc-da74a95f461c",
"order_id": "166254527653758",
"status": "complete",
"hash_key": "36a50210c8b2f19e:11629:eHBA0moN..."
}
{
"status_code": 100,
"status_description": "Payment Successfully Completed",
"data": {
"order_no": "166254527653758",
"order_id": "166254527653758",
"invoice_id": "9a197ed9-cfaf-4456-b0fc-da74a95f461c",
"status_code": 100,
"status_description": "Payment Successfully Completed",
"credit_card_no": "557023****7463",
"transaction_type": "Auth",
"payment_status": true,
"payment_method": 1,
"error_code": 100,
"error": "Payment Successfully Completed",
"auth_code": "287679",
"status": "Completed",
"hash_key": "c98d63c4ba1952c9:19e8:94Z0B48k_"
}
{
"status_code": 31,
"status_description": "Pending sale not found against order_id 166246147223278",
"data": {
"invoice_id": "f6a2a107-088f-4169-875f-8a6f30cf4ff2",
"order_id": "166246147223278"
}