{"id":489,"date":"2018-02-17T20:48:28","date_gmt":"2018-02-17T18:48:28","guid":{"rendered":"http:\/\/localhost:8888\/wordpress\/?p=489"},"modified":"2018-05-29T09:51:25","modified_gmt":"2018-05-29T07:51:25","slug":"opn-psd2-rajapinnan-kokeilu","status":"publish","type":"post","link":"https:\/\/www.pilvikoodari.net\/?p=489","title":{"rendered":"OP:n PSD2-rajapinnan kokeilu"},"content":{"rendered":"<p><strong>Yleist\u00e4 PSD2:sta<\/strong><\/p>\n<p>EU:n maksupalveludirektiivi PSD (Payment Services Directive) uudistui ja PSD2 tuli voimaan p\u00e4\u00e4osin 13.1.2018. PSD2 koskee maksupalveluiden tarjoajia eli k\u00e4yt\u00e4nn\u00f6ss\u00e4 pankkeja ja muita maksupalveluiden tarjoajia.<\/p>\n<p>PSD2:n mukana pankeille tulee vaatimus, ett\u00e4 niiden on avattava rajapinnat kolmannen osapuolen palveluille (Third Party Provider, TPP). Rajapintojen kautta kolmas osapuoli p\u00e4\u00e4see k\u00e4sittelem\u00e4\u00e4n maksupalveluiden tarjoajien tilitietoja ja tekem\u00e4\u00e4n erilaisia maksutapahtumia. T\u00e4ll\u00e4 pyrit\u00e4\u00e4n lis\u00e4\u00e4m\u00e4\u00e4n kilpailua ja avoimuutta. T\u00e4h\u00e4n asti pankeilla onkin ollut asiakkaat tiukasti omissa hyppysiss\u00e4.<\/p>\n<p>K\u00e4yt\u00e4nn\u00f6ss\u00e4 uusi direktiivi siis mahdollistaa sellaisten uusien sovellusten ja palveluiden kehitt\u00e4misen, jotka hy\u00f6dynt\u00e4v\u00e4t loppuk\u00e4ytt\u00e4j\u00e4n tilitietoja. Loppuk\u00e4ytt\u00e4j\u00e4lt\u00e4 vaaditaan toki suostumus tilitietojen k\u00e4ytt\u00e4miseen sek\u00e4 riitt\u00e4v\u00e4 tunnistautuminen. Uusi sovellus tai palvelu voi siis esimerkiksi lajitella k\u00e4ytt\u00e4j\u00e4n tilitapahtumia ja muodostaa niist\u00e4 erilaisia raportteja. My\u00f6s mm. maksujen v\u00e4litt\u00e4minen pankkitilien v\u00e4lill\u00e4 on mahdollista.<\/p>\n<p>PSD2 direktiivin k\u00e4ytt\u00f6\u00f6notossa ollaan k\u00e4yt\u00e4nn\u00f6ss\u00e4 siirtym\u00e4vaiheessa. <a href=\"http:\/\/www.finanssivalvonta.fi\/fi\/Saantely\/Kannanotot\/Pages\/01_2018.aspx\" target=\"_blank\" rel=\"noopener\">Finanssivalvonnan kannanotossa 10.1.2018<\/a> todetaan seuraavaa:<br \/>\n<em><br \/>\nDirektiivin nojalla annetaan my\u00f6s komission asetus teknisist\u00e4 s\u00e4\u00e4ntelystandardeista asiakkaan vahvasta tunnistamisesta ja turvallisesta kommunikaatiosta. Asetus tulee voimaan 18 kk kuluttua sen julkaisusta virallisessa lehdess\u00e4. T\u00e4ll\u00e4 hetkell\u00e4 asetuksen odotetaan tulevan voimaan syksyll\u00e4 2019.<\/em><\/p>\n<p>Pankit ovat alkaneet toteuttamaan rajapintojaan ja osa rajapinnoista on jo kehitt\u00e4jien k\u00e4yt\u00f6ss\u00e4, ainakin testik\u00e4ytt\u00f6\u00f6\u00e4 varten. Tutustutaan seuraavaksi esimerkinomaisesti Osuuspankin rajapintoihin k\u00e4yt\u00e4nn\u00f6n tasolla.<\/p>\n<p><strong>Osuuspankin PSD2 rajapinnat<\/strong><\/p>\n<p>OP on ollut varsin aktiivinen rajapintojen kehitt\u00e4misess\u00e4. Kehitt\u00e4j\u00e4t voivat osoitteessa <a href=\"https:\/\/op-developer.fi\/\" target=\"_blank\" rel=\"noopener\">https:\/\/op-developer.fi\/<\/a> tutustua OP:n <a href=\"https:\/\/op-developer.fi\/docs\" target=\"_blank\" rel=\"noopener\">rajapintoihin<\/a>. Rajapinnat ovat t\u00e4t\u00e4 kirjoitettaessa (2\/2018) beta-vaiheessa, joten pienet muutokset ovat viel\u00e4 mahdollisia mutta kokonaisuus vaikuttaa kuitenkin jo melko pitk\u00e4lle kehitetylt\u00e4.<\/p>\n<p>Jotta OP:n rajapintoja p\u00e4\u00e4see kokeilemaan ns. sandbox-ymp\u00e4rist\u00f6ss\u00e4, pit\u00e4\u00e4 ensin <a href=\"https:\/\/op-developer.fi\/developers\/register\" target=\"_blank\" rel=\"noopener\">rekister\u00f6ity\u00e4<\/a> testik\u00e4ytt\u00e4j\u00e4ksi. Se on kuitenkin todella helppoa ja vaatii vain muutaman tiedon sy\u00f6tt\u00e4misen. Rekister\u00f6itymisen j\u00e4lkeen kehitt\u00e4j\u00e4 voi luoda OP:n palveluun oman sovellustunnisteen, jota k\u00e4ytet\u00e4\u00e4n rajapintakutsuissa:<\/p>\n<figure id=\"attachment_492\" aria-describedby=\"caption-attachment-492\" style=\"width: 1014px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-16.59.05.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-492\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-16.59.05-1024x600.png\" alt=\"\" width=\"1024\" height=\"600\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-16.59.05-1024x600.png 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-16.59.05-300x176.png 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-16.59.05-768x450.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-492\" class=\"wp-caption-text\">Sovelluksen rekister\u00f6inti OP:n kehitt\u00e4j\u00e4palveluun<\/figcaption><\/figure>\n<p>Sy\u00f6tet\u00e4\u00e4n sovellukselle nimeksi vaikkapa <em>Mobile Finance Manager<\/em>. Toinen kentt\u00e4 on &#8221;Callback URL&#8221;. OP:n lomakkeessa ei ole mit\u00e4\u00e4n ohjeita mit\u00e4 t\u00e4m\u00e4 tarkoittaa. Tutkimalla rajapintojen <a href=\"https:\/\/op-developer.fi\/docs\" target=\"_blank\" rel=\"noopener\">dokumentaatiota<\/a> asia ei my\u00f6sk\u00e4\u00e4n selvi\u00e4, joten j\u00e4tet\u00e4\u00e4n se toistaiseksi tyhj\u00e4ksi, koska kentt\u00e4 ei ole pakollinen.<\/p>\n<p>Sitten valitaan, mit\u00e4 palveluita uusi sovellus tulee k\u00e4ytt\u00e4m\u00e4\u00e4n:<\/p>\n<figure id=\"attachment_494\" aria-describedby=\"caption-attachment-494\" style=\"width: 1014px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.12.35.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-494 size-large\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.12.35-1024x585.png\" alt=\"\" width=\"1024\" height=\"585\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.12.35-1024x585.png 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.12.35-300x171.png 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.12.35-768x439.png 768w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.12.35.png 1880w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-494\" class=\"wp-caption-text\">Valitaan OP:n palvelut sovellukselle<\/figcaption><\/figure>\n<p>Valitaan sovellukselle kolme rajapintaa: tilitiedot, maksaminen ja l\u00e4himm\u00e4n konttorin etsiminen. Sitten homma onkin jo valmis:<\/p>\n<figure id=\"attachment_495\" aria-describedby=\"caption-attachment-495\" style=\"width: 1014px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.16.01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-495 size-large\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.16.01-1024x367.png\" alt=\"\" width=\"1024\" height=\"367\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.16.01-1024x367.png 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.16.01-300x108.png 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-17.16.01-768x275.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-495\" class=\"wp-caption-text\">Sovellus perustettu<\/figcaption><\/figure>\n<p>Sovellus on siis perustettu ja <em>API key<\/em> on saatavilla rajapintakutsuihin. <\/p>\n<p><strong>Tili- ja tapahtumatietojen hakeminen<\/strong><\/p>\n<p>Tehd\u00e4\u00e4n\u00a0ensimm\u00e4inen kutsu rajapintaan ja haetaan pankkitililistaus <a href=\"https:\/\/op-developer.fi\/docs\/#Banking\" target=\"_blank\" rel=\"noopener\">Banking<\/a>-rajapinnasta. Dokumentaatiossa on <a href=\"https:\/\/op-developer.fi\/docs\/#Banking\" target=\"_blank\" rel=\"noopener\">tarkat ohjeet<\/a> mit\u00e4 tietoja rajapintakutsussa tulee olla mukana. Saatavilla on my\u00f6s <a href=\"https:\/\/swagger.io\/specification\/\" target=\"_blank\" rel=\"noopener\">OpenAPI (Swagger)<\/a> -formaatin mukainen rajapintakuvaus josta selvi\u00e4\u00e4 kaikkein yksityiskohtaisimmat ohjeet rajapinnasta.<\/p>\n<p>Pankkitilien hakeminen tapahtuu HTTP kutsulla:<\/p>\n<p><code>GET https:\/\/sandbox.apis.op-palvelut.fi\/v1\/accounts<\/code><\/p>\n<p>Seuraavat otsikkotiedot tarvitaan HTTP-kutsuun:<\/p>\n<ul>\n<li><span class=\"param-name-wrap\"><strong>x-authorization<\/strong>: t\u00e4ss\u00e4 menee normaalisti k\u00e4ytt\u00e4j\u00e4n tunniste, joka saadaan kun k\u00e4ytt\u00e4j\u00e4 on tunnistautunut. T\u00e4ss\u00e4 kehitysymp\u00e4rist\u00f6ss\u00e4 on k\u00e4ytett\u00e4viss\u00e4 muutama kiinte\u00e4 tunniste, joita voi k\u00e4ytt\u00e4\u00e4. Valitaan arvoksi tunniste\u00a0<em>b6910384440ce06f495976f96a162e2ab1bafbb4<\/em><br \/>\n<\/span><\/li>\n<li><strong><span class=\"param-name-wrap\">x-session-id<\/span><\/strong>: istunnon tunniste. Esim. <em>12345. <\/em>T\u00e4m\u00e4n generoinnista ja l\u00e4hett\u00e4misest\u00e4 vastaa rajapintaa k\u00e4ytt\u00e4v\u00e4 sovellus. T\u00e4m\u00e4 mahdollistaa istunnon aikaisten tietojen tallentamisen.<em><br \/>\n<\/em><\/li>\n<li>\n<div class=\"param-name\"><strong><span class=\"param-name-wrap\"> x-request-id:<\/span><\/strong> <span class=\"param-name-wrap\">pyynn\u00f6n tunniste. Esim. 42. T\u00e4m\u00e4kin kent\u00e4n generointi jaa k\u00e4ytt\u00f6 on rajapinnan k\u00e4ytt\u00e4j\u00e4n vastuulla.<br \/>\n<\/span><\/div>\n<\/li>\n<li>\n<div class=\"param-name\"><strong><span class=\"param-name-wrap\"> x-api-key<\/span><\/strong>: sovelluksen API key<\/div>\n<\/li>\n<\/ul>\n<p>Tehd\u00e4\u00e4n ensimm\u00e4inen pyynt\u00f6 Postman -sovelluksella:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-18.59.53.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-500\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-18.59.53-1024x275.png\" alt=\"\" width=\"1024\" height=\"275\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-18.59.53-1024x275.png 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-18.59.53-300x81.png 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-18.59.53-768x206.png 768w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-18.59.53.png 1838w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Vastauksena saadaan tilitiedot JSON muodossa:<\/p>\n<pre class=\"lang:js decode:true\" title=\"Tilikyselyn vastaus\">[\r\n    {\r\n        \"accountId\": \"064418ca1d292a5112e9804af4dc66df5b90203c\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI2350009421535899\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 0,\r\n        \"amountAvailable\": 0,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"07618ad83d7c5d5f2db8908d33b6a9272c5e8d96\",\r\n        \"accountType\": \"712035\",\r\n        \"iban\": \"FI7858400761900714\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"KASVUTUOTTO\",\r\n        \"balance\": 3137.57,\r\n        \"amountAvailable\": 3137.57,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"4270acb4db4a8b82c954ff93e5c81f2f38fd5a2f\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI1958400720090508\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 2275.71,\r\n        \"amountAvailable\": 2275.71,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"5189f37b439bd02462e196e206d0318f094fca82\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI1158400720088809\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 20990.82,\r\n        \"amountAvailable\": 20990.82,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"61695dfa6a52aac826ab6447b8ee25917e30d7a5\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI1958400720091381\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 4276.61,\r\n        \"amountAvailable\": 4276.61,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"a329ea3cec30a5f2fcadc38b76247f2f02c0a1a1\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI3959986920207073\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 2215.81,\r\n        \"amountAvailable\": 2215.81,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"adee9e7d34d8ffb3a3ef96dda5be37a63673b23c\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI8958400720010290\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 10287.84,\r\n        \"amountAvailable\": 10287.84,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"b3a4c6fb50be0b92e9f8f13b8b497db33cabbb05\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI2450009421535881\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 0,\r\n        \"amountAvailable\": 0,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"b79974fbbc100e8e4f103381649858d363795d6e\",\r\n        \"accountType\": \"711006\",\r\n        \"iban\": \"FI8058400767000550\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"24 KK M\u00c4\u00c4R\u00c4AIKAINEN TUOTTOTILI\",\r\n        \"balance\": 0,\r\n        \"amountAvailable\": 0,\r\n        \"currency\": \"EUR\"\r\n    },\r\n    {\r\n        \"accountId\": \"dfd17a16aafde6ecb2b910cdb03d5932416d4913\",\r\n        \"accountType\": \"711006\",\r\n        \"iban\": \"FI8859986967004714\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"24 KK M\u00c4\u00c4R\u00c4AIKAINEN TUOTTOTILI\",\r\n        \"balance\": 12852.51,\r\n        \"amountAvailable\": 12852.51,\r\n        \"currency\": \"EUR\"\r\n    }\r\n]<\/pre>\n<p>Tilitiedot tulivat rajapinnasta n\u00e4tiss\u00e4 JSON muodossa ja sovelluksemme voisi n\u00e4ytt\u00e4 tililistauksen saldoineen.<\/p>\n<p>Kokeillaan viel\u00e4 hakea listalla olevan k\u00e4ytt\u00f6tilin (jonka id on: <em>5189f37b439bd02462e196e206d0318f094fca82<\/em>) tarkemmat tiedot pyynn\u00f6ll\u00e4:<\/p>\n<p><code>GET https:\/\/sandbox.apis.op-palvelut.fi\/v1\/accounts\/https:\/\/sandbox.apis.op-palvelut.fi\/v1\/accounts\/5189f37b439bd02462e196e206d0318f094fca82<\/code><\/p>\n<p>Vastuksena saadaan tilin tarkemmat tiedot:<\/p>\n<pre class=\"lang:js decode:true\" title=\"Tilin tiedot\">[\r\n    {\r\n        \"accountId\": \"5189f37b439bd02462e196e206d0318f094fca82\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI1158400720088809\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 20990.82,\r\n        \"amountAvailable\": 20990.82,\r\n        \"currency\": \"EUR\"\r\n    }\r\n]<\/pre>\n<p>Seuraavaksi haetaan tilin tapahtumat:<\/p>\n<p><code>GET https:\/\/sandbox.apis.op-palvelut.fi\/v1\/accounts\/5189f37b439bd02462e196e206d0318f094fca82\/transactions<\/code><\/p>\n<p>Vastauksena saadaan lista tapahtumista:<\/p>\n<pre class=\"lang:js decode:true\">[\r\n    {\r\n        \"transactionId\": \"e82323f0-0bea-11e8-84a5-ada22c3c7c57\",\r\n        \"valueDate\": \"2017-09-06T00:00:00.000Z\",\r\n        \"bookingDate\": \"2017-09-06T00:00:00.000Z\",\r\n        \"amount\": -10,\r\n        \"currency\": \"EUR\",\r\n        \"payer\": \"Teppo Tulppu\",\r\n        \"reference\": \"\",\r\n        \"purpose\": \"TILISIIRTO\",\r\n        \"message\": \"Asdf \",\r\n        \"accountId\": \"5189f37b439bd02462e196e206d0318f094fca82\"\r\n    },\r\n    {\r\n        \"transactionId\": \"e8234b00-0bea-11e8-84a5-ada22c3c7c57\",\r\n        \"valueDate\": \"2017-08-29T00:00:00.000Z\",\r\n        \"bookingDate\": \"2017-08-29T00:00:00.000Z\",\r\n        \"amount\": -30,\r\n        \"currency\": \"EUR\",\r\n        \"payer\": \"Jytykauppias Koe\",\r\n        \"reference\": \"13\",\r\n        \"purpose\": \"TILISIIRTO\",\r\n        \"message\": \"VIESTI1 VIESTI2 \",\r\n        \"accountId\": \"5189f37b439bd02462e196e206d0318f094fca82\"\r\n    },\r\n    {\r\n        \"transactionId\": \"e8237210-0bea-11e8-84a5-ada22c3c7c57\",\r\n        \"valueDate\": \"2017-08-17T00:00:00.000Z\",\r\n        \"bookingDate\": \"2017-08-17T00:00:00.000Z\",\r\n        \"amount\": -30,\r\n        \"currency\": \"EUR\",\r\n        \"payer\": \"Jytykauppias Koe\",\r\n        \"reference\": \"13\",\r\n        \"purpose\": \"TILISIIRTO\",\r\n        \"message\": \"VIESTI1 VIESTI2 \",\r\n        \"accountId\": \"5189f37b439bd02462e196e206d0318f094fca82\"\r\n    }\r\n]<\/pre>\n<p>Haetaan viel\u00e4 yhden tilitapahtuman tarkemmat tiedot:<\/p>\n<p><code>GET https:\/\/sandbox.apis.op-palvelut.fi\/v1\/accounts\/5189f37b439bd02462e196e206d0318f094fca82\/transactions\/e82323f0-0bea-11e8-84a5-ada22c3c7c57<\/code><\/p>\n<p>Ja vastauksessa n\u00e4kyy tapahtuman tiedot:<\/p>\n<pre class=\"lang:js decode:true\" title=\"Tilitapahtuman tiedot\">{\r\n    \"transaction\": [\r\n        {\r\n            \"transactionId\": \"e82323f0-0bea-11e8-84a5-ada22c3c7c57\",\r\n            \"valueDate\": \"2017-09-06T00:00:00.000Z\",\r\n            \"bookingDate\": \"2017-09-06T00:00:00.000Z\",\r\n            \"amount\": -10,\r\n            \"currency\": \"EUR\",\r\n            \"payer\": \"Teppo Tulppu\",\r\n            \"reference\": \"\",\r\n            \"purpose\": \"TILISIIRTO\",\r\n            \"message\": \"Asdf \",\r\n            \"accountId\": \"5189f37b439bd02462e196e206d0318f094fca82\"\r\n        }\r\n    ]\r\n}<\/pre>\n<p><strong>Uuden maksun tekeminen<\/strong><\/p>\n<p>Testataan seuraavaksi uuden maksun tekemist\u00e4. Se tapahtuu <a href=\"https:\/\/op-developer.fi\/docs\/#Banking\" target=\"_blank\" rel=\"noopener\">Banking<\/a> -moduulin Payments -rajapinnan kautta. Rajapinnassa on kaksi endpointtia: maksun tallennus (initiate) ja maksun vahvistaminen (confirm). Pyynn\u00f6t rajapintaan tapahtuvat nyt HTTP:n POST metodilla, koska pyynn\u00f6n mukana l\u00e4hetet\u00e4\u00e4n maksussa tarvittavat tiedot. Luonnollisesti my\u00f6s edell\u00e4 mainitut HTTP header- eli otsikkotiedot pit\u00e4\u00e4 olla mukana.<\/p>\n<p>Maksun tallennous tapahtuu pyynn\u00f6ll\u00e4:<\/p>\n<p><code>POST  https:\/\/sandbox.apis.op-palvelut.fi\/v1\/payments\/initiate<\/code><\/p>\n<p>Seuraavat tiedot v\u00e4litet\u00e4\u00e4n HTTP-pyynn\u00f6n body-osuudessa:<\/p>\n<ul>\n<li><strong>amount (pakollinen tieto)<\/strong><\/li>\n<li><strong>subject<\/strong><\/li>\n<li><strong>currency<\/strong><\/li>\n<li><strong>payerIban (pakollinen tieto)<\/strong><\/li>\n<li><strong>paymentId<\/strong><\/li>\n<li><strong>valueDate<\/strong><\/li>\n<li><strong>receiverBic<\/strong><\/li>\n<li><strong>receiverIban (pakollinen tieto)<\/strong><\/li>\n<li><strong>receiverName<\/strong><\/li>\n<\/ul>\n<p>Ei muuta kuin kokeilemaan! L\u00e4hetet\u00e4\u00e4n edell\u00e4 mainitulta tililt\u00e4 kymmenen euroa k\u00e4ytt\u00f6tilille joka oli tililistassa ensimm\u00e4isen\u00e4:<\/p>\n<p><a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.39.45.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-507\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.39.45-1024x578.png\" alt=\"\" width=\"1024\" height=\"578\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.39.45-1024x578.png 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.39.45-300x169.png 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.39.45-768x434.png 768w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.39.45.png 1190w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Vastauksena saadaan maksun tiedot, joissa on mukana payment-id:<\/p>\n<pre class=\"lang:js decode:true\" title=\"Maksun tallennuksen vastaus\">{\r\n    \"amount\": 10,\r\n    \"subject\": \"Akulle kymppi\",\r\n    \"currency\": \"EUR\",\r\n    \"payerIban\": \"FI1158400720088809\",\r\n    \"valueDate\": \"2018-02-17T17:26:37Z\",\r\n    \"receiverIban\": \"FI2350009421535899\",\r\n    \"receiverName\": \"Aku Ankka\",\r\n    \"paymentId\": \"9025aed0-1409-11e8-992f-270a594357b7\"\r\n}<\/pre>\n<p>Kokeillaan vahvistaa edell\u00e4 tallennettu maksu:<br \/>\n<a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.44.16.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-508\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.44.16-1024x534.png\" alt=\"\" width=\"1024\" height=\"534\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.44.16-1024x534.png 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.44.16-300x156.png 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.44.16-768x401.png 768w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-19.44.16.png 1388w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Vastauksena tulee <strong>200 OK<\/strong> ja vastauksen bodyss\u00e4 maksun tiedot:<\/p>\n<pre class=\"lang:js decode:true \" title=\"Maksun vahvistuksen vastaus\">{\r\n    \"amount\": 10,\r\n    \"subject\": \"Akulle kymppi\",\r\n    \"currency\": \"EUR\",\r\n    \"payerIban\": \"FI1158400720088809\",\r\n    \"valueDate\": \"2018-02-17T17:26:37Z\",\r\n    \"receiverIban\": \"FI2350009421535899\",\r\n    \"receiverName\": \"Aku Ankka\",\r\n    \"paymentId\": \"9025aed0-1409-11e8-992f-270a594357b7\"\r\n}<\/pre>\n<p>Kun nyt haetaan maksun tekemiseen k\u00e4ytetyn tilin tiedot, n\u00e4hd\u00e4\u00e4n ett\u00e4 saldo on v\u00e4hentynyt kympill\u00e4:<\/p>\n<p><code>GET https:\/\/sandbox.apis.op-palvelut.fi\/v1\/accounts\/https:\/\/sandbox.apis.op-palvelut.fi\/v1\/accounts\/5189f37b439bd02462e196e206d0318f094fca82<\/code><\/p>\n<pre class=\"lang:js decode:true \" title=\"Tilin tiedot maksun vahvistuksen j\u00e4lkeen\">[\r\n    {\r\n        \"accountId\": \"5189f37b439bd02462e196e206d0318f094fca82\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI1158400720088809\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 20980.82,\r\n        \"amountAvailable\": 20980.82,\r\n        \"currency\": \"EUR\"\r\n    }\r\n]<\/pre>\n<p>Ja vastaavasti tilill\u00e4 jonne maksu tehtiin, saldo on muuttunut 10 euroon:<\/p>\n<pre class=\"lang:js decode:true \">[\r\n    {\r\n        \"accountId\": \"064418ca1d292a5112e9804af4dc66df5b90203c\",\r\n        \"accountType\": \"710001\",\r\n        \"iban\": \"FI2350009421535899\",\r\n        \"bic\": \"OKOYFIHH\",\r\n        \"accountName\": \"K\u00c4YTT\u00d6TILI\",\r\n        \"balance\": 10,\r\n        \"amountAvailable\": 10,\r\n        \"currency\": \"EUR\"\r\n    }\r\n]<\/pre>\n<p><strong>Konttorihaku<\/strong><\/p>\n<p>Testataan viel\u00e4 lopuksi OP:n <a href=\"https:\/\/op-developer.fi\/docs#Mobility\" target=\"_blank\" rel=\"noopener\">Mobility<\/a> -moduulin Branches -rajapintaa eli rajapintaa jolla voi hakea OP:n konttoreita. Rajapinnalla voi hakea konttoreita tekstihaulla tai antamalla hakualueen. On my\u00f6s mahdollista tehd\u00e4 kysely, joka palauttaa l\u00e4himm\u00e4t konttorit annetusta pisteest\u00e4. Vastaus voi olla JSON tai <a href=\"https:\/\/en.wikipedia.org\/wiki\/GeoJSON\" target=\"_blank\" rel=\"noopener\">GeoJSON<\/a> -muodossa.<\/p>\n<p>Tehd\u00e4\u00e4n haku, joka hakee Tampereen Lielahden ymp\u00e4rist\u00f6st\u00e4 l\u00e4himm\u00e4t konttorit:<\/p>\n<p>GET<br \/>\n<a href=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-20.04.35.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-511\" src=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-20.04.35-1024x460.png\" alt=\"\" width=\"1024\" height=\"460\" srcset=\"https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-20.04.35-1024x460.png 1024w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-20.04.35-300x135.png 300w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-20.04.35-768x345.png 768w, https:\/\/www.pilvikoodari.net\/wp-content\/uploads\/2018\/02\/Screen-Shot-2018-02-17-at-20.04.35.png 1336w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Ja vastauksena tulee listaus konttoreista, l\u00e4hin ensimm\u00e4isen\u00e4:<\/p>\n<pre class=\"lang:js decode:true \" title=\"Konttorilistaus\">{\r\n    \"payload\": [\r\n        {\r\n            \"_id\": \"573209\",\r\n            \"name\": \"TAMPEREEN SEUDUN OSUUSPANKKI,LIELAHDEN KONTTORI\",\r\n            \"postcode\": \"33400\",\r\n            \"town\": \"TAMPERE\",\r\n            \"street\": \"POSSIJ\u00c4RVENKATU 1\",\r\n            \"openingHours\": \"To-Pe 10:00-16:30\",\r\n            \"location\": {\r\n                \"coordinates\": [\r\n                    23.6647452,\r\n                    61.51766199999999\r\n                ],\r\n                \"type\": \"Point\"\r\n            },\r\n            \"phoneNumber\": \"0102546011\",\r\n            \"branchType\": \"Peruspalvelun konttori\",\r\n            \"info\": \"Ajanvarauksella ma-pe klo 8-20. Kassapalv to,pe klo 10-16.30\"\r\n        },\r\n        {\r\n            \"_id\": \"553701\",\r\n            \"name\": \"TAMPEREEN SEUDUN OSUUSPANKKI,YL\u00d6J\u00c4RVEN KONTTORI\",\r\n            \"postcode\": \"33470\",\r\n            \"town\": \"YL\u00d6J\u00c4RVI\",\r\n            \"street\": \"MIKKOLANTIE 1-3\",\r\n            \"openingHours\": \"Ma-Pe 10:00-16:30\",\r\n            \"location\": {\r\n                \"coordinates\": [\r\n                    23.5961828,\r\n                    61.54879950000003\r\n                ],\r\n                \"type\": \"Point\"\r\n            },\r\n            \"phoneNumber\": \"0102546011\",\r\n            \"branchType\": \"T\u00e4ydenpalvelun konttori\",\r\n            \"info\": \"Ajanvarauksella ma-pe klo 8-20. Kassapalv ma-pe klo 10-16.30\"\r\n        },\r\n        {\r\n            \"_id\": \"573073\",\r\n            \"name\": \"TAMPEREEN SEUDUN OSUUSPANKKI,PIRKKALAN KONTTORI\",\r\n            \"postcode\": \"33960\",\r\n            \"town\": \"PIRKKALA\",\r\n            \"street\": \"SUUPANTIE 6\",\r\n            \"openingHours\": \"Ke 10:00-16:30\",\r\n            \"location\": {\r\n                \"coordinates\": [\r\n                    23.6463415,\r\n                    61.46603360000002\r\n                ],\r\n                \"type\": \"Point\"\r\n            },\r\n            \"phoneNumber\": \"0102546011\",\r\n            \"branchType\": \"T\u00e4ydenpalvelun konttori\",\r\n            \"info\": \"Ajanvarauksella ma-pe klo 8-20. Kassapalv ke klo 10-16.30\"\r\n        }\r\n\r\n        \/\/ t\u00e4ss\u00e4 lis\u00e4\u00e4 konttoreita, poistettu pilvikoodari.net listauksesta\r\n\r\n]<\/pre>\n<p><strong>Yhteenveto<\/strong><\/p>\n<p>Testasimme t\u00e4ss\u00e4 vain osan rajapinnoista. OP:lla on testattavissa my\u00f6s <a href=\"https:\/\/op-developer.fi\/docs#Wealth\">varallisuus-rajapinnat<\/a>.<\/p>\n<p>OP:n rajapintojen kautta on todella helppo hakea tili- ja maksutietoja sek\u00e4 tehd\u00e4 uusia maksuja. Kunhan rajapinnat tulevat oikeasti k\u00e4ytt\u00f6\u00f6n, omaan sovellukseen pit\u00e4\u00e4 viel\u00e4 rakentaa k\u00e4ytt\u00e4j\u00e4n tunnistautuminen pankin j\u00e4rjestelm\u00e4\u00e4n. T\u00e4ss\u00e4 demossa k\u00e4ytettiin kiinte\u00e4\u00e4 demo-tunnistautumista.<\/p>\n<p>Rajapinnat tilitapahtumille ja maksuille vaikuttavat varsin simppeleilt\u00e4 ja selkeilt\u00e4. Sovelluskehitt\u00e4jien on varmasti helppo toteuttaa perustoimintoja n\u00e4iden rajapintojen p\u00e4\u00e4lle.<\/p>\n<p>J\u00e4\u00e4mme odottelemaan rajapintojen lopullista julkaisua sek\u00e4 uusia hienoja sovelluksia!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yleist\u00e4 PSD2:sta EU:n maksupalveludirektiivi PSD (Payment Services Directive) uudistui ja PSD2 tuli voimaan p\u00e4\u00e4osin 13.1.2018. PSD2 koskee maksupalveluiden tarjoajia eli k\u00e4yt\u00e4nn\u00f6ss\u00e4 pankkeja ja muita maksupalveluiden tarjoajia. PSD2:n mukana pankeille tulee vaatimus, ett\u00e4 niiden on avattava rajapinnat kolmannen osapuolen palveluille (Third Party Provider, TPP). Rajapintojen kautta kolmas osapuoli p\u00e4\u00e4see k\u00e4sittelem\u00e4\u00e4n maksupalveluiden tarjoajien tilitietoja ja tekem\u00e4\u00e4n erilaisia &#8230; <a title=\"OP:n PSD2-rajapinnan kokeilu\" class=\"read-more\" href=\"https:\/\/www.pilvikoodari.net\/?p=489\" aria-label=\"Lue lis\u00e4\u00e4 aiheesta OP:n PSD2-rajapinnan kokeilu\">Lue lis\u00e4\u00e4<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,15],"tags":[],"class_list":["post-489","post","type-post","status-publish","format-standard","hentry","category-json","category-psd2"],"_links":{"self":[{"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/posts\/489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=489"}],"version-history":[{"count":29,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/posts\/489\/revisions"}],"predecessor-version":[{"id":531,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=\/wp\/v2\/posts\/489\/revisions\/531"}],"wp:attachment":[{"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pilvikoodari.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}