Sipariş Ödemesi
order-payment kart verisi almaz. Sipariş açılır ve ödeme, gateway'in ödeme sayfasında (order.checkout_url) alınır. Ödeme sayfasındaki ödemeler 3D Secure ile işlenir.
- Sipariş açma — Sunucunuz
order-paymentçağırır. Yanıtorder.tokenveorder.checkout_urldöner; çekim yapılmaz. - Yönlendirme — Tarayıcıyı
order.checkout_urladresine yönlendirirsiniz. - Dönüş — Ödeme başarılı olursa tarayıcı
success_urladresinize bir formPOSTeder:transaction_token,channel_reference(siparişin),successful. Bkz. Dönüş POST'u. - Sonuç — Sunucunuz
transaction_tokenileretrieve-paymentçağırır.
Ön koşullar
- Çalışma alanının planı siparişleri kapsamalıdır; kapsamıyorsa
403. - Siparişin ödeneceği hesap (gönderilen
payment_provider_tokenya da varsayılan hesap) 3D ödemeyi desteklemelidir; desteklemiyorsa422.
1. Sipariş açma
Kalemler ürünleri channel_reference ile adlandırır. Aynı kanalda save-product ile kaydedilmiş bir ürünün boş bırakılan name, unit_amount ve tax_rate değerleri katalogdan alınır. Katalogda olmayan bir kalem için name ve unit_amount zorunludur. Sipariş tutarı gönderilmez; kalemlerden hesaplanıp order.amount olarak döner.
- PHP
- Node.js
- Python
- Java
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,
items: [
new OrderItem(channelReference: 'KAHVE-MAKINESI'),
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: '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="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("HEDIYE-PAKETI").name("Hediye paketi").unitAmount("25.00").build()
))
.build());
return "redirect:" + order.getCheckoutUrl();
2–3. Ödeme sayfası ve dönüş
| Olay | Davranış |
|---|---|
| Ödeme başarılı | Tarayıcı success_url adresine dönüş formunu POST eder. |
| Ödeme başarısız | success_url adresine bir şey gönderilmez; tarayıcı checkout_url?attempt={transaction.token} adresine döner. |
cancel_url | Ödeme sayfasında vazgeçme bağlantısı olarak verilir. Gateway bu adrese istek göndermez. |
Dönüş formundaki channel_reference, siparişin channel_reference değeridir (SIP-10233).
4. Sonuç
Dönüşteki transaction_token ile retrieve-payment çağrılır; akış Secure ödeme ile aynıdır. Sipariş durumu yalnızca bu yanıttaki result.successful ile değiştirilir.
order.status (open / paid) yalnızca order-payment yanıtında döner; siparişi sorgulayan bir uç yoktur.
İade ve iptal
Sipariş ödemesi retrieve-payment ile alınan transaction.token üzerinden refund-payment ve cancel-payment ile geri verilir.