Extension:DonationInterface/tr

DonationInterface ödeme formları sunar ve çeşitli ödeme ağ geçitleri üzerinden ödemeleri toplamak ve izlemek için para toplama mekanizmaları sağlar.

Genel bakış
DonationInterface uzantısı tarafından yapılan işin çoğu ödeme ağ geçitleriyle iletişim içindedir. Ayrıca, bağış kabul etmek için kullanıcıya dönük bir form katmanı sağlıyoruz.

Yapılandırma
LocalSettings.php ile aşağıdaki satırı ekleyin:

Ardından, etkinleştirilmesini istediğiniz ağ geçitlerini tanımlayın.

Örneğin, aşağıdaki tüm mevcut ağ geçitlerini ve uzantıları etkinleştirir (YAPILACAKLAR: Belge varsayılanları ve güncelleme.):

Bundan sonra YAPILACAKLAR, kullanmayı düşündüğünüz her ağ geçidi için hesap bilgilerini tanımladığınızdan emin olun, örneğin:

Önemli Not:

DonationInterface özel bir şekilde küreselleri arar.

Bir ağ geçidi tarafından kullanılan herhangi bir DonationInterface küresel, ya o ağ geçidine özgü bir değer ya da tüm uzantı için varsayılan değer atanabilir (her ikisinin de mevcut olduğu yerlerde özellikler varsayılanı geçersiz kılar).

Ağ geçidi küreselleri için uzantı çapında bir varsayılan atamak için, global değişken adındaki ağ geçidi önekini "wgDonationInterface" olarak değiştirin.

Örneğin: payflow pro ağ geçidi yerine tüm DonationInterface uzantısı için syslogging'i varsayılan olarak açmak için şunu değiştirin:

bunun için:

Ağ geçidine özel küreseller ile kapatmadığınız sürece artık syslog tüm ağ geçitleri için etkinleştirilecektir.

Ek yapılandırma
Özel bağış filtreleme kuralları oluşturmak için LocalSettings.php dosyanızda $wgCustomFiltersRefRules ve $wgCustomFiltersSrcRules küresel değişkenlerini ayarlayın.

Bunlar, normal ifade kalıplarını risk puanı sayılarıyla eşleştiren ilişkilendirilebilir dizilere ayarlanmalıdır, örneğin:

LocalSettings.php'de Küreselleri Tanımlayın
Geçersiz kılmak için daha birçok küresel mevcut olsa da, DonationInterface'in gerçekten çalışmasını istiyorsanız aşağıdakilerin LocalSettings'de tanımlanması gerekir.

Küresel değişkenler DonationInterface.php'de tanımlanmıştır.

TODO: update

Kod
Çok genel konuşursak, bir bağışı tamamlama süreci şu şekildedir:


 * Bağışçı, belirli bir ödeme ağ geçidine zaten bağlı olan bir bağış formuna gönderilir. Bu form, GatewayForm sınıfından gelen bir sınıfın ağ geçidine özgü listelenmemiş özel sayfası tarafından kontrol edilecektir.
 * Genişletilmiş GatewayForm sınıfı, ağ geçidi bağdaştırıcısını başlatacaktır. Yapım aşamasında, ağ geçidi bağdaştırıcısı, $wgRequest içindeki tüm ilgili verileri toplar, normalleştirir ve doğrular. Tüm ağ geçitleri, bu görevi gerçekleştirmek için aynı sınıf olan DonationData'yı kullanır. Bunu yapmak, kimin istediği veya nereden geldiğine bakılmaksızın tüm verilerin aynı normalleştirme ve doğrulama süreçlerine tabi olduğu anlamına gelir.
 * Denetleyici GatewayForm alt sınıfı, daha sonra kullanıcının bağış sürecinde nerede olduğunu belirlemek için ağ geçidi bağdaştırıcısını kullanacaktır ve uygunsa (doğrulama hatası yok, tüm veriler mevcut, düzenleme anahtarı veya oturumda tuhaflık yok, bu tür şeyler) bağış sürecindeki bir sonraki adımı atmak için uzak ödeme sunucularıyla etkileşimde bulunmak için aynı ağ geçidi adaptörünü kullanın. Her ödeme ağ geçidinin kendi kuralları olduğundan (ve bazı durumlarda, diğer ağ geçitlerinin herhangi birindeki başka hiçbir şeye doğrudan benzemeyen tamamen farklı işlem türleri), bunların tümünü dahili olarak sıralamak adaptöre bağlıdır ve işlevselliği yalnızca kontrol nesnesine, tüm olası bağdaştırıcı nesnelerinde aşağı yukarı evrensel görünecek şekilde maruz bırakır.
 * Ağ geçidi adaptörünün uzaktan ödeme ağ geçidi ile bir veya daha fazla işlem gerçekleştirmesini sağladıktan sonra, kontrol eden nesne ne olduğunu belirlemek için ağ geçidini kullanır ve olası bağışçıya uygun sonuçları görüntüler. Bu "Teşekkür ederiz" sayfası, gönderilen formda görüntülenen ve kullanıcıdan anlamlı bir şekilde tekrar denemesini isteyen bir hata veya daha ölümcül bir hata sayfası olabilir.

