Ödeme (iFrame ile)

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');

Servise gönderilmesi gereken parametreler şu şekildedir:
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
email 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
email 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ığı
Servisten dönen parametreler şu şekildedir:
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.
Örnek JSON formatında istek ve cevaplar aşağıdadır:

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.

Request
{
  "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"
}
Response
<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'>

HASH Hesaplama



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 ile Ödeme Örnek Kod

<?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);

}

?>