Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Matkahuolto XML API

Sivun loppuun

Olli [28.06.2012 15:46:49]

#

Aloin kokeilemaan Matkahuollon XML API:a. Esimerkkikoodi palauttaa kuitenkin vain tyhjän pdf-tiedoston nimeltään .pdf. Osaisikohan joku sanoa, missä on vika?

Olli [29.06.2012 15:55:40]

#

Eikö kukaan ehtisi perehtyä tähän?

Metabolix [29.06.2012 15:59:52]

#

Oletko tarkistanut mahdolliset virheilmoitukset?

Olli [29.06.2012 18:39:36]

#

Hei,
Tarkistin kyllä, mutta virheilmoituksia ei tule. Voisitkohan mahdollisesti kokeilla toimiiko sinun palvelimellasi?

neau33 [29.06.2012 20:19:39]

#

Moi Olli!

Oletan, että testaat ko. XML APIa PHP-ympäristössä, koska PHP jyllää putkassa nettisivuista puhuttaessa jotenkin perinteisesti.

Laitoin taannoin mureakuhaan esimerkin jutskan toiminnasta VBA-näkökulmsta. Jos VB/VBA on sinulle mitenkään tuttua niin ymmärrät jutskan toiminnan tutkimalla kuhaan pukkaamaani koodia sekä myöhempiä selityksiäni samaisella sivulla.

Olli [29.06.2012 20:48:58]

#

neau33:

Valitettavasti ko. kielistä ei ole lainkaan kokemusta, ja niinpä koodit eivät sano minulle paljonkaan. Voisitkohan sinä kokeilla tuota PHP-koodia omalla serverilläsi?

PHP:tä tosiaan käytän, kuten esimerkkikoodistakin voi päätellä :)

Macro [29.06.2012 21:01:57]

#

No jos yhtään osaat ohjelmoida, niin selvittämällä nuo VB:n funktioiden nimien takana olevat toiminnot saat tosta hyvinkin selvää. Ei se perusrakenne ohjelmoinnissa paljon muutu.

Olli [29.06.2012 21:05:22]

#

Niin, mutta eikö joku nyt vain voisi testata tuon Matkahuollon skriptin, että toimiiko se ollenkaan vai onko vika vain omassa sivutilassani?

Macro [29.06.2012 21:06:19]

#

Aika kumma weppihotelli sulla, jos se rikkoo tiettyjä koodeja.

Olli [29.06.2012 21:13:30]

#

Tuskinpa se rikkoo, mutta PHP versio saattaa olla väärä, joku funktio voi olla pois käytöstä. Sen sijaan että väittelemme tästä, voisitko sinä tai joku muu kokeilla tuon koodin toimivuutta?

Macro [29.06.2012 21:14:39]

#

Hieno PDF-tiedosto tuli.

Metabolix [29.06.2012 21:26:22]

#

Minulla koodi toimii ja tuottaa 32 kilotavun kokoisen tiedoston, jonka nimi on 'MH400091254FI.pdf' (hipsujen kanssa; tekijä ei taida olla mikään guru) ja joka yllättäen kelpaa Linuxin evince-ohjelmalle, vaikka alussa on ylimääräinen BOM (tekijä ei todellakaan taida olla guru).

Jos tulosteen puskuroinnin (output_buffering) ottaa pois päältä, tulee pari virheilmoitusta header-riveistä ja tiedosto ei luonnollisestikaan toimi. Vähintäänkin siis tiedoston alun BOM pitäisi poistaa, ja tuosta kannattaisi myös ilmoittaa koodin tekijälle, jos nyt häntä edes kiinnostaa.

Olli [29.06.2012 21:28:27]

#

Jaa, siis ei tyhjä vaan matkahuollon tekstejä siinä?

The Alchemist [29.06.2012 21:29:43]

#

