i-Frame kullanılmadan doğrudan 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.
Not: Servisten dönen html bilgisini iFrame içerisine basılmak isteniyorsa cors policy'e takılmamak için iframe attribure'larına aşağıdaki alanlar eklenmelidir:
var iframe = document.createElement('iframe');
iframe.setAttribute('sandbox', 'allow-same-origin allow-top-navigation allow-forms allow-scripts');
Parametre ismi | Tip | Uzunluk | Zorunluluk | Örnek Değer | Açıklama |
---|---|---|---|---|---|
memberId | int | 16 | Evet | 1 | 1 olarak gönderilmesi gereken sabit parametredir. |
cardNumber | string | 16 | Evet | 5101385101385104 | Kart PAN bilgisi |
cvv | string | 3 | Evet | 000 | Kart güvenlik kodu |
expiryDateYear | string | 2 | Evet | 22 | Kart son kullanma yılı son iki hanesi. Örn: 2025 ise 25 olarak giriniz. |
expiryDateMonth | string | 2 | Evet | 12 | Kart son kullanma ayı |
use3D | boolean | - | Evet | true | İşlemin 3D secure veya Non3D olacağını belirtir. "true": 3D secure işlem, "false": Non 3D Secure. |
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. insertCard: "True" set edilirse bu alanın doldurulması gerekir. |
userCode | string | 40 | Evet | test | Kullanıcı kodu. Token aldığınız mail adresini girebilirsiniz. |
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 |
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) |
okUrl | string | 2048 | Evet | https:/.... | İşlem başarılı olduğunda üye işyerine dönülecek url bilgisi. |
failUrl | string | 2048 | Evet | https:/.... | İşlem başarısız olduğunda üye işyerine dönülecek url bilgisi. |
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. |
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. Sayfanın alt kısmında bulunan "HASH Hesaplama" başlığı altında detayına ulaşabilirsiniz. |
description | string | 100 | Hayır | - | İşlem açıklama bilgisi. |
requestIp | string | 15 | Hayır | 198.00.00.00 | İşlem istek IP bilgisi |
insertCard | bool | 5 | Hayır | False | Müşteriye ait kartın kaydedilmesi isteniyorsa bu değer "True" olarak set edilir. Default değer False' dir. |
cardHolderName | string | 16 | Hayır | Ad Soyad | Kart hamili ismi. insertCard: "True" set edilirse bu alanın doldurulması gerekir. |
cardAlias | string | 16 | Hayır | VISA Card | Kart ismi. insertCard: "True" set edilirse bu alanın doldurulması gerekir. |
secureDataId | integer | 16 | Hayır | 0 | Saklanan kart ID bilgisi . Kayıtlı bir müşteri kartı ile işlem yapılacaksa bu bilginin doldurulması gerekir. Kayıtlı kartların listesini ve secureDataId bilgisini GetCustomerCards servisinden temin edebilirsiniz. |
extraData | String | 500 | Hayır | - | Ek veri |
orderProductList | List | Hayır(*) | (*)Pazaryeri modeli için bu alanın doldurulması zorunludur. | ||
merchantId | long | 64 | Evet | 0001 | (*)Satıcı ID bilgisi. |
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 | Evet | 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. |
description | String | 4000 | Hayır | Açıklama | (*)Ürün Açıklaması |
extraData | String | 100 | Hayır | ekbilgi | İşyerine ayrılmış özel alandır. İşyeri istediği bilgiyi girebilir |
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 |
maturityPeriod | String | 4 | Hayır | 1 | Vade dönemi |
paymentFrequency | String | 4 | Hayır | 3 | Vade ödeme sıklığı |
İstek başarılıysa okUrl'e başarısızsa failUrl'e Form olarak iletilecektir. Request.Form["alan_adi"] ile dönüş bilgileri çekilebilir
Parametre ismi | Tip | Uzunluk | Açıklama |
---|---|---|---|
orderId | string | 36 | Sipariş numaranız |
rnd | string | 40 | İstek mesajında gönderilen Rnd bilgisidir |
hostReference | string | 100 | Banka Sanal işlem referans numarası |
authCode | string | 16 | İşlemin otorizasyon numarasıdır. İşlem başarılıysa bu alan dolu gelir. |
totalAmount | string | 19 | İşlem tutarı |
responseHash | string | 2048 | Cevap doğrulaması. İşlemin bizden geldiğinin doğrulanması için kontrol edilmelidir. Hesaplama yöntemi aşağıda verilmiştir. {apiKey}{request.ResponseCode}{request.OrderNo}{request.Rnd}{request.Amount} {request.InstallmentCount} bilgisinin sha512 ile hashlenmiş halidir |
responseCode | string | 10 | Cevap kodu. 00 --> Başarılı , Diğerleri başarısız |
responseMessage | string | 2048 | Cevap açıklaması |
customerId | string | 100 | İstek mesajında gönderilen müşteri bilgisidir |
extraData | string | 64 | İstek mesajında gönderilen ExtraData bilgisidir |
installmentCount | string | 2 | Taksit sayısı |
cardNumber | string | 20 | Kart numarası maskeli şekilde ilk 6 ve son 4 hanesi gösterilir. |
saleDate | string | 14 | İşlemin satış tarihi gösterilir. |
vPosName | string | 100 | İşlemin gerçekleştiği pos bankası bilgisidir. |
paymentSystem | string | 20 | İşlemin ödeme sistem bilgisidir. |
HTTP Method: POST
Content-Type: application/json
TEST URL: https://ppgpayment-test.birlesikodeme.com:20000/api/ppg/Payment/Payment3d
PROD URL: https://{baseUrl}/api/ppg/Payment/Payment3d
*Prod için baseUrl adresi,size entegrasyon mailinde "paymentBaseUrl" alanında iletilecektir.
{
"insertCard": true,
"use3D": true,
"merchantId": 0,
"customerId": "string",
"cardNumber": "string",
"expiryDateMonth": "string",
"expiryDateYear": "string",
"cvv": "string",
"secureDataId": 0,
"cardAlias": "string",
"userCode": "string",
"txnType": "string",
"installmentCount": "string",
"currency": "string",
"okUrl": "string",
"failUrl": "string",
"orderId": "string",
"totalAmount": "string",
"pointAmount": "string",
"rnd": "string",
"hash": "string",
"description": "string",
"requestIp": "string",
"cardHolderName": "string",
"extraData": "string",
"campaign": {
"text": "string",
"value": "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",
"description": "string"
}
],
"maturityPeriod": "string",
"paymentFrequency": "string"
}
İstek başarılıysa okUrl'e başarısızsa failUrl'e Form olarak iletilecektir. Request.Form["alan_adi"] ile dönüş bilgileri çekilebilir.
<form id="step1Form" runat="server">
<input type="hidden" name="OrderId" value ="10020102">
<input type="hidden" name="Rnd" value ="123456">
<input type="hidden" name="HostReference" value ="123456879">
<input type="hidden" name="AuthCode" value ="123456">
<input type="hidden" name="TotalAmount" value ="1000">
<input type="hidden" name="ResponseHash" value ="77240FF3043CC9837C789F59DBFD999AC5327A82FE7A504F5B50B7B8A60CB9684FCC18F530F90842EE806A62BD65FEB1E31CC59535F055E703A3C47CCEF584BF">
<input type="hidden" name="ResponseCode" value ="00">
<input type="hidden" name="ResponseMessage" value ="İşlem başarılı">
<input type="hidden" name="CustomerId" value ="customer1">
<input type='hidden' name='ExtraData' value=''>
<input type='hidden' name='InstallmentCount' value='2'>
public static string CreateHash(VposRequest request)
{
var apiKey =""; // Bu bilgi size özel olup kayıtlı kullanıcınıza mail olarak gönderilmiştir.
var hashString = $"{apiKey}{request.UserCode}{request.Rnd}{request.TxnType}{request.TotalAmount}
{request.CustomerId}{request.OrderId}{request.OkUrl}{request.FailUrl}";
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}+{request.OkUrl}+{request.FailUrl}";
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.$order_id.$okUrl.$failUrl;
$hash = mb_convert_encoding($hash, "UTF-16LE");
$hashString = hash("sha512", $hash);
<?php
$sonuc=$_GET['sonuc'];
if($sonuc=='true' || $sonuc=='false')
{
echo '<pre>';
var_dump($_POST);
echo '</pre>';
}
else
{
$token = ''; // token bilgisini giriniz.
$arParams = array(
"cardNumber" => "5101385101385104",
"cvv" => "000",
"expiryDateYear" => "22",
"expiryDateMonth" => "12",
"use3D" => true,
"memberId" => 1,
"merchantId" => 1, // size ait merchant id bilgisini giriniz.
"customerId" => "12345",
"userCode" => "test",
"txnType" => "Auth",
"installmentCount" => "0",
"okUrl" => "http://localhost/odeme.php?sonuc=true",
"failUrl" => "http://localhost/odeme.php?sonuc=false",
"orderId" => "123456abcdefghtr",
"totalAmount" => "2000",
"rnd"=> "123456abcde",
"currency" => "949",
"requestIp"=>"192.0.0.1",
"hash" => "" // hash hesapmasını tekrar yapınız.
);
$data_string = json_encode($arParams);
$url = "https://ppgpayment-test.birlesikodeme.com:20000/api/ppg/Payment/Payment3d";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST , "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json',
'Content-Length: ' . strlen($data_string).'',
'Authorization: Bearer '.$token
));
$result = curl_exec($ch);
$sonuc=htmlspecialchars($result, ENT_QUOTES);
curl_close($ch);
}
?>