GatewayAdapter sınıfı
(DonationInterface/gateway_common/gateway.adapter.php) - Bu, genel bir ağ geçidinin yapması gereken her şeyle ilgilenen soyut bir sınıftır. Ayrıca, bir ağ geçidinin ihtiyaç duyduğu herhangi bir özelliği tanımlayamazsanız, değerli bir şey yapabilmek için size oldukça yüksek sesle bağırması gerekiyordu.

GatewayForm
(DonationInterface/gateway_common/GatewayForm.php) - UnlistedSpecialPage genişleten bir sınıf. This will take care of all the not-gateway-specific functionality necessary to present a donation form to a user, and get the results. Of particular interest are the mechanisms for displaying the requested form (or not), handling some of the more universal aspects of form validation, and fetching data that could be used by the specified forms (as in, a list of countries and their codes for a country drop-down).

Classes that inherit from these will be specific to a particular payment gateway. As such, they will be located in a folder named something like DonationInterface/[name]_gateway/.

Most adapters will implement GatewayForm for two routes: the initial payment form, and a result switcher page.

The initial payment form is responsible for rendering a form with inputs for the mandatory data to be collected. Alternatively, some gateways such as GlobalCollect will render an iframed form hosted by the payment processor, and others such as PayPal and Amazon will transparently redirect to the processor unless the donation information (currency and amount) are invalid and must be corrected.

The result switcher is usually not responsible for confirming payment or performing further authorization, it simply routes the donor to either the Thank You or Failure pages, depending on approximate responses from the processor.

DonationData class
(DonationInterface/gateway_common/DonationData.php) - This class is intended to handle everything that we are likely to want to do with Donation Data. It should load the data in a consistent way from any appropriate source (including a test), saves relevant Contribution Tracking data, generates data we always need to generate (like order IDs), normalizes everything, and hands it back to the gateway. Classes inheriting from GatewayAdapter will instantiate a DonationData class on creation. The GatewayAdapter child classes should only ever use data that has come through the DonationData class. It also handles edit tokens.

DataValidator
All data is first normalized by DonationData, and is then validated. If data fails validation, all processing is halted and the donor is redirected back to the form where they can correct any errors. Messages are displayed to guide the user through the corrections. TODO: make messages human-readable, attach to fields rather than pop-up, etc.

The gateway adapter is consulted for some of these validations, for example a lower and upper threshold for valid donation amounts, and accepted currencies.

Defining A New Gateway Adapter
GatewayAdapter extends the GatewayType interface. TODO: Here is a quick guide to defining the functions in GatewayType.

Testing
Unit tests can be found in the tests directory of the DonationInterface extension.

To run unit tests go to the mediawiki-core directory, then under tests/phpunit:

Composer
Whenever  changes, you must run   to refresh the contents of vendor/.

For WMF production, vendor is deployed on the "deployment" branch as a git submodule. You must  the package ".git" directories when committing new packages, otherwise they will be treated as misshapen, nested submodules and you don't want to go there.

Roadmap
Some things we want to do:


 * Decouple presentation layer from controllers and payments backend (✅)
 * Kill RapidHTML and use a mainline templating engine (✅)
 * Consolidate forms into a single universal form, with boolean params that control block visibility and available features: (✅)
 * Decouple payment processing from the MediaWiki framework, so it can be used as a standalone library
 * Provide access to the payments library inside of Drupal, to enable refunds, cancellation, and status retrieval from CiviCRM