order-payment
POST /api/{team}/gateway/order-payment
Bir sipariş açar. Bu istekte kart verisi gönderilmez ve çekim yapılmaz; yanıt, siparişin ödeneceği gateway ödeme sayfasının adresini (order.checkout_url) döner. Ödeme sayfasındaki ödemeler 3D Secure ile işlenir. Akış: Sipariş Ödemesi rehberi.
Çalışma alanının planı siparişleri kapsamıyorsa istek 403 ile reddedilir.
Kimlik doğrulama
X-Api-Key, X-Signature, Content-Type: application/json. Ayrıntılar: Kimlik Doğrulama ve İmza.
İstek
{
"order": {
"channel_token": "6f1c2e7a-4b3d-4c8e-9a61-2f5d7b0c3e14",
"channel_reference": "SIP-10233",
"success_url": "https://magazam.com/tesekkurler",
"cancel_url": "https://magazam.com/sepet",
"items": [
{ "channel_reference": "KAHVE-MAKINESI" },
{ "channel_reference": "KAHVE-500G", "quantity": 2, "unit_amount": "180.00" },
{ "channel_reference": "HEDIYE-PAKETI", "name": "Hediye paketi", "unit_amount": "25.00" }
]
},
"customer": {
"channel_reference": "musteri-88",
"firstname": "Ahmet",
"lastname": "Yılmaz",
"phone": "05551112233",
"address": "Kızılırmak Mah. Dumlupınar Blv. No:3",
"district": "Çankaya",
"province": "Ankara",
"country": "Türkiye"
}
}
order
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
channel_token | string (UUID) | evet | Çalışma alanınıza ait kanalın token'ı. |
channel_reference | string | evet | Siparişin sizin sisteminizdeki kimliği. En çok 255 karakter, en az bir rakam. |
success_url | string | evet | Başarılı ödemeden sonra dönüş POST'unun gönderileceği adres. http/https, en çok 2048 karakter. |
cancel_url | string | hayır | Ödeme sayfasında vazgeçme bağlantısı olarak verilen adres. http/https, en çok 2048 karakter. |
items | array | evet | En az bir kalem. |
description | string | hayır | Ödeme sayfasına aktarılan açıklama. En çok 255 karakter. |
currency | string | hayır | TRY, USD, EUR, GBP. Gönderilmezse TRY. |
payment_provider_token | string (UUID) | hayır | Siparişin ödeneceği ödeme hesabı. Hesabın 3D ödemeyi desteklemesi gerekir. Gönderilmezse ödeme sırasında ödeme hesabı seçimi uygulanır. |
Sipariş tutarı gönderilmez; kalemlerden hesaplanır.
order.items[]
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
channel_reference | string | evet | Ürünün sizin sisteminizdeki kimliği. Aynı kanalda save-product ile kaydedilmiş bir ürüne karşılık geliyorsa boş bırakılan alanlar üründen alınır. |
name | string | koşullu | Ürün katalogda yoksa zorunlu. |
quantity | integer | hayır | En az 1. Gönderilmezse 1. |
unit_amount | string | koşullu | Birim fiyat (KDV dahil), tutar biçiminde. Ürün katalogda yoksa zorunlu. |
tax_rate | number | hayır | Fiyatın içindeki KDV oranı, 0–100, en çok iki ondalık. |
Kalemde gönderilen name, unit_amount ve tax_rate yalnızca bu sipariş için geçerlidir; katalogdaki ürünü değiştirmez.
customer
Zorunlu. Alanlar: customer nesnesi.
SDK örnekleri
- PHP
- Node.js
- Python
- Java
- cURL
use Gurmehub\Odemehub\Request\{OrderItem, OrderPayment};
$order = $client->orderPayment(new OrderPayment(
channelReference: 'SIP-10233',
successUrl: 'https://magazam.com/tesekkurler',
cancelUrl: 'https://magazam.com/sepet',
customer: $customer, // Customer nesnesi, bkz. secure-payment
items: [
new OrderItem(channelReference: 'KAHVE-MAKINESI'),
new OrderItem(channelReference: 'KAHVE-500G', quantity: 2, unitAmount: '180.00'),
new OrderItem(channelReference: 'HEDIYE-PAKETI', name: 'Hediye paketi', unitAmount: '25.00'),
],
));
header('Location: '.$order->checkoutUrl);
const order = await client.orderPayment({
channelReference: 'SIP-10233',
successUrl: 'https://magazam.com/tesekkurler',
cancelUrl: 'https://magazam.com/sepet',
customer,
items: [
{ channelReference: 'KAHVE-MAKINESI' },
{ channelReference: 'KAHVE-500G', quantity: 2, unitAmount: '180.00' },
{ channelReference: 'HEDIYE-PAKETI', name: 'Hediye paketi', unitAmount: '25.00' },
],
});
res.redirect(order.checkoutUrl);
from odemehub.request import OrderItem, OrderPayment
order = client.order_payment(OrderPayment(
channel_reference="SIP-10233",
success_url="https://magazam.com/tesekkurler",
cancel_url="https://magazam.com/sepet",
customer=customer,
items=[
OrderItem(channel_reference="KAHVE-MAKINESI"),
OrderItem(channel_reference="KAHVE-500G", quantity=2, unit_amount="180.00"),
OrderItem(channel_reference="HEDIYE-PAKETI", name="Hediye paketi", unit_amount="25.00"),
],
))
return redirect(order.checkout_url)
import com.odemehub.request.OrderItem;
import com.odemehub.request.OrderPayment;
import java.util.List;
var order = client.orderPayment(OrderPayment.builder()
.channelReference("SIP-10233")
.successUrl("https://magazam.com/tesekkurler")
.cancelUrl("https://magazam.com/sepet")
.customer(customer)
.items(List.of(
OrderItem.of("KAHVE-MAKINESI"),
OrderItem.builder().channelReference("KAHVE-500G").quantity(2).unitAmount("180.00").build(),
OrderItem.builder().channelReference("HEDIYE-PAKETI").name("Hediye paketi").unitAmount("25.00").build()
))
.build());
return "redirect:" + order.getCheckoutUrl();
BODY='{"order":{"channel_token":"6f1c2e7a-4b3d-4c8e-9a61-2f5d7b0c3e14","channel_reference":"SIP-10233","success_url":"https://magazam.com/tesekkurler","cancel_url":"https://magazam.com/sepet","items":[{"channel_reference":"KAHVE-MAKINESI"},{"channel_reference":"KAHVE-500G","quantity":2,"unit_amount":"180.00"},{"channel_reference":"HEDIYE-PAKETI","name":"Hediye paketi","unit_amount":"25.00"}]},"customer":{"channel_reference":"musteri-88","firstname":"Ahmet","lastname":"Yılmaz","email":"[email protected]","phone":"05551112233","address":"Kızılırmak Mah. Dumlupınar Blv. No:3","district":"Çankaya","province":"Ankara","country":"Türkiye"}}'
SIGNATURE=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$ODEMEHUB_API_SECRET" | sed 's/^.* //')
curl -X POST "https://odeme.gurmehub.com/api/$ODEMEHUB_TEAM/gateway/order-payment" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-Api-Key: $ODEMEHUB_API_KEY" \
-H "X-Signature: $SIGNATURE" \
--data-raw "$BODY"
Yanıt
Katalogda KAHVE-MAKINESI ürününün fiyatı 450.00 iken:
{
"result": {
"successful": true,
"message": null
},
"order": {
"token": "3b7e1f20-5c4a-4d8e-9f1b-7a6c5d4e3f21",
"channel_token": "6f1c2e7a-4b3d-4c8e-9a61-2f5d7b0c3e14",
"channel_reference": "SIP-10233",
"amount": "835.00",
"currency": "TRY",
"status": "open",
"checkout_url": "https://odeme.gurmehub.com/checkout/order/3b7e1f20-5c4a-4d8e-9f1b-7a6c5d4e3f21"
},
"customer": {
"channel_reference": "musteri-88"
}
}
| Alan | Tip | Açıklama |
|---|---|---|
order.token | string | Siparişin token'ı. |
order.channel_token | string | Siparişin kanalı. |
order.channel_reference | string | Gönderdiğiniz channel_reference. |
order.amount | string | Kalemlerin toplamı (unit_amount × quantity), iki ondalıklı. |
order.currency | string | Para birimi. |
order.status | string | open (ödenmedi) ya da paid. Oluşturulduğunda open. |
order.checkout_url | string | Siparişin ödeneceği gateway ödeme sayfası. |
customer.channel_reference | string | Müşterinin channel_reference değeri. |
Ödemenin sonucu bu yanıtta yoktur. Başarılı ödemeden sonra success_url adresine dönüş POST'u gelir; sonuç retrieve-payment ile alınır.
HTTP durum kodları
| Kod | Durum |
|---|---|
200 | Sipariş açıldı. |
401 | API anahtarı ya da imza geçersiz. |
403 | Çalışma alanı işlem yapamıyor ya da planı siparişleri kapsamıyor. |
422 | Doğrulama hatası. |
Hatalar
| Alan | Mesaj |
|---|---|
order.items | Sipariş en az bir kalem içermelidir. |
order.items.{i}.channel_reference | "<referans>" bu kanalda tanımlı bir ürün değil. Ürünü panelden ekleyin ya da kalemi name ve unit_amount ile gönderin. |
order.items.{i}.unit_amount | Birim tutar 100 veya 100.10 biçiminde olmalıdır; kuruş basamağı noktayla ayrılır. |
order.success_url | Başarı adresi zorunludur; ödeme sonrası müşteri oraya yönlendirilir. |
order.channel_reference | Referans en az bir rakam içermelidir (ör. SIP1); bankaya giden sipariş numarası bu rakamlarla kurulur. |
order.payment_provider_token | Bu ödeme hesabı 3D ödeme almıyor; sipariş açılamaz. / Çalışma alanınızın varsayılan ödeme hesabı 3D ödeme almıyor; sipariş açılamaz. |
order.payment_provider_token | Ödeme hesabı belirtilmedi ve çalışma alanınızın varsayılan ödeme hesabı yok. |