Aloin kokeilemaan Matkahuollon XML API:a. Esimerkkikoodi palauttaa kuitenkin vain tyhjän pdf-tiedoston nimeltään .pdf
. Osaisikohan joku sanoa, missä on vika?
Eikö kukaan ehtisi perehtyä tähän?
Oletko tarkistanut mahdolliset virheilmoitukset?
Hei,
Tarkistin kyllä, mutta virheilmoituksia ei tule. Voisitkohan mahdollisesti kokeilla toimiiko sinun palvelimellasi?
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.
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ä :)
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.
Niin, mutta eikö joku nyt vain voisi testata tuon Matkahuollon skriptin, että toimiiko se ollenkaan vai onko vika vain omassa sivutilassani?
Aika kumma weppihotelli sulla, jos se rikkoo tiettyjä koodeja.
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?
Hieno PDF-tiedosto tuli.
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.
Jaa, siis ei tyhjä vaan matkahuollon tekstejä siinä?
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.
Osaatko sanoa mikä voisi olla vikana, kun itsellä tuo ei toimi?
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.
Juu, tuo on juuri oikea tulos.
Laitoin tämän tiedoston alkuun:
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?
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.
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ä
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
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ä.
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/
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.
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/
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 ?
Aihe on jo aika vanha, joten et voi enää vastata siihen.