Bir e-ticaret uzantısı geliştirirken, örneğin bir online mağaza, ücretli hizmetler veya danışmanlık gibi, kullanımı kolay bir ödeme kabul sistemi oluşturmanız gerekir.
Bu, "Payments" modülü kullanılarak uygulanabilir.
Bu modül herhangi bir online ödeme sistemiyle entegre edilebilir: PayPal, UKassa, banka ödeme sistemleri vb.
Bir ödeme oluşturmak için, sipariş oluşturulduktan sonra uzantınızın denetleyicisine aşağıdaki kodu ekleyin:
$amount = 500; // Ödeme miktarı. Kuruşlar kesirli kısmı olarak iletilir. $area = 'orderType'; // ödeme türü (sipariş veya hizmet kodu) $options = [ // İsteğe bağlı. Periyodik hizmetlerin ödenmesi durumunda, // eğer dönem uzantınızda saklanmıyorsa, // bu alan ödeme yapılan hizmetin son kullanma tarihini saklayabilir. 'time' => $months * 30 * 24 * 60 * 60, // İsteğe bağlı. Ödemenin açıklaması veya amacı. 'desc' => 'Sipariş açıklaması', // İsteğe bağlı. Geliştirilen uzantı tarafındaki sipariş kimliği veya kullanıcı kimliği. // Uzantınız tarafından ödemenin tanımlanması için kullanılabilir. 'code' => $orderId, // İsteğe bağlı. Başarılı ödeme sonrası kullanıcı nereye yönlendirilecek. // Eğer belirtilmezse, kullanıcı ödeme geçmişi sayfasına yönlendirilir. // https://domain.tld/payments?m=balance&n=history 'redirect' => cot_url('extension-code', ['m' => 'orders', 'id' => $orderId], '', true) ] cot_payments_create_order($area, $amount, $options);
$area
ve $options['code']
çifti, ödemenin benzersiz olarak tanımlanmasını sağlamalıdır, böylece uzantınız ödeme tamamlandığında otomatik olarak ücretli hizmeti etkinleştirebilir.
cot_payments_create_order()
fonksiyonu bir ödeme oluşturacak ve kullanıcıyı, yüklenmiş ödeme sistemlerinden birini seçip ödeme yapabileceği ödeme sayfasına yönlendirecektir.
Ödeme tamamlandıktan sonra, kullanıcı ödeme geçmişi sayfasına yönlendirilecek ve başarılı ödeme ya da hata hakkında bir mesaj görüntülenecektir.
Eğer $options['redirect']
parametresi ödeme oluşturulurken belirtilmişse, başarılı ödeme durumunda kullanıcı bu belirtilen URL'ye yönlendirilir.
Ödeme durumu "Paid" (Ödendi) olarak değiştiğinde, payments.payment.success kancası (hook) tetiklenir.
Uzantınız bu kancayı işleyerek ücretli hizmeti otomatik olarak etkinleştirmelidir. Kanca işleyiciye ödeme verilerini içeren bir dizi sağlanır. Bu, işlenen ödeme kaydını içeren cot_payments tablosundaki bir veri dizisidir.
Dikkat edilmesi gereken nokta, bu kancanın genellikle ödeme sisteminin ödeme bildirim web-hook'unu çağırdığı anda çalıştırılmasıdır. Bu istek, ödeme yapan kullanıcı tarafından değil, doğrudan ödeme sisteminin sunucusundan yapılır. Kullanıcının oturumu bu anda mevcut değildir. Bu nedenle, bu kancanın işleyicisi herhangi bir veri veya başlık çıktısı vermemeli ve yönlendirme yapmamalıdır.
Kullanıcıya herhangi bir bilgi göstermek için, standart yönlendirme yeterli değilse $options['redirect']
parametresini kullanabilirsiniz. Genellikle kullanıcı bu URL'ye yönlendirildiğinde ödeme zaten işlenmiş olur ve sonucu görüntüleyebilir.
Ödeme modülü entegrasyonunuzu test etmek için, ödeme yapmayan ancak başarılı bir ödeme simülasyonu yapan Nullbilling eklentisini kullanabilirsiniz.
Yeni bir ödeme sistemi eklemek için ilgili eklentiyi yükleyebilirsiniz. Eğer hazır bir eklenti yoksa, kendi eklentinizi yazabilirsiniz.
Böyle bir eklenti oluşturmayı ele alalım.
Eklenti, kendisini bir ödeme sistemi eklentisi olarak kaydetmelidir. Bunu yapmak için payments.billing.register kancasını işlemesi ve verilerini $cot_billings
dizisine eklemesi gerekir. Örneğin:
if ( Cot::$cfg['plugin']['myPaymentSystem']['on'] && !empty(Cot::$cfg['plugin']['myPaymentSystem']['apiKey']) && !empty(Cot::$cfg['plugin']['myPaymentSystem']['secret']) ) { $cot_billings['myPaymentSystem'] = [ 'plug' => 'myPaymentSystem', 'title' => Cot::$L['tbank_title'], 'icon' => Cot::$cfg['plugins_dir'] . '/myPaymentSystem/images/logo.png', ]; }
Eğer ödeme sistemi, ödeme bildirimlerini (web-hook) POST yöntemiyle gönderiyorsa, web-hook işleyicisi için XSS korumasını devre dışı bırakmalısınız. Aksi takdirde, Cotonti ödeme sisteminden gelen isteği kabul etmeyecektir. Bunu yapmak için input kanca işleyicisine aşağıdaki kodu ekleyin:
if ( isset($_GET['e']) && $_GET['e'] === 'myPaymentSystem' && isset($_GET['a']) && $_GET['a'] === 'notify' && $_SERVER['REQUEST_METHOD'] === 'POST' ) { define('COT_NO_ANTIXSS', 1); Cot::$cfg['referercheck'] = false; }
Ödeme bildirimi (web-hook) işleyicisinin çalışacağı $_GET
parametrelerini if koşuluna ekleyin.