better-payment
Version:
Unified payment gateway library for Turkish payment providers
757 lines (745 loc) • 20.9 kB
text/typescript
import { f as PaymentProvider, g as PaymentProviderConfig, a as PaymentRequest, b as PaymentResponse, T as ThreeDSPaymentRequest, c as ThreeDSInitResponse, R as RefundRequest, d as RefundResponse, C as CancelRequest, e as CancelResponse, h as CheckoutFormRequest, i as CheckoutFormInitResponse, j as CheckoutFormRetrieveResponse, B as BinCheckResponse, k as BetterPayConfig, P as ProviderType } from './BetterPayConfig-Dwl6JEAi.mjs';
export { A as Address, s as BasketItem, p as BasketItemType, r as Buyer, o as Currency, q as PaymentCard, n as PaymentStatus, l as ProviderConfig, m as ProviderInstances } from './BetterPayConfig-Dwl6JEAi.mjs';
/**
* Common types used across the library
*/
interface PaymentCard {
cardHolderName: string;
cardNumber: string;
expireMonth: string;
expireYear: string;
cvc: string;
registerCard?: boolean | number;
}
interface Address {
contactName: string;
city: string;
country: string;
address: string;
zipCode?: string;
}
/**
* Subscription Types
*
* İyzico abonelik ödeme sistemi için type tanımları
*/
/**
* Abonelik durumları
*/
declare enum SubscriptionStatus {
ACTIVE = "ACTIVE",
PENDING = "PENDING",
CANCELED = "CANCELED",
EXPIRED = "EXPIRED",
UNPAID = "UNPAID"
}
/**
* Ödeme aralığı türleri
*/
declare enum PaymentInterval {
DAILY = "DAILY",
WEEKLY = "WEEKLY",
MONTHLY = "MONTHLY",
YEARLY = "YEARLY"
}
/**
* Abonelik müşteri bilgileri
*/
interface SubscriptionCustomer {
name: string;
surname: string;
email: string;
gsmNumber: string;
identityNumber: string;
billingAddress: Address;
shippingAddress?: Address;
}
/**
* Abonelik başlatma isteği
*/
interface SubscriptionInitializeRequest {
locale?: string;
conversationId?: string;
pricingPlanReferenceCode: string;
subscriptionInitialStatus: SubscriptionStatus.ACTIVE | SubscriptionStatus.PENDING;
customer: SubscriptionCustomer;
paymentCard: PaymentCard;
}
/**
* Abonelik başlatma yanıtı
*/
interface SubscriptionInitializeResponse {
status: 'success' | 'failure';
systemTime?: number;
errorCode?: string;
errorMessage?: string;
data?: {
referenceCode: string;
parentReferenceCode?: string;
pricingPlanReferenceCode: string;
customerReferenceCode: string;
subscriptionStatus: SubscriptionStatus;
trialDays?: number;
trialStartDate?: number;
trialEndDate?: number;
createdDate: number;
startDate: number;
endDate?: number;
};
}
/**
* Abonelik iptal isteği
*/
interface SubscriptionCancelRequest {
subscriptionReferenceCode: string;
}
/**
* Abonelik iptal yanıtı
*/
interface SubscriptionCancelResponse {
status: 'success' | 'failure';
systemTime?: number;
errorCode?: string;
errorMessage?: string;
data?: {
referenceCode: string;
subscriptionStatus: SubscriptionStatus;
};
}
/**
* Abonelik yükseltme isteği
*/
interface SubscriptionUpgradeRequest {
subscriptionReferenceCode: string;
newPricingPlanReferenceCode: string;
useTrial?: boolean;
resetRecurrenceCount?: boolean;
}
/**
* Abonelik yükseltme yanıtı
*/
interface SubscriptionUpgradeResponse {
status: 'success' | 'failure';
systemTime?: number;
errorCode?: string;
errorMessage?: string;
data?: {
referenceCode: string;
pricingPlanReferenceCode: string;
subscriptionStatus: SubscriptionStatus;
};
}
/**
* Abonelik detay sorgulama isteği
*/
interface SubscriptionRetrieveRequest {
subscriptionReferenceCode: string;
}
/**
* Abonelik detay sorgulama yanıtı
*/
interface SubscriptionRetrieveResponse {
status: 'success' | 'failure';
systemTime?: number;
errorCode?: string;
errorMessage?: string;
data?: {
referenceCode: string;
parentReferenceCode?: string;
pricingPlanReferenceCode: string;
pricingPlanName: string;
customerReferenceCode: string;
subscriptionStatus: SubscriptionStatus;
trialDays?: number;
trialStartDate?: number;
trialEndDate?: number;
createdDate: number;
startDate: number;
endDate?: number;
};
}
/**
* Kart güncelleme isteği (Checkout Form ile)
*/
interface SubscriptionCardUpdateRequest {
locale?: string;
conversationId?: string;
subscriptionReferenceCode: string;
callbackUrl: string;
}
/**
* Kart güncelleme yanıtı
*/
interface SubscriptionCardUpdateResponse {
status: 'success' | 'failure';
systemTime?: number;
errorCode?: string;
errorMessage?: string;
token?: string;
checkoutFormContent?: string;
tokenExpireTime?: number;
paymentPageUrl?: string;
}
/**
* Abonelik ürünü oluşturma isteği
*/
interface SubscriptionProductCreateRequest {
locale?: string;
conversationId?: string;
name: string;
description?: string;
}
/**
* Abonelik ürünü yanıtı
*/
interface SubscriptionProductResponse {
status: 'success' | 'failure';
systemTime?: number;
errorCode?: string;
errorMessage?: string;
data?: {
referenceCode: string;
name: string;
description?: string;
createdDate: number;
};
}
/**
* Fiyatlandırma planı oluşturma isteği
*/
interface PricingPlanCreateRequest {
locale?: string;
conversationId?: string;
productReferenceCode: string;
name: string;
price: number;
currency?: string;
paymentInterval: PaymentInterval;
paymentIntervalCount: number;
trialPeriodDays?: number;
recurrenceCount?: number;
}
/**
* Fiyatlandırma planı yanıtı
*/
interface PricingPlanResponse {
status: 'success' | 'failure';
systemTime?: number;
errorCode?: string;
errorMessage?: string;
data?: {
referenceCode: string;
productReferenceCode: string;
name: string;
price: number;
currency: string;
paymentInterval: PaymentInterval;
paymentIntervalCount: number;
trialPeriodDays?: number;
recurrenceCount?: number;
createdDate: number;
};
}
/**
* İyzico ödeme sağlayıcısı
*/
declare class Iyzico extends PaymentProvider {
private client;
constructor(config: PaymentProviderConfig);
/**
* İyzico status'ünü PaymentStatus'e çevir
*/
private mapStatus;
/**
* Genel request gönderme metodu
*/
private sendRequest;
/**
* Uygulama request'ini İyzico formatına çevir
*/
private mapToIyzicoRequest;
/**
* Checkout Form request'ini İyzico formatına çevir
*/
private mapToIyzicoCheckoutFormRequest;
/**
* Direkt ödeme (3D Secure olmadan)
*/
createPayment(request: PaymentRequest): Promise<PaymentResponse>;
/**
* 3D Secure ödeme başlat
*/
initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse>;
/**
* 3D Secure ödeme tamamla
*/
completeThreeDSPayment(callbackData: any): Promise<PaymentResponse>;
/**
* İade işlemi
*/
refund(request: RefundRequest): Promise<RefundResponse>;
/**
* İptal işlemi
*/
cancel(request: CancelRequest): Promise<CancelResponse>;
/**
* Ödeme sorgulama
*/
getPayment(paymentId: string): Promise<PaymentResponse>;
/**
* Checkout Form başlat
*/
initCheckoutForm(request: CheckoutFormRequest): Promise<CheckoutFormInitResponse>;
/**
* Checkout Form sonucunu sorgula
*/
retrieveCheckoutForm(token: string, conversationId?: string): Promise<CheckoutFormRetrieveResponse>;
/**
* ===================
* SUBSCRIPTION METHODS
* ===================
*/
/**
* Abonelik başlat (NON3D)
*/
initializeSubscription(request: SubscriptionInitializeRequest): Promise<SubscriptionInitializeResponse>;
/**
* Aboneliği iptal et
*/
cancelSubscription(request: SubscriptionCancelRequest): Promise<SubscriptionCancelResponse>;
/**
* Aboneliği yükselt/güncelle
*/
upgradeSubscription(request: SubscriptionUpgradeRequest): Promise<SubscriptionUpgradeResponse>;
/**
* Abonelik detaylarını getir
*/
retrieveSubscription(request: SubscriptionRetrieveRequest): Promise<SubscriptionRetrieveResponse>;
/**
* Abonelik kartı güncelle (Checkout Form ile)
*/
updateSubscriptionCard(request: SubscriptionCardUpdateRequest): Promise<SubscriptionCardUpdateResponse>;
/**
* Abonelik ürünü oluştur
*/
createSubscriptionProduct(request: SubscriptionProductCreateRequest): Promise<SubscriptionProductResponse>;
/**
* Fiyatlandırma planı oluştur
*/
createPricingPlan(request: PricingPlanCreateRequest): Promise<PricingPlanResponse>;
/**
* BIN sorgulama
*/
binCheck(binNumber: string): Promise<BinCheckResponse>;
}
interface PayTRCallbackData {
merchant_oid: string;
status: string;
total_amount: string;
hash: string;
failed_reason_code?: string;
failed_reason_msg?: string;
test_mode?: string;
payment_type?: string;
currency?: string;
payment_amount?: string;
merchant_id?: string;
}
/**
* PayTR ödeme sağlayıcısı
*/
declare class PayTR extends PaymentProvider {
private client;
private merchantId;
private merchantKey;
private merchantSalt;
constructor(config: PaymentProviderConfig & {
merchantId: string;
merchantSalt: string;
});
/**
* PayTR status'ünü PaymentStatus'e çevir
*/
private mapStatus;
/**
* Sepet itemlerini PayTR formatına çevir
*/
private convertBasketItems;
/**
* Direkt ödeme (PayTR'da iframe ile)
* NOT: PayTR direkt ödeme yerine iframe kullanır
*/
createPayment(request: PaymentRequest): Promise<PaymentResponse>;
/**
* 3D Secure ödeme başlat (iframe)
*/
initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse>;
/**
* 3D Secure ödeme tamamla
*/
completeThreeDSPayment(callbackData: PayTRCallbackData): Promise<PaymentResponse>;
/**
* İade işlemi
*/
refund(request: RefundRequest): Promise<RefundResponse>;
/**
* İptal işlemi (PayTR'da iade ile aynı)
*/
cancel(request: CancelRequest): Promise<CancelResponse>;
/**
* Ödeme sorgulama
* NOT: PayTR API'si ödeme sorgulama endpoint'i sunmuyor
* Callback data'yı kullanarak durum kontrol edilmeli
*/
getPayment(paymentId: string): Promise<PaymentResponse>;
}
interface Akbank3DSCallbackRequest {
/** Mağaza numarası */
MERCHANTID: string;
/** Terminal ID */
TERMINALID: string;
/** Sipariş numarası */
ORDERID: string;
/** 3D güvenlik seviyesi */
SECURE3DSECURITYLEVEL: string;
/** 3D Hash */
SECURE3DHASH: string;
/** İşlem tutarı */
AMOUNT: string;
/** Para birimi */
CURRENCY: string;
/** İşlem sonucu */
ProcReturnCode?: string;
/** Yanıt mesajı */
Response?: string;
/** MD status */
mdStatus?: string;
/** Cavv */
cavv?: string;
/** Eci */
eci?: string;
/** MD */
md?: string;
/** XID */
xid?: string;
}
interface AkbankConfig {
/** Mağaza numarası */
merchantId: string;
/** Terminal ID */
terminalId: string;
/** Store key (güvenlik anahtarı) */
storeKey: string;
/** 3D Store key */
secure3DStoreKey?: string;
/** Test modu */
testMode?: boolean;
}
/**
* Akbank Sanal POS sağlayıcısı
*/
declare class Akbank extends PaymentProvider {
private client;
private merchantId;
private terminalId;
private storeKey;
private secure3DStoreKey?;
constructor(config: PaymentProviderConfig & AkbankConfig);
/**
* Akbank status'ünü PaymentStatus'e çevir
*/
private mapStatus;
/**
* Form data oluştur
*/
private createFormData;
/**
* Direkt ödeme (3D Secure olmadan)
*/
createPayment(request: PaymentRequest): Promise<PaymentResponse>;
/**
* 3D Secure ödeme başlat
*/
initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse>;
/**
* 3D Secure ödeme tamamla
*/
completeThreeDSPayment(callbackData: Akbank3DSCallbackRequest): Promise<PaymentResponse>;
/**
* İade işlemi
*/
refund(request: RefundRequest): Promise<RefundResponse>;
/**
* İptal işlemi
*/
cancel(request: CancelRequest): Promise<CancelResponse>;
/**
* Ödeme sorgulama
*/
getPayment(paymentId: string): Promise<PaymentResponse>;
}
/**
* HTTP Request interface for framework-agnostic handling
*/
interface BetterPayRequest {
method: string;
url: string;
headers: Record<string, string>;
body?: any;
}
/**
* HTTP Response interface for framework-agnostic handling
*/
interface BetterPayResponse {
status: number;
headers: Record<string, string>;
body: any;
}
/**
* BetterPayHandler - Otomatik API endpoint'leri için merkezi handler
*
* Better-auth'tan ilham alınarak tasarlanmıştır. Tüm ödeme işlemlerini
* otomatik olarak HTTP endpoint'lerine çevirir.
*
* Desteklenen endpoint'ler:
* - POST /api/pay/:provider/payment -> createPayment()
* - POST /api/pay/:provider/payment/init-3ds -> initThreeDSPayment()
* - POST /api/pay/:provider/payment/complete-3ds -> completeThreeDSPayment()
* - POST /api/pay/:provider/refund -> refund()
* - POST /api/pay/:provider/cancel -> cancel()
* - GET /api/pay/:provider/payment/:id -> getPayment()
* - POST /api/pay/:provider/callback -> 3DS callback handler
* - GET /api/pay/health -> Health check
*
* @example
* ```typescript
* const betterPay = new BetterPay({ ... });
* const handler = new BetterPayHandler(betterPay);
*
* // Framework adapter kullanımı:
* // Next.js: toNextJsHandler(handler)
* // Express: toNodeHandler(handler)
* ```
*/
declare class BetterPayHandler {
private betterPay;
constructor(betterPay: BetterPay);
/**
* Ana request handler - tüm framework'ler için ortak
*/
handle(request: BetterPayRequest): Promise<BetterPayResponse>;
/**
* URL'den route bilgilerini parse et
*
* Pattern: /api/pay/:provider/:action
* Örnekler:
* - /api/pay/iyzico/payment
* - /api/pay/paytr/payment/init-3ds
* - /api/pay/iyzico/payment/123
*/
private parseRoute;
/**
* Action'a göre ilgili provider metodunu çağır
*/
private handleAction;
/**
* POST /api/pay/:provider/payment - Ödeme oluştur
*/
private handleCreatePayment;
/**
* POST /api/pay/:provider/payment/init-3ds - 3DS ödeme başlat
*/
private handleInitThreeDS;
/**
* POST /api/pay/:provider/payment/complete-3ds - 3DS ödeme tamamla
* POST /api/pay/:provider/callback - Provider callback (alias)
*/
private handleCompleteThreeDS;
/**
* POST /api/pay/:provider/refund - İade işlemi
*/
private handleRefund;
/**
* POST /api/pay/:provider/cancel - İptal işlemi
*/
private handleCancel;
/**
* GET /api/pay/:provider/payment/:id - Ödeme sorgula
*/
private handleGetPayment;
/**
* GET /api/pay/health - Health check
*/
private healthCheck;
/**
* Success response helper
*/
private successResponse;
/**
* Error response helper
*/
private errorResponse;
}
/**
* BetterPay - Merkezi ödeme yönetim sınıfı
*
* Config dosyası ile tüm payment provider'ları tek yerden yönetmenizi sağlar.
*
* @example
* ```typescript
* const betterPay = new BetterPay({
* providers: {
* iyzico: {
* enabled: true,
* config: {
* apiKey: 'your-api-key',
* secretKey: 'your-secret-key',
* baseUrl: 'https://sandbox-api.iyzipay.com'
* }
* },
* paytr: {
* enabled: true,
* config: {
* merchantId: 'your-merchant-id',
* merchantKey: 'your-merchant-key',
* merchantSalt: 'your-merchant-salt',
* baseUrl: 'https://www.paytr.com'
* }
* }
* },
* defaultProvider: 'iyzico'
* });
*
* // Kullanım şekilleri:
*
* // 1. Default provider kullanarak (defaultProvider: 'iyzico' olarak ayarlanmış)
* const result = await betterPay.createPayment({ ... });
*
* // 2. Belirli bir provider kullanarak (use metodu)
* const result = await betterPay.use('paytr').createPayment({ ... });
*
* // 3. Provider'a doğrudan erişim (önerilen yöntem)
* const iyzicoResult = await betterPay.iyzico.createPayment({ ... });
* const paytrResult = await betterPay.paytr.createPayment({ ... });
*
* // 4. Multi-provider kullanımı (aynı uygulamada farklı provider'lar)
* const payment1 = await betterPay.iyzico.initThreeDSPayment({ ... });
* const payment2 = await betterPay.paytr.initThreeDSPayment({ ... });
* ```
*/
declare class BetterPay {
private config;
private providers;
private defaultProvider?;
private _handler;
constructor(config: BetterPayConfig);
/**
* HTTP handler for framework integrations
*
* Use this with framework adapters to create automatic API endpoints:
*
* @example
* ```typescript
* // Next.js App Router
* import { toNextJsHandler } from 'better-pay/next-js';
* export const { GET, POST } = toNextJsHandler(betterPay.handler);
*
* // Express
* import { toNodeHandler } from 'better-pay/node';
* app.all('/api/pay/*', toNodeHandler(betterPay));
* ```
*/
get handler(): BetterPayHandler;
/**
* Provider'ları başlat
*/
private initializeProviders;
/**
* İyzico config validation
*/
private validateIyzicoConfig;
/**
* PayTR config validation
*/
private validatePayTRConfig;
/**
* Akbank config validation
*/
private validateAkbankConfig;
/**
* Belirli bir provider kullan
*/
use(providerType: ProviderType): PaymentProvider;
/**
* Default provider'ı getir
*/
private getDefaultProvider;
/**
* Aktif provider'ları listele
*/
getEnabledProviders(): ProviderType[];
/**
* Belirli bir provider'ın aktif olup olmadığını kontrol et
*/
isProviderEnabled(providerType: ProviderType): boolean;
/**
* Default provider ile ödeme oluştur
*/
createPayment(request: PaymentRequest): Promise<PaymentResponse>;
/**
* Default provider ile 3DS ödeme başlat
*/
initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse>;
/**
* Default provider ile 3DS ödeme tamamla
*/
completeThreeDSPayment(callbackData: any): Promise<PaymentResponse>;
/**
* Default provider ile iade yap
*/
refund(request: RefundRequest): Promise<RefundResponse>;
/**
* Default provider ile ödeme iptal et
*/
cancel(request: CancelRequest): Promise<CancelResponse>;
/**
* Default provider ile ödeme sorgula
*/
getPayment(paymentId: string): Promise<PaymentResponse>;
/**
* İyzico provider'ına doğrudan erişim
*
* @example
* ```typescript
* const result = await betterPay.iyzico.createPayment({ ... });
* const checkout = await betterPay.iyzico.initCheckoutForm({ ... });
* ```
*
* @throws Error if Iyzico provider is not enabled or configured
*/
get iyzico(): Iyzico;
/**
* PayTR provider'ına doğrudan erişim
*
* @example
* ```typescript
* const result = await betterPay.paytr.createPayment({ ... });
* ```
*
* @throws Error if PayTR provider is not enabled or configured
*/
get paytr(): PayTR;
/**
* Akbank provider'ına doğrudan erişim
*
* @example
* ```typescript
* const result = await betterPay.akbank.createPayment({ ... });
* const threeDSResult = await betterPay.akbank.initThreeDSPayment({ ... });
* ```
*
* @throws Error if Akbank provider is not enabled or configured
*/
get akbank(): Akbank;
}
export { Akbank, BetterPay, BetterPayConfig, BetterPayHandler, type BetterPayRequest, type BetterPayResponse, CancelRequest, CancelResponse, CheckoutFormInitResponse, CheckoutFormRequest, CheckoutFormRetrieveResponse, Iyzico, PayTR, PaymentProvider, PaymentProviderConfig, PaymentRequest, PaymentResponse, ProviderType, RefundRequest, RefundResponse, ThreeDSInitResponse, ThreeDSPaymentRequest };