Minä jäin ihmettelemään tuota tapaa alustaa luokan jäsenmuuttujat. Olisi vain tuon taulukko-silmukkahärpäkkeen sijaan suoraan määritellyt jokaisen muuttujan normaaliin tapaan luokan alkuosassa, sama tulos. (Paitsi että tyhjän stringin sijaan alkuarvo olisi null, mutta semanttinen merkitys lienee sama.)

Jos noppa osuu kohdilleen, niin tuo annettu skripti tuottaa PDF:n joistain laskun näköisistä lirpakkeista.

Olli [29.06.2012 21:29:45]

#

Osaatko sanoa mikä voisi olla vikana, kun itsellä tuo ei toimi?

Metabolix [29.06.2012 21:32:58]

#

No en tiedä, mikä mielestäsi on "tyhjä PDF", mutta minusta tämä ei ole tyhjä: http://fpaste.dy.fi/mb6/disp

Edelleenkin sinuna etsisin niitä virheilmoituksia. Ne eivät oletusasetuksilla yleensä tule näkyviin, mutta ne voi säätää näkyviksi tai niitä voi etsiä palvelimen lokitiedostoista.

Olli [29.06.2012 21:39:33]

#

Juu, tuo on juuri oikea tulos.

Laitoin tämän tiedoston alkuun:

ini_set("display_errors", 1);
ini_set("error_reporting", E_ALL | E_STRICT);

ja kommentit näille riveille:

//header("Content-type:application/pdf");
//header("Content-Disposition:attachment;filename='$this->ShipmentNumber.pdf'");

Palautuksena edelleen vain tyhjä tiedosto.

Mbnet on sivutila jossa tuota testaan. PHP-versio 5.2.6

E: Kokeilin toisella serverillä, ja siellähän tuo toimii. Mikähän vika MBnetin serverissä sitten on?

Metabolix [29.06.2012 23:08:47]

#

Puuttuvista funktioista tai luokista tulee mahdollisesti fataali virhe, jota PHP ei näytä. Tarkista, että cURL on käytössä, ja katso palvelimen virhelokia.

Alkoi ärsyttää tuo ruma purkkakoodi niin paljon, että tein oman version, joka on lyhyempi ja selvempi ja heittelee virhetilanteissa poikkeuksia, jotka on helppo ottaa kiinni.

neau33 [30.06.2012 06:16:14]

#

Moi taas Olli!

Jutska on niin, että kun lähetät matkahuollon testipalveluun validin XML tiedoston (joka sisältää palvelun vaatimat pakolliset tiedot) httprequestina niin saat palautteena XML tiedoston, jonka yksi solmu sisältää pdf-tiedoston datan. Tämä data on koodattu Base64Encode systeemillä, joten se on purettava Base64Decode systeemillä, joka sitten tallennetaan pdf-tiedostoksi. Pdf tiedoston nimen saa parsittua ShipmentNumber solmun sisällöstä, kun siihen lisätään tiedostopäätteeksi ".pdf".

neau33 kirjoitti:

(vapaa lainaus mureakuhasta)

Kun ohjelmalla lähettään uusi (N) niin palautteena tulee xml-dataa, jonka yksi solmu sisältää Base64Encode systeemillä koodatun .pdf-tiedoston datan, jonka ohjelma sitten purkaa Base64Decode-funktiossa ja tallentaa nimellä, joka muodostuu xml.datan ShipmentNumber solmun tekstistä + ".pdf" -merkkijonosta...

Jos lähtyksen tietoja halutaan muuttaa (C) niin xml-data ei ole lainkaan samaa, joka lähetetään (N) valinnalla. Elikä jos sama xmldata lähetetään C valinnalla niin testipalvelu palauttäa virheviestin vain merkkijonona, joka ei sisällä solmua ErrorMsg. Elikä ei riitä, että xml-datasta, joka palautetaan kun lähetetään uusi tallennetaan vain purettu ShipmentPdf solmun data, vaan koko palautettu xml on myös tallennettava XML-muodossa. Tämän tallennetun .xml tiedoston datasta voidaan sitten parsia uusi xml-merkkijono, joka lähetetään matkahuollon palveluun ja palautteena saadaan XML-dataa lähetystietoihin tehtyjen muutosten mukaan...

