Fipn-ohjelmistokehystä ja sen eri maksupalvelukohtaisia moduleja ei ole sidottu vain tiettyihin verkkokauppaohjelmistoihin, sillä Fipn on alusta asti kehitetty liitettäväksi kaikkiin muihin ohjelmiin mahdollisimman helposti.
Alla on toimivia käytännön esimerkkejä siitä, miten Fipn-ohjelmistokehyksen eri moduleja voidaan ottaa käyttöön yksinkertaisimmillaan. Ohjelmistokehyksen API-dokumentaatioon tai lähdekoodiin, joissa asiat on kuvattu paljon yksityiskohtaisemmin, ei ole välttämätöntä uppoutua lainkaan.
Eri verkkomaksupalvelujen välillä on eroja. Fipn pyrkii tekemään verkkokaupan ohjelmistokehittäjän elämästä helppoa minimoimalla nämä eri palvelujen väliset erot. Kun verkkokauppaohjelmistoonsa on liittänyt yhden Fipn-modulin, voi seuraavien muiden modulien liittämiseen hyödyntää samaa jo kehitettyä koodia. Tästä hyvänä osoituksena on se, miten samanlaisia alla olevat esimerkit ovat.
Tietojen lähettäminen verkkokaupasta maksupalveluun
Maksutapahtumaan liittyvien tietojen välittäminen verkkokaupasta maksupalveluun tapahtuu asiakkaalle tilausprosessin lopussa esitettävän HTML-maksulomakkeen piilokentissä. Yksinkertaisimmillaan verkkokauppaohjelmistosta pitää saada kaivettua esille vain tiedot tilausnumerosta ja tilauksen loppusummasta. Tätä edustaa ao. esimerkkien $Order-objekti ja sen kuvitteelliset getID- ja getTotal-metodit. Muita tilauskohtaisesti muuttuvia tietoja ei ao. esimerkeissä pakosti tarvita. Muut parametrit voidaan antaa yksinkertaisimmillaan suoraan osana lähdekoodia. Fipn-ohjelmistokehys huolehtii kaikesta muusta, kuten esim. tietojen oikeellisuuden tarkistamisesta, viitenumeroiden ja autentikointikoodin laskemisesta, lomakekenttien muodostamisesta jne.
Verkkokaupan ohjelmistokehittäjän ei siis tarvitse tietää tämän enempää eri verkkomaksupalvelujen rajapintadokumentaatioista. Se säästää runsaasti aikaa ohjelmistokehityksessä ja testauksessa.
Luottokunta
-
-
try {
-
$Sender = Aivomatic_Fipn_Factory::getSender('luottokunta');
-
$Sender->setData(
-
'ABCDEfghij12', //Secret merchant ID
-
'1234567', //Public merchant ID
-
$Order->getOrderId(), //Unique order ID
-
$Order->getTotal(), //Order total
-
'euro', //Currency, must be 'eur' or 'euro', case insensitive
-
'http://www.example.com/index.php?option=com_appX&',//Return URL for success
-
'http://www.example.com/index.php?option=com_appX&',//Return URL for cancel
-
'http://www.example.com/index.php?option=com_appX&',//Return URL for error
-
'1'); //Transaction type. Must be '0' (authorize) or '1' (authorize and capture).
-
echo '<form method="post" action="'.$Sender->getPostUrl().'">'; //Print HTML-form
-
echo $Sender->getHtmlInputFields($Sender->getFormFields());
-
echo '<input type="submit" value="Pay" /></form>';
-
} catch (Aivomatic_Fipn_Exception $e) {
-
echo 'Error: '.$e->getMessage();
-
die();
-
}
-
?>
Yllä olevan esimerkin eri parametrien merkitykset:
- Secret merchant ID eli salainen koodiavain on maksupalvelutoimittajan kauppiaalle toimittama koodi, jonka avulla verkkokaupan ja maksupalvelun välillä liikkuvien tietojen autenttisuus voidaan tarkistaa.
- Public merchant ID eli kauppiastunnus on maksupalvelutoimittajan kauppiaalle antama tunnuskoodi.
- Unique order ID on kullekin verkkokaupan tilaukselle yksilöllinen tilaustunnus.
- Order total on tilauksen loppusumma.
- Currency eli valuutta. Käytännössä aina Euro, sillä yksikään suomalainen maksupalvelu ei tue muita valuuttoja.
- Return URL eli paluuosoite johon asiakas ohjataan maksupalvelun sivustolta maksutapahtuman jälkeen. Onnistuneille, peruutetuille ja virheellisille maksuille voidaan haluttaessa antaa erilliset paluuosoitteet, tai yksi ja sama osoite kuten esimerkissä.
- Transaction type eli tapahtumatyyppi. 0 = Varmenna, 1 = Varmenna ja veloita.
Nordea Pankki
-
-
require_once 'Aivomatic/Fipn/Factory.php';
-
-
try {
-
$Sender = Aivomatic_Fipn_Factory::getSender('nordeapankki');
-
$Sender->setData(
-
'abcdefghij', //Secret merchant ID
-
'2345679', //Public merchant ID
-
$Order->getOrderId(), //Unique order ID
-
$Order->getTotal(), //Order total
-
'euro', //Currency
-
'http://www.example.com/index.php?option=com_appX&',
-
'http://www.example.com/index.php?option=com_appX&',
-
'http://www.example.com/index.php?option=com_appX&',
-
'0001'); //Secret merchant Id key version.
-
echo '<form method="post" action="'.$Sender->getPostUrl().'">';
-
echo $Sender->getHtmlInputFields($Sender->getFormFields());
-
echo '<input type="submit" value="Pay" /></form>';
-
} catch (Aivomatic_Fipn_Exception $e) {
-
echo 'Error: '.$e->getMessage();
-
die();
-
}
-
?>
Osuuspankki
-
-
require_once 'Aivomatic/Fipn/Factory.php';
-
-
try {
-
$Sender = Aivomatic_Fipn_Factory::getSender('osuuspankki');
-
$Sender->setData(
-
'JIHGFEDCBA', //Secret merchant ID
-
'34567890', //Public merchant ID
-
$Order->getOrderId(), //Unique order ID
-
$Order->getTotal(), //Order total
-
'euro', //Currency
-
'http://www.example.com/index.php?option=com_appX&',
-
'http://www.example.com/index.php?option=com_appX&',
-
'http://www.example.com/index.php?option=com_appX&',
-
'1'); //Secret merchant Id key version.
-
echo '<form method="post" action="'.$Sender->getPostUrl().'">';
-
echo $Sender->getHtmlInputFields($Sender->getFormFields());
-
echo '<input type="submit" value="Pay" /></form>';
-
} catch (Aivomatic_Fipn_Exception $e) {
-
echo 'Error: '.$e->getMessage();
-
die();
-
}
-
?>
Sampo Pankki
-
-
require_once 'Aivomatic/Fipn/Factory.php';
-
-
try {
-
$Sender = Aivomatic_Fipn_Factory::getSender('sampopankki');
-
$Sender->setData(
-
'12345abcde', //Secret merchant ID
-
'45678901', //Public merchant ID
-
$Order->getOrderId(), //Unique order ID
-
$Order->getTotal(), //Order total
-
'euro', //Currency
-
'http://www.example.com/index.php?option=com_appX&',
-
'http://www.example.com/index.php?option=com_appX&');
-
echo '<form method="post" action="'.$Sender->getPostUrl().'">';
-
echo $Sender->getHtmlInputFields($Sender->getFormFields());
-
echo '<input type="submit" value="Pay" /></form>';
-
} catch (Aivomatic_Fipn_Exception $e) {
-
echo 'Error: '.$e->getMessage();
-
die();
-
}
-
?>
Paluutietojen vastaanottaminen maksupalvelusta verkkokauppaan
Maksutapahtuman lopuksi asiakas ohjataan maksupalvelun verkkosivustolta takaisin verkkokauppaan. Asiakkaan mukana maksupalvelusta saadaan paluutietoa HTML GET-metodin parametreina siitä, onnistuiko maksutapahtuma, peruuttiko asiakas maksun tai tapahtuiko jossain vaiheessa jokin virhe. Yksinkertaisimmillaan tämän tiedon vastaanottamiseen riittää alla oleva esimerkkikoodi, joka jo sellaisenaan pystyy käsittelemään kaikkien edellä olleiden esimerkkien eri maksupalvelujen paluutiedot. Lisäksi käytännössä voi olla hyödyllistä kirjoittaa myös pätkä koodia, joka tallettaa tiedon maksutapahtuman lopputuloksesta verkkokaupan tilaustietoihin tai esim. lähettää verkkokauppiaalle sähköpostiviestin. Esimerkissä tätä symbolisoi kuvitteellinen $Order-objekti ja sen metodit.
Verkkokaupan ohjelmistokehittäjä pääsee siis taas hyvin helpolla, sillä Fipn-ohjelmistokehys huolehtii vastaanotettujen tietojen yhteinäisestä tulkitsemisesta ja autentikoinnista. Eri maksupalvelujen eroista ja rajapintadokumentaatiosta ei tarvitse taaskaan tietää mitään tämän yksityiskohtaisempaa.
-
-
$secrets = array('luottokunta' => '1234567890',
-
'nordeapankki' => 'abcdefghij',
-
'osuuspankki' => 'JIHGFEDCBA',
-
'sampopankki' => '12345abcde');
-
-
require_once 'Aivomatic/Fipn/Factory.php';
-
-
$gateway = Aivomatic_Fipn_Factory::getPaymentGatewayName($_GET);
-
-
$secretMerchantId = $secrets[$gateway];
-
-
try {
-
$Receiver = Aivomatic_Fipn_Factory::getReceiver($secretMerchantId, $_GET);
-
} catch (Aivomatic_Fipn_Exception $e) {
-
echo 'Error: '.$e->getMessage();
-
die();
-
}
-
-
$Order = new App_X_Order($Receiver->getOrderId());
-
-
if ($Receiver->getIsSuccess()) {
-
//Just an example of user output
-
echo 'Payment of order '.$Receiver->getOrderId().' was successful';
-
$Order->setPaymentStatus('success');
-
} elseif ($Receiver->getIsCancel()) {
-
echo 'Payment was canceled by the customer';
-
$Order->setPaymentStatus('cancel');
-
} elseif ($Receiver->getIsError() AND
-
$Receiver->getIsAuthenticResponse() === true) {
-
echo 'An error occured during payment';
-
$Order->setPaymentStatus('error');
-
} elseif ($Receiver->getIsError() AND
-
$Receiver->getIsAuthenticResponse() === false) {
-
echo 'Payment could not be authenticated';
-
$Order->setPaymentStatus('error');
-
}