Transfer Talimatının Sonucunun Alınması (Opsiyonel)
PAYTR sistemi, transfer işlemlerinin sonuçlanması sonrası Mağazanın belirlediği URL’e bilgi verir.
İstek (REQUEST) yapılacak URL: Platform Transfer Sonucu Bildirim URL (Mağaza Paneli > Destek & Kurulum > AYARLAR sayfasına Mağaza tarafından girilmelidir))
Token üretiminde kullanılacak veriler
Alan adı / tipi |
Açıklama |
Zorunlu |
Kısıtlar |
trans_id |
Transfer talebinde belirttiğiniz trans_id değerlerini içeren JSON string |
Evet |
- |
merchant_salt |
PayTR Mağaza Paneli > Destek & Kurulum > Entegrasyon Bilgileri sayfası üzerinden ulaşabileceğiniz, mağazanıza özgü değer. |
Evet |
- |
merchant_key |
PayTR Mağaza Paneli > Destek & Kurulum > Entegrasyon Bilgileri sayfası üzerinden ulaşabileceğiniz, mağazanıza özgü değer. |
Evet |
- |
POST REQUEST içeriğinde gönderilecek değerler:
Alan adı / tipi |
Zorunlu |
Açıklama |
Kısıtlar |
trans_ids (JSON string) |
Evet |
Transfer talebinde belirttiğiniz trans_id değerlerini içeren JSON string |
|
hash (string) |
Evet |
paytr_token: İsteğin PAYTR’dan geldiğine ve içeriğin değişmediğine emin olmanız için oluşturulan değer |
Hesaplama ve kontrol hakkında lütfen örnek kodları inceleyin |
Örnek POST:
[hash] => Of0/yvgTii/+lGD3o+J0u8xXriVqlPIrvsZsv4cLhM4=
[trans_ids] => ["dcbbe0b9fd25154d73c","dc8c509efc6450d30","9310d84d3bf"]
Yanıt (RESPONSE):
PAYTR’dan gelen isteğe ekrana OK basarak yanıt vermeniz beklenmektedir. Bu yanıtın alınmadığı durumda
istek tekrarlanacaktır.
<?php
$post = $_POST;
####################### DÜZENLEMESİ ZORUNLU ALANLAR #######################
#
## API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz.
$merchant_key = 'YYYYYYYYYYYYYY';
$merchant_salt = 'ZZZZZZZZZZZZZZ';
###########################################################################
####### Bu kısımda herhangi bir değişiklik yapmanıza gerek yoktur. #######
#
## POST değerleri ile hash oluştur.
$post["trans_ids"]=str_replace("\\", "", $post["trans_ids"]);
$hash = base64_encode( hash_hmac('sha256', $post['trans_ids'].$merchant_salt, $merchant_key, true) );
#
## Oluşturulan hash'i, PayTR'dan gelen post içindeki hash ile karşılaştır (isteğin PayTR'dan geldiğine ve değişmediğine emin olmak için)
## Bu işlemi güvenlik nedeniyle mutlaka yapmanız gerekiyor.
if( $hash != $post['hash'] )
die('PAYTR notification failed: bad hash');
###########################################################################
## $post['trans_ids'] içerisinde daha önce PayTR'a ilettiğiniz transfer taleplerinden tamamlanan transferlerin trans_id bilgileri JSON formatında gelir
## trans_id bilgisi transfer talebi yaparken PayTR'a gönderdiğiniz her işlem için eşsiz değerdir
$trans_ids = json_decode($post['trans_ids'],1);
foreach($trans_ids as $trans_id)
{
## Örn: Burada $trans_id ile veritabanınızdan transfer talebini tespit edip ilgili kullanıcınıza bilgilendirme gönderebilirsiniz (email, sms vb.)
}
## Bildirimin alındığını PayTR sistemine bildir.
echo "OK";
exit;
?>
# Python 3.6+
# Django Web Framework referans alınarak hazırlanmıştır
import base64
import hashlib
import hmac
import json
from django.shortcuts import render, HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def callback(request):
if request.method != 'POST':
return HttpResponse(str(''))
post = request.POST
# API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz.
merchant_key = b'YYYYYYYYYYYYYY'
merchant_salt = 'ZZZZZZZZZZZZZZ'
# Bu kısımda herhangi bir değişiklik yapmanıza gerek yoktur.
# POST değerleri ile hash oluştur.
post['trans_ids'] = post['trans_ids'].replace('\\', '')
hash_str = post['trans_ids'] + merchant_salt
hash = base64.b64encode(hmac.new(merchant_key, hash_str.encode(), hashlib.sha256).digest())
# Oluşturulan hash'i, paytr'dan gelen post içindeki hash ile karşılaştır
# (isteğin paytr'dan geldiğine ve değişmediğine emin olmak için)
# Bu işlemi güvenlik nedeniyle mutlaka yapmanız gerekiyor.
if hash != post['hash']:
return HttpResponse(str('PAYTR notification failed: bad hash'))
# post['trans_ids'] içerisinde daha önce PayTR'a ilettiğiniz transfer taleplerinden tamamlanan transferlerin trans_id bilgileri JSON formatında gelir
# trans_id bilgisi transfer talebi yaparken PayTR'a gönderdiğiniz her işlem için eşsiz değerdir
trans_ids = json.loads(post['trans_ids'])
for ids in trans_ids:
# Örn: Burada trans_id ile veritabanınızdan transfer talebini tespit edip ilgili kullanıcınıza bilgilendirme gönderebilirsiniz (email, sms vb.)
print(ids)
# Bildirimin alındığını PayTR sistemine bildir.
return HttpResponse(str('OK'))
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Net.Mail;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class transfer_sonucu_ornek : System.Web.UI.Page {
// ####################### DÜZENLEMESİ ZORUNLU ALANLAR #######################
//
// API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz.
string merchant_key = "YYYYYYYY";
string merchant_salt = "ZZZZZZZZ";
// ###########################################################################
protected void Page_Load(object sender, EventArgs e) {
// ####### Bu kısımda herhangi bir değişiklik yapmanıza gerek yoktur. #######
//
// POST değerleri ile hash oluştur.
string trans_ids = Request.Form["trans_ids"];
string hash = Request.Form["hash"];
trans_ids = trans_ids.Replace(@"\","");
string Birlestir = string.Concat(trans_ids, merchant_salt);
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(merchant_key));
byte[] b = hmac.ComputeHash(Encoding.UTF8.GetBytes(Birlestir));
string token = Convert.ToBase64String(b);
//
// Oluşturulan hash'i, paytr'dan gelen post içindeki hash ile karşılaştır (isteğin paytr'dan geldiğine ve değişmediğine emin olmak için)
if (hash.ToString() != token) {
Response.Write("PAYTR notification failed: bad hash");
return;
}
//###########################################################################
## trans_ids: Daha önce PayTR'a ilettiğiniz transfer taleplerinden tamamlanan transferlerin trans_id bilgilerini içeren JSON
## (trans_id bilgisi transfer talebi yaparken PayTR'a gönderdiğiniz her işlem için eşsiz değerdir)
## Örn: Burada trans_ids JSON verisini DECODE edip, çıktıdaki her bir trans_id ile veritabanınızdan transfer talebini tespit ederek ilgili kullanıcınıza bilgilendirme gönderebilirsiniz (email, sms vb.)
dynamic dynJson = JsonConvert.DeserializeObject(trans_ids);
foreach (var item in dynJson)
{
## Örn: Burada $trans_id ile veritabanınızdan transfer talebini tespit edip ilgili kullanıcınıza bilgilendirme gönderebilirsiniz (email, sms vb.)
}
// Bildirimin alındığını PayTR sistemine bildir.
Response.Write("OK");
}
}
var request = require('request');
var crypto = require('crypto');
var express = require('express');
var app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
var merchant_id = 'MAGAZA_NO';
var merchant_key = 'XXXXXXXXXXX';
var merchant_salt = 'YYYYYYYYYYY';
app.get("/send", function (req, res) {
// Mağaza sipariş no: Satış işlemi için belirlediğiniz benzersiz sipariş numarası
var merchant_oid = '';
// Eşsiz transfer numarası
var trans_id = '';
// Satıcıya yapılacak ödeme tutarı: Satıcıya bu sipariş için ödenecek tutarın 100 ile çarpılmış hali (Örnek: 50.99 TL için 5099)
var submerchant_amount = '';
// Toplam ödeme tutarı: Siparişe ait toplam ödeme tutarının 100 ile çarpılmış hali (Örnek: 50.99 TL için 5099)
var total_amount = '';
// Satıcının banka hesabı için ad soyad/ünvanı
var transfer_name = '';
// Satıcının banka hesabı IBAN numarası
var transfer_iban = '';
var hash_str = merchant_id + merchant_oid + trans_id + submerchant_amount + total_amount + transfer_name + transfer_iban;
var paytr_token = crypto.createHmac('sha256', merchant_key).update(hash_str + merchant_salt).digest('base64');
var options = {
'method': 'POST',
'url': 'https://www.paytr.com/odeme/platform/transfer',
'headers': {
'Content-Type': 'application/x-www-form-urlencoded'
},
form: {
'merchant_id': merchant_id,
'merchant_oid': merchant_oid,
'trans_id': trans_id,
'submerchant_amount': submerchant_amount,
'total_amount': total_amount,
'transfer_name': transfer_name,
'transfer_iban': transfer_iban,
'paytr_token': paytr_token,
}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
var res_data = JSON.parse(body);
if (res_data.status == 'success') {
/*
Başarılı yanıt örneği:
{"status":"success", "merchant_amount":"5", "submerchant_amount":"92", "trans_id":"45ABT34", "reference":"12SF45" }
Başarısız yanıt örneği:
{"status":"error", "err_no":"010", "err_msg":"toplam transfer tutarı kalan tutardan fazla olamaz"}
*/
res.send(res_data);
} else {
res.end(response.body);
}
});
});
app.post("/callback", function (req, res) {
var callback = req.body;
var trans_ids = callback.trans_ids;
var trans_ids = trans_ids.replace('\\', '');
// POST değerleri ile hash oluştur.
var paytr_token = crypto.createHmac('sha256', merchant_key).update(trans_ids + merchant_salt).digest('base64');
// Oluşturulan hash'i, paytr'dan gelen post içindeki hash ile karşılaştır (isteğin paytr'dan geldiğine ve değişmediğine emin olmak için)
if (paytr_token != callback.hash) {
throw new Error("PAYTR notification failed: bad hash");
}
// ## trans_ids: Daha önce PayTR'a ilettiğiniz transfer taleplerinden tamamlanan transferlerin trans_id bilgilerini içeren JSON
// ## (trans_id bilgisi transfer talebi yaparken PayTR'a gönderdiğiniz her işlem için eşsiz değerdir)
// ## Örn: Burada trans_ids JSON verisini DECODE edip, çıktıdaki her bir trans_id ile veritabanınızdan transfer talebini tespit ederek ilgili kullanıcınıza bilgilendirme gönderebilirsiniz (email, sms vb.)
var processed_result = JSON.parse(trans_ids);
console.log(processed_result);
// Bildirimin alındığını PayTR sistemine bildir.
res.send("OK");
});
var port = 3200;
app.listen(port, function () {
console.log("Server is running. Port:" + port);
});