i-Frame ile otorizasyon almak için kullanılan servistir. Bu serviste istek yapabilmesi için token bilgisinin Header'da gönderilmesi gerekmektedir. Buradan Üye İşyeri Doğrulama token bilgilerine ulaşabilirsiniz.
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. |
merchantId | long | 16 | Evet | 2 | Sizin için oluşturulan Üye işyeri ID'si |
customerId | String | 100 | Hayır | test@test.com | Üye işyeri tarafında kayıtlı olan kullanıcının tekil bilgisidir. İster bir id ister bir email olabilir |
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, QrAuth --> QR kod ile ödeme, PointAuth --> Puanlı Ödeme |
installmentCount | String | 2 | Hayır | 1 | Taksit sayısını ifade eder. İşlem taksitli işlem olacaksa bu sayı 1 den büyük olmalıdır. Eğer 1 den küçük veya numerik olmayan bir değer gönderilirse 0 kabul edilir. |
currency | String | 3 | Evet | 949 | Kur bilgisi. (TL:949, USD:840, EUR:978, GBP:826, JPY:392, RUB:643) |
okUrl | String | 2048 | Hayır | https:/.... | İşlem başarılı olduğunda üye işyerine dönülecek url bilgisi. |
failUrl | String | 2048 | Hayır | 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 |
merchantVposId | Number | 16 | Hayır | 1 | Üye işyeri sanal pos ID bilgisi |
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ı |
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ığı |
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/Payment
PROD URL: https://{baseUrl}/api/ppg/Payment/Payment
*Prod için baseUrl adresi,size entegrasyon mailinde "paymentBaseUrl" alanında iletilecektir.
{
"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"
}
<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(
"memberId" => 1,
"merchantId" => 1, // size ait merchant id bilgisini giriniz.
"customerId" => "12345",
"userCode" => "test",
"txnType" => "Auth",
"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/Payment";
$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);
}
?>