Jos koko lähetyksen tiedot halutan poistaa (D) niin jutska meenee lähettämisen osalta samaan malliin, kuin muuttaminen, mutta palautteena tulee vain merkkijono ~ 'HOMMA BUENO!' (Matkahuollon testipalvelu ei tallenna palvelimelle mitään)

Matkahuollon PHP esimerkki toimii ainakin WebMatrix/IE ympäristössä aivan OK lukuun ottamatta yhtä hipsua tiedostonimen edessä jos .pdf-tiedoston haluaa tallentaa suoraan.

Minulla on valmiit ASP.NET, VB.NET WinForms sekä VBA ohjelmat Matkahuollon pakettipalvelun käyttöön eikä juuri lainkaan mielenkiintoa PHP-skriptien kanssa äheltämiseen (vain pakon edessä), joten se siitä.

Mikäli VBA-demon testaaminen jotakuta kiinnostaa niin viritelmän voi impata täältä

Olli [30.06.2012 08:24:42]

#

Kiitoksia Metabolix tuosta, nyt antaa virheilmoituksen:
cURL: 35: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Taitaa olla niin että MBnet ei tue CURL:in https-protokollaa. Tuota ei voi varmaan ottaa itse käyttöön mitenkään?

Lisäys:

Osaatteko muuten sanoa, mitä viivakoodityyppiä Matkahuolto käyttää? Ajattelin tehdä itse omat tarrat, enkä käyttää tuota Matkahuollon valmispohjaa, jossa on noin monta tarraa joka kerta.
Esimerkkinä vaikka Metabolixin http://fpaste.dy.fi/mb6/disp

Metabolix [30.06.2012 10:49:42]

#

Viivakoodi näyttää olevan tapotavallinen Code 39. Muutin omaa esimerkkiäni niin, että käytössä on file_get_contents eikä cURL; kokeilepa vielä sitä.

Olli [30.06.2012 11:53:10]

#

Metabolix kirjoitti:

Viivakoodi näyttää olevan tapotavallinen Code 39. Muutin omaa esimerkkiäni niin, että käytössä on file_get_contents eikä cURL; kokeilepa vielä sitä.

Mitä PHP-kirjastoa suosittelisit Code 39 -viivakoodin luontiin? Tällaista virheilmoitusta antaa tuo uudempi:
file_get_contents(https://mhhkiweb1.matkahuolto.fi/scripts101c/mhshipmentxmltesti.wsc/ovtinxml) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: Success

Metabolix [30.06.2012 12:04:13]

#

Ehkä MBnet ei sitten salli HTTPS:ää millään, tai ehkä heidän OpenSSL-kirjastonsa on jotenkin häiriintynyt.

Code 39 -viivakoodi on sinänsä helppo luoda, joten kuvan (tai nettisivulle jopa HTML-koodin) varmasti tekisin itse. PDF:ään käyttäisin jotain valmista kirjastoa, niitä varmasti löytyy netistä, yritä välillä googlettaa itsekin.

Olli [30.06.2012 12:33:29]

#

Hei,

Löytyi netistä sopiva Code 39 -kirjasto. Käytän sitten tuota toista serveriä testailuun, kun mbnet ei kerta toimi tuon kanssa.
Kiitoksia sinulle ja muillekin vinkeistä!

Lisäys:

Katsoin nuita, mutta vertaa näitä kuvia:
http://www.racoindustries.com/barcodegenerator/1d/barcode-image.axd?S=Code39&BH=0.8&BW=0.02&BM=0.25&C­=MH400091268FI&DC=T&DSSC=T&EXT=T&IFMT=Gif&QZ=0.25&TM=0.25
ja sitten PDF-tiedoston viivakoodia
http://fpaste.dy.fi/mb6/disp

Mielestäni viivat ei mene samalla lailla molemmissa. Niin ei taida tuo Matkahuollon viivakoodi olla CODE 39 ?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta