Saklı kart ile doğrudan NoneSecure otorizasyon almak için kullanılan servistir. Bu serviste istek yapabilmesi için token bilgisinin Header'da gönderilmesi gerekmektedir. Bu linkten Üye İşyeri Doğrulama token bilgilerine ulaşabilirsiniz.
Ödeme isteği öncesinde CommissionInquiry servisi ile komisyon tanımı ve bu tanıma ait oran ile hesaplanmış komisyon tutarı bilgisi öğrenilebilir. Ayrıca CampaignInquiry servisi ile kampanya tanımı ve bu tanıma ait oran ile hesaplanmış indirim tutarı bilgisi öğrenilebilir.
Parametre ismi | Tip | Uzunluk | Zorunluluk | Örnek Değer | Açıklama |
---|---|---|---|---|---|
memberId | long | 16 | Evet | 1 | Her zaman 1 |
merchantId | long | 16 | Evet | ? | Sizin için oluşturulan Üye işyeri ID'si. Kullanıcı bilgileri mailinde size iletilecektir. Prod ortam bilgisi farklıdır. |
customerId | String | 100 | Hayır | 1234 | Üye işyeri tarafında kayıtlı olan kullanıcının tekil bilgisidir. İster bir id ister bir email olabilir. Kayıtlı kart ile işlem yapılacaksa bu alanın doldurulması zorunludur. |
cvv | string | 3 | Hayır | 000 | Kart güvenlik kodu . Kayıtlı kart ile işlem yapılacaksa bu alan boş bırakılabilir. |
userCode | string | 40 | Evet | test | Kullanıcı kodu. Kullanıcı bilgileri mailinde size iletilecektir. Prod ortam bilgisi farklıdır. |
txnType | string | 20 | Evet | Auth | İşlem Tipi. Gönderilebilecek parametreler aşağıdadır: Auth --> Satış, PreAuth --> Ön Provizyon, PostAuth --> Provizyon kapama, Inquiry --> Ödeme sorgulama, QrAuth --> QR kod ile ödeme, PointAuth --> Puanlı Ödeme , Void --> İptal, Refund --> İade |
installmentCount | string | 2 | Evet | 1 | Taksit sayısını ifade eder. Taksit bilgisini provizyon işlemini göndermeden önce Taksit Tanımı Sorgula servisinden kontrol edip dönüş bilgisine göre doldurmalısınız |
currency | string | 3 | Evet | 949 | Kur bilgisi. (TL:949) |
orderId | string | 36 | Evet | order1:/... | Üye işyeri tarafından üretilen işleme özgü bir numaradır. |
totalAmount | string | 19 | Evet | 9950 | İşlem tutarı 9950 99 TL 50 kuruş demektir, virgül veya noktalama içermez küsürat için 2 hanedir. 1 TL için 100 gönderilmelidir. |
pointAmount | string | 19 | Hayır | 9950 | Puanlı satış yapılacaksa txnType: "PointAuth" gönderilmelidir ve pointAmount ile totalAmount değerlerinin aynı olması gerekir. Kartın puanını sorgulamak için Puan Sorgula servisini kullanabilirsiniz. |
rnd | string | 40 | Evet | abcd | Hash hesaplamasında kullanılan random numaradır. |
hash | string | 2048 | Evet | abcdefgh | İşlemin güvenliği için oluşturulan hash bilgisidir. |
description | string | 100 | Hayır | - | İşlem açıklama bilgisi. |
requestIp | string | 15 | Hayır | 198.00.00.00 | İşlem istek IP bilgisi |
cardAlias | string | 16 | Hayır | VISA Card | Kayıtlı karta verilen isim. Kayıtlı kart ile işlem yapılacaksa cardAlias veya secureDataId bilgisinin gönderilmesi gerekir. Kayıtlı kartların listesini ve secureDataId bilgisini GetCustomerCards servisinden temin edebilirsiniz. |
secureDataId | integer | 16 | Hayır | 0 | Saklanan kart ID bilgisi . Kayıtlı kart ile işlem yapılacaksa cardAlias veya secureDataId bilgisinin gönderilmesi gerekir. Kayıtlı kartların listesini ve secureDataId bilgisini GetCustomerCards servisinden temin edebilirsiniz. |
orderProductList | List | Hayır(*) | (*)Pazaryeri modeli için bu alanın doldurulması zorunludur. | ||
merchantId | long | 64 | Evet | 0001 | Satıcı ID bilgisi. (Submerchant) |
productId | String | 64 | Evet | 000032 | Tekil (unique) ürün ID bilgisi. İstek mesajında sepette bulunan her ürün için ayrı ayrı gönderilmesi gerekmektedir. |
amount | String | 64 | Evet | 9950 | Sipariş tutarı 9950, 99 TL 50 kuruş demektir, virgül veya noktalama içermez küsürat için 2 hanedir. 1 TL için 100 gönderilmelidir. |
productName | String | 64 | Evet | Bilgisayar | Sepetteki ürün ismi |
commissionRate | String | 5 | hayır | 10.00 | Ana işyerinin alt işyerinden tahsil edeceği komisyon tutarının hesaplanmasında kullanılan yüzdelik orandır. Örneğin, %10 komisyon alınacaksa, 10.00 olarak gönderilmelidir. |
deliveryInfo | list | Hayır | Teslimat bilgileri | ||
taxNo | String | 15 | Hayır | Customer Name | Vergi numarası |
taxOffice | String | 64 | Hayır | Customer Name | Vergi dairesi |
firmName | String | 64 | Hayır | Customer Name | Firma adı |
identityNumber | String | 11 | Hayır | Customer Name | Kimlik numarası |
fullName | String | 64 | Hayır | Customer Name | Müşteri ad soyad bilgisi |
String | 100 | Hayır | customer-mail@mail.com | Müşteri eposta bilgisi | |
address | String | 1024 | Hayır | Mecidiyeköy - İstanbul | Müşteri adres bilgisi |
phone | String | 16 | Hayır | 5320123456 | Müşteri telefon bilgisi |
city | String | 48 | Hayır | İstanbul | Müşteri il bilgisi |
town | String | 48 | Hayır | Mecidiyeköy | Müşteri ilçe bilgisi |
zipCode | String | 16 | Hayır | 34000 | Müşteri posta kodu bilgisi |
billingInfo | list | Hayır | Fatura bilgileri | ||
taxNo | String | 15 | Hayır | Customer Name | Vergi numarası |
taxOffice | String | 64 | Hayır | Customer Name | Vergi dairesi |
firmName | String | 64 | Hayır | Customer Name | Firma adı |
identityNumber | String | 11 | Hayır | Customer Name | Kimlik numarası |
fullName | String | 64 | Hayır | Customer Name | Müşteri ad soyad bilgisi |
String | 100 | Hayır | customer-mail@mail.com | Müşteri eposta bilgisi | |
address | String | 1024 | Hayır | Mecidiyeköy - İstanbul | Müşteri adres bilgisi |
phone | String | 16 | Hayır | 5320123456 | Müşteri telefon bilgisi |
city | String | 48 | Hayır | İstanbul | Müşteri il bilgisi |
town | String | 48 | Hayır | Mecidiyeköy | Müşteri ilçe bilgisi |
zipCode | String | 16 | Hayır | 34000 | Müşteri posta kodu bilgisi |
Dönen mesajın yapısı şu şekildedir. responseCode": "00" ise işlem başarılı gerçekleşmiştir.
Parametre ismi | Tip | Uzunluk | Açıklama |
---|---|---|---|
authCode | string | 6 | Otorizasyon kodu |
hostReference | string | 24 | Banka referans numarası |
responseCode | string | 4 | Cevap kodu. 00 --> Başarılı , Diğerleri başarısız |
responseMessage | string | 2048 | Banka cevap açıklaması |
orderId | string | 16 | Sipariş ID değeri |
txnType | string | 20 | İstek mesajındaki txnType bilgisi |
txnStatus | string | 1 | İşlem durumu. 'Y' --> 'Başarılı', 'E' --> 'Başarısız', 'P' --> 'Beklemede', 'V' --> 'İptal Edildi', 'R' --> 'İade Edildi', 'A' --> 'Satışa Çevrildi', 'K' --> 'Kısmi İade Edildi' |
totalAmount | string | 19 | Tahsil edilen tutar bilgisi |
vposId | string | 64 | Banka Sanal POS numarası |
vposName | string | 64 | Banka Sanal POS adı |
HTTP Method: POST
Content-Type: application/json
TEST URL: https://ppgpayment-test.birlesikodeme.com:20000/api/ppg/Payment/NoneSecurePayment
PROD URL: https://{baseUrl}/api/ppg/Payment/NoneSecurePayment
*Prod için baseUrl adresi, size entegrasyon mailinde "paymentBaseUrl" alanında iletilecektir.
{
"memberId": 0,
"merchantId": 0,
"customerId": "string",
"cvv": "string",
"secureDataId": 0,
"cardAlias": "string",
"userCode": "string",
"txnType": "string",
"installmentCount": "string",
"currency": "string",
"orderId": "string",
"totalAmount": "string",
"pointAmount": "string",
"rnd": "string",
"hash": "string",
"description": "string",
"requestIp": "string",
"billingInfo": {
"taxNo": "string",
"taxOffice": "string",
"firmName": "string",
"identityNumber": "string",
"fullName": "string",
"email": "string",
"phone": "string",
"address": "string",
"city": "string",
"town": "string",
"zipCode": "string"
},
"deliveryInfo": {
"taxNo": "string",
"taxOffice": "string",
"firmName": "string",
"identityNumber": "string",
"fullName": "string",
"email": "string",
"phone": "string",
"address": "string",
"city": "string",
"town": "string",
"zipCode": "string"
},
"orderProductList": [
{
"merchantId": 0,
"productId": "string",
"amount": "string",
"productName": "string",
"commissionRate": "string"
}
]
}
Dönen mesahın yapısı şu şekildedir. responseCode": "00" ise işlem başarılı gerçekleşmiştir.
{
"fail": false,
"statusCode": 200,
"result": {
"responseCode": "00",
"responseMessage": "",
"orderId": "Abc04037b238f4123",
"txnType": null,
"txnStatus": "Y",
"vposId": 8,
"vposName": "T.C. Ziraat Bankası A.Ş.",
"authCode": "951073",
"hostReference": null,
"totalAmount": "2500"
}
}
public static string CreateHash(VposRequest request)
{
var hashPassword =""; // Bu bilgi size özel olup kayıtlı kullanıcınıza mail olarak gönderilmiştir.
var hashString = $"{hashPassword}{request.UserCode}{request.Rnd}{request.TxnType}{request.TotalAmount}{request.CustomerId}{request.OrderId}";
System.Security.Cryptography.SHA512 s512 = System.Security.Cryptography.SHA512.Create();
System.Text.UnicodeEncoding ByteConverter = new System.Text.UnicodeEncoding();
byte[] bytes = s512.ComputeHash(ByteConverter.GetBytes(hashString));
var hash = System.BitConverter.ToString(bytes).Replace("-","");
return hash;
}
var crypto = require('crypto');
var param = "{hashPassword}+{request.UserCode}+{request.Rnd}+{request.TxnType}+{request.TotalAmount}+{request.CustomerId}+{request.OrderId}";
var hash = crypto.createHash('sha512');
data = hash.update(param, 'utf-16le');
hash = data.digest('hex');
console.log("hash : " + hash);
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public static String getSecureData(String dataToHash ){
String generatedHash = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-512");
byte[] bytes = md.digest(dataToHash.getBytes(StandardCharsets.UTF_16LE));
StringBuilder sb = new StringBuilder();
for(int i=0; i< bytes.length ;i++){
sb.append(Integer.toString((bytes & 0xff) + 0x100,16).substring(1));
}
generatedHash = sb.toString().toUpperCase();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return generatedHash
}
$hash = $hashkey.$userCode.$rnd.$TxnType.$TotalAmount.$CustomerId.$OrderId;
$hash = mb_convert_encoding($hash, "UTF-16LE");
$hashString = hash("sha512", $hash);