İçeriğe geç
Better Payment
Sağlayıcılar

Yapı Kredi

0.12.0 sürümünde eklendi

Yapı Kredi sanal POS (Posnet XML) entegrasyon referansı.

Yapı Kredi Posnet XML API'sini kullanır. 3D Secure, Posnet OOS üzerinden çalışır: kart oosRequestData servisine gönderilir, bankanın şifreli verisi 3D servisine POST edilir, sonuç oosResolveMerchantData ile çözülür ve oosTranData ile tahsil edilir. İkisi de bir MAC ile imzalanır: base64(SHA256(XID;tutar;para birimi;üye işyeri no;base64(SHA256(encKey;terminal no)))).

Yapılandırma

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

const payment = betterPayment({
  providers: {
    yapikredi: yapikredi({
      merchantId: process.env.YAPIKREDI_MERCHANT_ID!,
      terminalId: process.env.YAPIKREDI_TERMINAL_ID!,
      posnetId: process.env.YAPIKREDI_POSNET_ID!,
      encKey: process.env.YAPIKREDI_ENC_KEY!,
      // acceptedMdStatuses?: string[] (default ['1'])
      // baseUrl: defaults from mode (setmpos.ykb.com / posnet.yapikredi.com.tr)
    }),
  },
});

Sipariş numarası (conversationId) harf, rakam veya _ içerir: 3D Secure ödemelerde en fazla 20 (20 karakterlik XID olarak gönderilir), 3D'siz satışlarda en fazla 24 karakter; soldan sıfırla tamamlanır. Başarılı bir ödeme paymentId olarak bankanın host log key değerini döndürür; refund() ve cancel() bu değeri alır.

Doğrudan ödeme (3D'siz)

const result = await payment.yapikredi.createPayment({ ...paymentRequest, conversationId: 'ORDER123' });
// result.paymentId is the host log key

3D Secure

const init = await payment.yapikredi.initThreeDSPayment({
  ...paymentRequest,
  conversationId: 'ORDER123',
  callbackUrl: 'https://yoursite.com/payment/yapikredi/return',
});
// init.threeDSHtmlContent auto-submits the bank's encrypted data to its 3D service

Yapı Kredi callbackUrl adresine BankPacket, MerchantPacket ve Sign alanlarını POST eder. MAC sipariş numaranızı, tutarı ve para birimini kapsar; callback bunları yalnızca şifreli taşıdığı için ödemeyi kendi kayıtlarınızdaki siparişle tamamlayın. Kendi değerleriniz geçerli olsun diye önce callback'i yayın:

const result = await payment.yapikredi.completeThreeDSPayment({
  ...callbackBody,
  orderId: order.id,
  amount: order.total, // as in the payment request, e.g. '1.20'
  currency: 'TRY',
});

Bu yüzden Yapı Kredi callback'leri handler'ın callback route'u ile değil, kendi route'unuzda tamamlanır. Sonuç bankayla doğrulanır:

  • çözülen XID, tutar ve para birimi siparişinizle aynı olmalı ve bankanın cevaptaki MAC'i (mdStatus;xid;amount;currency;merchantId;firstHash) tutmalıdır, aksi halde INVALID_HASH olarak reddedilir;
  • kart yalnızca mdStatus kabul edilen bir değerse (varsayılan olarak yalnızca 1; bkz. acceptedMdStatuses) oosTranData ile tahsil edilir ve sonucu bankanın cevabı belirler. Tahsilat cevabındaki MAC (hostlogkey;xid;...) tutmazsa sonuç pending olur: getPayment() ile kontrol edin.

paymentId ve conversationId yalnızca bankanın onayladığı bir ödemede doldurulur.

İade ve iptal

await payment.yapikredi.refund({ paymentId: hostLogKey, price: '50.00', currency: 'TRY', ip: '1.2.3.4' }); // return
await payment.yapikredi.cancel({ paymentId: hostLogKey, ip: '1.2.3.4' });                               // reverse
const status = await payment.yapikredi.getPayment('ORDER123'); // agreement, by order id

getPayment(), bankanın agreement sorgusu gibi sizin sipariş numaranızı alır: önce 3D'siz sipariş numarasını, sonra 3D Secure numarasını (TDS_ + XID) dener. Başarılı bir satış success, siparişte başarılı bir iptal veya iade varsa cancelled, başarılı satışı olmayan bir sipariş failure döner.

BIN ve taksit sorgusu desteklenmez: Yapı Kredi'de bu servisler yoktur. binCheck() ve installmentInfo() NOT_SUPPORTED fırlatır.