Better Payment
Bankalar

Kuveyt Türk

Kuveyt Türk Sanal POS (KT Pay Gate) entegrasyon referansı.

Kuveyt Türk'ün KT Pay Gate JSON API'sini kullanır. Her istek bir hashData imzası taşır: base64(HMAC-SHA512(alanlar + hashPassword, hashPassword)); burada hashPassword, base64(SHA1(şifre)) değeridir.

3D Secure → Provision → iade akışı henüz uçtan uca doğrulanmadı: Kuveyt Türk dokümanındaki ortak test mağazası ödemeleri reddediyor. İstek imzaları KT Pay Gate test ortamında doğrulandı. Canlıya geçmeden önce küçük bir tutarla test edin.

Yapılandırma

import { betterPayment, kuveytturk } from 'better-payment';

const payment = betterPayment({
  providers: {
    kuveytturk: kuveytturk({
      merchantId: process.env.KUVEYTTURK_MERCHANT_ID!,
      customerId: process.env.KUVEYTTURK_CUSTOMER_ID!,
      username: process.env.KUVEYTTURK_USERNAME!,
      password: process.env.KUVEYTTURK_PASSWORD!,
      // paymentType?: number (default 1; required by the API)
      // baseUrl: defaults from mode (boatest.kuveytturk.com.tr / sanalpos.kuveytturk.com.tr)
    }),
  },
});

merchantId ve customerId Sanal POS başvurunuz onaylandığında gelir. username ve password, Kuveyt Türk kurumsal panelinde (Yönetim → Kullanıcı İşlemleri) API rolüyle oluşturduğunuz kullanıcıya aittir.

paymentId sipariş numaranızdır: verdiğiniz conversationId ya da üretilen bir numara.

3D Secure

KT Pay Gate yalnızca 3D Secure ödeme alır; createPayment() NOT_SUPPORTED fırlatır.

const init = await payment.kuveytturk.initThreeDSPayment({
  ...paymentRequest,
  conversationId: 'ORDER123',
  callbackUrl: 'https://yoursite.com/api/pay/kuveytturk/payment/complete-3ds',
  // failUrl?: string (defaults to callbackUrl)
});
// init.threeDSHtmlContent is the bank's card verification page

İstekte buyer.ip, buyer.email ve Türkiye'ye ait bir buyer.gsmNumber olmalıdır. Callback adresleri & içeremez. Para birimleri: TRY, USD ve EUR; taksit: 1 ile 12 arası.

Kart doğrulandıktan sonra Kuveyt Türk sonucu callbackUrl adresine POST eder:

const result = await payment.kuveytturk.completeThreeDSPayment(callbackBody);

Callback imzalı değildir, bu yüzden tek başına asla güvenilmez:

  • Success=True içermeyen callback başarısız olur; MD, OrderId ve MerchantOrderId içermeyen callback INVALID_HASH olarak reddedilir;
  • sipariş bankada sorgulanır ve bankanın OrderId değeri callback ile eşleşmelidir, aksi halde INVALID_HASH olarak reddedilir;
  • kart, bankada kayıtlı tutar kullanılarak Provision ile tahsil edilir.

Ödeme yalnızca Provision başarılı olduğunda success olur. paymentId ve conversationId yalnızca sipariş bankada doğrulandıktan sonra doldurulur; bu yüzden başarısız bir sonuç hiçbir zaman callback'ten alınan bir sipariş numarası taşımaz.

İade, iptal ve durum sorgusu

await payment.kuveytturk.cancel({ paymentId: 'ORDER123', ip: '1.2.3.4' });                               // Cancel
await payment.kuveytturk.refund({ paymentId: 'ORDER123', price: '50.00', currency: 'TRY', ip: '1.2.3.4' }); // Drawback / PartialDrawback
const status = await payment.kuveytturk.getPayment('ORDER123');                                          // GetTransactions
// status: 'success', 'cancelled' (fully cancelled or refunded), 'failure'

cancel() ödemeyi aynı gün, gün sonundan önce iptal eder. Gün sonundan sonra refund() kullanın: tutarın tamamı Drawback, daha düşük bir tutar PartialDrawback olarak gönderilir.

Kuveyt Türk için BIN ve taksit sorgusu desteklenmez: binCheck() ve installmentInfo() NOT_SUPPORTED fırlatır. Ödeme isteğinde installment gönderin ve paidPrice değerini anlaşmalı oranlarınızdan hesaplayın.

Bu sayfada