Tässä keskustelunavaus kotimaiselle Drupal-foorumillemme:
Drupal Groupsin puolella kyseltiin kotimaisten pankkiliittymien saatavuutta. En ole törmännyt valmiisiin moduuleihin, ainakaan avoimena koodina.
Olen ollut aikoinaan toteuttamassa pankkikoodia webskasovelluksiin. Mainitsin viime syksyn drupal.fi-käynnistyskeskustelussa, että nämähän voisi toteuttaa Drupaliin moduuleina. Voisin olla halukas osallistumaan näiden toteutusprojektiin jossakin muodossa. En todennäköisesti voi osallistua projektiin kuitenkaan toteuttajana, koska tämä voi aiheuttaa ongelmia aiempien sopimustöiden välillä.
TUPAS- ja e-maksu -moduulit kannattaisi julkaista GPLv2-lisenssillä. Näin ei ajauduta ristiriitoihin eri lisenssimallien yhteensovittamisessa. Jokaisella olisi tietysti mahdollisuus käyttää koodia esim. asiakasprojekteissa tai hyödyntää osaamistaan taloudellisesti. Korjaukset ja muutokset koodiin tehtäisiin yhteisesti, jotta lopputuloksena olisi mahdollisimman viimeistelty ja kaikkia hyödyntävä paketti.
Tässä linkkejä kiinnostuneille (ja itsellekin talteen - osoitteet ovat aina hukassa):
- Finanssialan Keskusliitto: Pankkien TUPAS-varmennepalvelu palveluntarjoajille, versio 2.2 (PDF)
- Suomen Pankkiyhdistys: TUPAS-tunnistautuminen, versio 2.1 (PDF)
- Pankkiyhdistys: Verkkomaksaminen, ohje palveluntarjoajille (PDF)
- Pankkiyhdistys: Verkkopankkilinkki, palvelukuvaus ja palveluntarjoajan ohje (PDF) Katso myös pankkikohtaiset tarkennkset
- Nordea: e-Maksu, palvelukuvaus (PDF)
- Nordea: e-Tunniste, palvelukuvaus (PDF)
- Sampo Pankki: Verkkomaksu, liittymän rakentaminen (PDF)
- Sampo Pankki: Tarkennukset Palveluntarjoajan ohjekirjaan (PDF)
- Osuuspankki: Verkkomaksupainikkeen kauppiasdokumentit
- Aktia Säästöpankki: Sp/Pop-maksu, tietoa myyjälle
- Aktia Säästöpankki: Sp/Pop-tunnistuspalvelu, tietoa palveluntuottajalle
Ålandsbankenin ohjeita minulla ei ole, niille en ole ollut toteuttamassa liittymiä.
Minua viehättää erityisesti ajatus TUPAS-tunnistuksen liittämisestä Drupaliin. OpenID on minusta nykyisellään liian monimutkainen loppukäyttäjän näkökulmasta. Drupal 6:n OpenID-moduulin voisi tosin ottaa TUPAS-moduulin toteutuksen pohjaksi, koska peruskäytännöt ovat kummassakin samat. Siitä saisi ainakin peruskoodia esim. sessiohallintaan ja token-kytkennän toteutukseen.
Suomalaiset maksusysteemit
"...Kerran päivässä on varaa antaa periksi..."
Moduulien lisensointi
kyllä tuo onnistuu. Eihän se
Oma ja julkaistu koodi
no näin se varmaan on, että ei tarvitse julkaista
"Super GPL"
Paitsi jos tarkoitit drupal modulilla sitä, että
Maksusysteemien toteutus
TUPAS ja pankkimaksu samalla hehtaarilla
Tunnistusta ja maksua käytetään joskus rinnakkain samassa palvelussa.
On mahdollista, että tuote koostuu heti maksettavasta komponentista (esim. toimitusmaksu, ensimmäinen käsiraha) ja osin luotolla myytävästä osuudesta. Ennen kuin asiakkaan luottotiedot voidaan tarkistaa, tarvitaan TUPAS-tunnistus.
Pankkimaksu ja TUPAS ovat teknisenä toteutuksena melko lähellä toisiansa. Maksussa on hieman eri nimisiä kenttiä, mutta logiikka on pitkälle sama kuin TUPAS-tunnistuksessa. Pankkimaksussa pitää tosin luoda HTML-formin kentät pankkikohtaisilla ohjeilla, eli jokaisella pankilla on omansa. TUPAS on helpompi, koska siinä käytetään samaa rakennetta kaikille pankeille.
Pankkikohtaisia merkkijonosäätöjä lukuunottamatta koodin määrä maksun ja TUPAS:in välillä on melkeinpä sama, ja kyseessä siis pitkälti yhteistä koodia. Moduulin koodi voi olla täysin geneeristä. Inputiksi annetaan veloitettavan tuotteen nimike, hinta, asiakastieto, viitenumero, yms. ja lopulta saadaan tieto siitä, onko maksu suoritettu vai ei.
Myyjäkohtaiset tiedot, kryptauksessa tarvittavat pankkiavaimet yms., syötetään kantaan tai hyvin suojattuun tiedostoon. Se, mistä ostoskorirakenteesta nuo tuote- ja veloitustiedot moduuliin siirtyvät, on toissijaista, koska moduulissa on tietysti oltava selkeä API, joilla tiedot välitetään.
Maksujärjestelmän rakentaminen kokonaisuutena on toki tunnistusta järeämpi. On-line -tapahtumien lisäksi tarvitaan tausta-ajoa hoitava systeemi, jossa käsitellään pankeilta tullutta konekielistä dataa ja varmistetaan maksujen kohdistuminen oikein (ns. täsmäytysajo). Tämän kohdalla tullaan sitten niihin asiakaskohtaisiin räätälöintitarpeisiin, kun yhdellä on SAP ja toisella ei...
Pointtini on siis se, että jos tekee kerran TUPAS:in, niin lähes samalla vaivalla saa koodin myös pankkimaksun rakentamiseksi.
Muuallakin ideoidaan...
Itsenäinen moduuli vai plugin
Tai moduuli, jolle tehdään plugin-sovitin ja rajapinta?
En ole ihan varma, mitä tarkoitat termillä plugin, tai siis miten se eroaa käytännössä Drupal-moduulista. Moduulin toteutuksen kannalta ei saisi kuitenkaan olla minusta eroa sillä, millaiseen ostoskoriin tai muuhun prosessiin se kytketään. Muuten tulee luotua sellaista koodia, joka ei ole uudelleenkäytettävää, jota joutuu säätämään tapauskohtaisesti ja joka voi mennä rikki kun jonkun toisen moduulin koodia muutetaan.
Maksumoduulin suunnittelussa kannattaa jollakin tavalla tietysti huomioida nuo yleisimmät ja todennäköisimmät vastakappaleet ja niiden rajapinnat.
Käytännön toteutuksessa ne voisi minusta erottaa kuitenkin omiksi sovittimikseen, joka eristää eri moduulien väliset tietorakenteelliset ja semanttiset riippuvuudet ja mahdollistaa uusien ostoskorien yhdistämisen prosessiin. Maksumoduulilla voi siis olla täysin oma "fiksattu" rajapinta, joka ei riipu muista ja on täysin yleiskäyttöinen.
Hatusta revittynä se voisi olla esim. jotain tämän tapaista:
interface iPankkiMaksu {// Yhteisiä kaikille i[xxxxx]Maksu -tyypeille:public function luoMaksupyynto($ostoskori, ...);public function kasitteleMaksupyynto();// iPankkiMaksu-kohtaiset:public function luoMaksuPainikkeet($maksuPyynto);public function kasittelePankinPaluusanoma($paluuSanoma);}Pankkikohtaiset toteutukset johdettaisiin iPankkiMaksusta:
class NordeaPankkiMaksu implements iPankkiMaksu {/* ... */public function luoMaksuPainikkeet($tilaus){return '<form><input x /><input y /></form>';}}Tuon lisäksi olisi sitten jokin plugin-moduuli tietylle ostoskoriratkaisulle, joka ymmärtää sen tietorakenteet, tekee mahdolliset normalisoinnit iPankkiMaksu-tyypille ja kutsuu sitten maksutapahtuman aktivoivaa metodia.
Esim. normalisoinnissa voisi olla tämän näköistä koodia:
class UbercartinOstoskoriYleiseksiOstoskoriksi implements iOstoskoriSovitin {/* ... */public function asetaAsiakasTiedot($ubercartinKori){$maksaja = new Henkilo;$maksaja->asetaNimi($ubercartinKori->sukunimi .' '. $ubercartinKori->etunimi); $drupalOstoskori = new DrupalKori;$drupalOstoskori->asetaMaksaja($maksaja);} /* ... */}Eli jos toisessa käsitellään nimeä etu- ja sukunimitasolla ja toisessa yhtenä kenttänä (muodossa "Sukunimi Etunimi"), niin sovitin hoitaisi näiden eri muotojen konversiot. Tällaiset tehtävät eivät kuulu maksukomponentin tehtäviin.
Itse asiassa koko maksumoduuli voitaisiin saman tien yleistää niin, että se sallii pankkimaksun lisäksi myös Finvoice-laskutuksen. En tarkoita, että Finvoicea pitäisi toteuttaa, mutta kun kerran tässä jo käsitellään tuotteita, hintoja, asiakastietoa, toimitustapoja jne., niin koossa ovat Finvoiceenkin tarvittavat palaset.
Kokonaistoteutus voisi mennä niin, että on ylätyyppi
iTilaus, joka sisältää laskutettavan tilauksen tiedot omina alatyyppeinään (asiakas, tuote, tuotteen parametrit, maksutapa, viitenumerot). iTilaus voitaisiin sitten välittää joko iPankkiMaksu, iLuottokorttiMaksu-, tai iFinvoiceLasku -tyypeille, jotka hoitaisivat sen rahaliikenteen. (Finvoicelle tuo interface voi olla turha, jos toteutuksen johdannaisia on vain yksi.)Koodista käsin ja siis "käyttäjän" näkökulmasta (jossa käyttäjä voi olla jonkun Ubercartin plugin-koukku, joka on tarkoitettu maksatuksen käynnistämiseksi - tai miten se sitten onkaan toteutettu), kutsuttaisiin kuitenkin aina pelkästään metodia
iTilaus.hoidaMaksu();, ja tuo tekisi käytännössä joko pankkimaksun, luottokorttimaksun, Finvoice-laskun jne. riippuen siitä, mikä maksutapa on valittuna ja sallittuna ja mitä sovittimia on asennettuna.VirtueMartin suomalaismaksujen moduuli
Payment API
Huomasin tällaisen projekitityngän: http://drupal.org/project/payment_api
Jos oikein ymmärsin, Payment API voisi toimia "välikerroksena" Drupalin ja eri maksurajapintojen välillä. Se siis hoitaisi tuon yleistämisen, jota aiemmassa koodiesimerkissä hahmottelin.
finvoice, übercart &c.
Kansallisesti yhteistyön paikka?
Itse olisin myös kiinnostunut tästä aihekokonaisuudesta. Siis miten ja millä resursseilla saisimme tässä ketjussa esitetyt asiat toteutettua niin että ne olisivat avoimia ja kaikkien hyödennettävissä. Drupal/Ubercart ratkaisu on erittäin mielenkiintoinen, mutta siihen tulisi saada edellä esitettyjä toiminnallisuuksia. Uskoisin että tähän olisi löydettävissä myös julkista rahoitusta, jos vain tekijöitä löytyisi.
t. Mika
Summer of code?
Löytyisiköhän Suomesta sponsoreita pienemmässä mittakaavassa jos tästä tai jostain vastaavista "yleishyödyllisistä" avoimen lähdekoodin hankkeista tekisi Summer of Code -tyyppisen hankkeen? Kansainvälistä rahoitusta voi olla vaikea saada tälläiselle ja ihan puhtaasti vapaaehtoisvoimin vähän kookas hanke. Päteviä opiskelijoita varmasti löytyisi ja menttoreitakin varmaan. Löytyisiköhän kiinnostunut koordinaattori etsimään sponsoreita ja miettimään miten käytännön tekniset muodollisuudet saadaan hoidettua? Julkistakin rahoitusta varmaan saisi jonkun verran, mutta ainakin osa pitäisi luultavasti saada yksityiseltä puolelta.
Pari muutakin vastaavaa hanketta varmaan löytyis D.fi:n ympäriltä. Ihan vaan ideana...
Rahoitusta etsimään
Jep,
Hyviä ajatuksia. COSS sivuilla on Kesäkoodi haku käynnissä. http://www.coss.fi/web/coss/developers/summercode. Tuohan on opiskelijalähtöistä, mutta tänä vuonna olisi Drupaliin liittyvä projekti mukava nähdä listoilla. COSSin suunnasta voisi kysyä myös yleisesti mahdollisuuksia tähän liittyen. Kyllä varmasti yksityistä rahaakin näiden asioiden kehittämiseen löytyisi, kaikkien ei kannata yrittää rakentaa pyörää uudelleen.
Onko tällä rintamalla mitään uutta?
Minulla on pieni projekti, johon tarvitsisin myös verkkomaksusysteemiä suomalaisia (tai suomessa toimivia) pankkeja vasten.
Itse osaaan jonkin verran koodata php:llä, mutta valitettavasti olio-ohjelmoititaitoni ovat olemattomat/surkeat.
Jos valmista liityntää ei pankkien järjestelmiin (julkisesti) ole, niin kait se pitää sitten keksiä pyörä uudelleen. :)
Projektini on sen verran alkuvaiheessa vielä, että tuo maksurajapinta voi olla kumpaan vaan (ecommerce/übercart).
Kiitos tiedoista jo etukäteen.
Tiedän, että esim. osCommerceen on vastaava liityntä, mutta en haluaisi rakentaa tuota projektiani sen varaan (koska sen ylläpito on melkolailla tuskaa normikäyttäjälle).
On tulossa
Itseasiassa on jo tällä hetkellä työn alla. Jos sinulla on kiire kaikkien kotimaisten maksujen ja Übercartin kanssa ota käyttöön http://drupal.org/project/uc_checkoutfi
Suorat pankkiyhteydet tarjoava moduuli saatanee beta-versiona pihalle noin kuukauden sisällä.
Upeaa
Millaisella lisenssillä tuo moduli tulee?
Koko Drupal on GPL
Myös tämä moduuli on GPL koodia ja vapaasti käytettävissä.
Ehdottomasti isoin työ tässä onkin kunnollisen GPL lisensoidun maksukirjaston väsääminen pankeille. GPL koodina nämä tosiaan löytyvät esim osCommercesta, mutta sellaisenaan niitä on aika vaikea käyttää tässä hyväkseen. Drupaliin tiukasti sidottuja ja ulkopuolista eri lisenssillä olevaa kirjastoa hyödyntäviä toteutuksia löytyy jo ennestään, mutta näissä on molemmissa omat ongelmansa. Järkevintä olisi paketoida itse pankkimaksut toteuttava kirjasto siten että sitä voi tarvittaessa käyttää myös minkä tahansa muun PHP-pohjaisen järjestelmän kanssa ja ylläpitää tätä kirjastoa Drupal moduulin GPL-lisensoituna osana. Näin maksupaketille saataisiin toivottavasti laajempi käyttäjäkunta ja kirjasto pidettyä ajantasalla aina kun pankit päättävät muuttaa rajapintojaan.
Übermahtavaa!!
Hienoa että tämä on mennyt eteenpäin. Myös tuo TUPAS autentikointi moduli on hieno asia. Onko se jo valmis tuotantokäyttöön?
TUPAS-moduuli on puolivalmiste
TUPAS moduulia on jo käytetty muutamassa eri casessa tuotantokäytössäkin ja näissä caseissa se on toiminut hyvin. Moduuli ei kuitenkaan ehkä ihan vielä ole hurjan geneerinen, joten en lupaisi sitä mihin vaan käyttöön bugittomana. Lisäksi moduuli on vähän puolivalmis sikäli että se ei ihan yksinään tee vielä mitään kovin jännittävää.
Mikäli jollain on projekti jossa tarvitaan Drupal ja TUPAS yhdistelmää niin suosittelen kuitenkin rohkeasti osallistumaan D.o hankkeen viemiseen eteenpäin. Koko moduuli on alunperin toteutettu Exoven toimesta asiakasprojektissa ja julkaistu asiakkaan luvalla. Veikkaan ettei moduuli jatkokehity ihan huimasti ennen kuin sitä jälleen tarvitaan seuraavassa projektissa. TUPAS tunnistuksella on aika pieni käyttäjäjoukko joista "omaksi huvikseen" sitä ei varmasti käytä kukaan. Projektina tämä etenee luonnostaan aika hitaasti siksi, koska erilaisia käyttötapauksia tulee vastaan harvoin ja kehittäjäkunnasta aika tarkasti 100% tehnee projektia vain työajallaan.