Autor Zpráva
quiced
Profil
Zdravím,

snažím se zprovoznit posílání XML dat přes cURl, ale bohužel mi to vůbec nejde a chtěl bych někoho ochotného požádat o pomoc. Nejlepší bude když zde rovnou napíšu svůj kód:

<?php
$url = 'http://xml.surtep.cz/ObjI/?strUsername=xxx&strPassword=xxx';
   $post_data = '
<SurtepXML>
<ObjI>
    <Item>
        <Oznaceni></Oznaceni><!-- nepovinny parametr - slouzi pouze pro vasi identifikaci v pripade chyboveho vystupu -->
        <Kontakt><!-- nepovinny parametr - bude prevzato z nastaveni Osobnich udaju -->
            <Jmeno>Test</Jmeno>
            <Prijmeni>Test</Prijmeni>
            <Email>test@test.cz</Email>
            <Telefon>123456789</Telefon>
            <Skype></Skype>
            <ICQ></ICQ>
        </Kontakt>

        <DodAdr><!-- nepovinny parametr - bude prevzato z nastaveni Osobnich udaju -->
            <Ulice>Test</Ulice>
            <CP>10</CP>
            <Misto>Test</Misto>
            <PSC>12345</PSC><!-- zkontrolujte existenci v ciselniku xml.surtep.cz/PSC -->
            <Stat>Test</Stat><!-- vyplnte dle ciselniku xml.surtep.cz/Staty -->
        </DodAdr>

        <FaktAdr><!-- nepovinny parametr - bude prevzato z nastaveni Osobnich udaju -->
            <Firma>Test</Firma>
            <IC></IC>
            <DIC></DIC>
            <Ulice>Test</Ulice>
            <CP>10</CP>
            <Misto>Test</Misto>
            <PSC>12345</PSC><!-- zkontrolujte existenci v ciselniku xml.surtep.cz/PSC -->
            <Stat>Test</Stat><!-- vyplnte dle ciselniku xml.surtep.cz/Staty -->
        </FaktAdr>

        <Poznamka></Poznamka>
        <Doprava>1</Doprava><!-- vyplnte ID dle ciselniku xml.surtep.cz/Doprava -->
        <Platba>5</Platba><!-- vyplnte ID dle ciselniku xml.surtep.cz/Platba -->

        <Polozky>
            <Item>
                <Katalog>27</Katalog>
                <Mnozstvi>1</Mnozstvi>
                <Cena></Cena><!-- nepovinny parametr - vyssi cena nez prodejni bude zapocitana do provizniho systemu, nizsi cena nebude prijata -->
            </Item>
        </Polozky>
    </Item>
</ObjI>
</SurtepXML>
    ';
  $ch = curl_init();
  curl_setopt( $ch, CURLOPT_URL, $url );
  curl_setopt( $ch, CURLOPT_POST, true );
  curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_data);
  $result = curl_exec($ch);
  curl_close($ch);
  var_dump($result);
  exit;

Celý ten kód by měl sloužit pro odeslání objednávky do systému surtep.cz nicméně jejich systém mi stále vrací chybovou hlášku, že jim tam zasílám špatná data. Bohužel více informací nemám, jediné co píšou je, že data k nim se mají posílat v XML stringu a přes POST požadavek. Mohl byste se někdo prosím podívat na ten kód a napsat mi zda tam nemám nějakou chybu v posílání dat.

Děkuji za ochotu.

Michal
quatzael
Profil
A posíláš jim tam ve skutečnosti opravdový správně vyplněný request nebo to co to tady uvádíš, tak jak je?

Zaáleží jestli Ti to píše, že posíláš špatnej request jako takovej nebo jestli přímo v něm máš špatný data..

Můžeš případně ještě zkusit tohle, ale bez toho, abych o tom věděl víc je to spíš jenom hádání:
$headers = array(
                        "Content-Type: application/xml-dtd;charset=UTF-8;",
                        "Accept: text/xml",
                        "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)",
                        "Connection: Keep-Alive", 
                        "Content-length: ".strlen($post_data)
                    ); 
                    
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
             curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
  curl_close($ch);
  var_dump($result);            
quiced
Profil
Posílám jim tam přesně ty data, která zde uvádím, jedinou informaci, kterou jsem od nich dostal je, že mají povinně pole číslo popisné jinak jejich systém nenapíše jestli tam ty data prolezla nebo ne to je ten problém. Vyzkouším to co jsi napsal. Díky
quatzael
Profil
No tak se nad tím zamysli. Jestli jim opravdu posíláš tohle, tak to fakt neprojde..

<Stat>Test</Stat><!-- vyplnte dle ciselniku xml.surtep.cz/Staty -->
quiced
Profil
Takže upravil jsem to do této podoby:

<?php
$url = 'http://xml.surtep.cz/ObjI/?strUsername=mirtom&strPassword=grace';
   $post_data = '
<SurtepXML>
<ObjI>
    <Item>
        <Oznaceni></Oznaceni><!-- nepovinny parametr - slouzi pouze pro vasi identifikaci v pripade chyboveho vystupu -->
        <Kontakt><!-- nepovinny parametr - bude prevzato z nastaveni Osobnich udaju -->
            <Jmeno>Test</Jmeno>
            <Prijmeni>Test</Prijmeni>
            <Email>folprecht.mi@gmail.com</Email>
            <Telefon>123456789</Telefon>
            <Skype></Skype>
            <ICQ></ICQ>
        </Kontakt>

        <DodAdr><!-- nepovinny parametr - bude prevzato z nastaveni Osobnich udaju -->
            <Ulice>Test</Ulice>
            <CP>27</CP>
            <Misto>Test</Misto>
            <PSC>29404</PSC><!-- zkontrolujte existenci v ciselniku xml.surtep.cz/PSC -->
            <Stat>Czech Republic</Stat><!-- vyplnte dle ciselniku xml.surtep.cz/Staty -->
        </DodAdr>

        <FaktAdr><!-- nepovinny parametr - bude prevzato z nastaveni Osobnich udaju -->
            <Firma>Test</Firma>
            <IC></IC>
            <DIC></DIC>
            <Ulice>Test</Ulice>
            <CP>27</CP>
            <Misto>Test</Misto>
            <PSC>29404</PSC><!-- zkontrolujte existenci v ciselniku xml.surtep.cz/PSC -->
            <Stat>Czech Republic</Stat><!-- vyplnte dle ciselniku xml.surtep.cz/Staty -->
        </FaktAdr>

        <Poznamka></Poznamka>
        <Doprava>1</Doprava><!-- vyplnte ID dle ciselniku xml.surtep.cz/Doprava -->
        <Platba>5</Platba><!-- vyplnte ID dle ciselniku xml.surtep.cz/Platba -->

        <Polozky>
            <Item>
                <Katalog>27</Katalog>
                <Mnozstvi>1</Mnozstvi>
                <Cena></Cena><!-- nepovinny parametr - vyssi cena nez prodejni bude zapocitana do provizniho systemu, nizsi cena nebude prijata -->
            </Item>
        </Polozky>
    </Item>
</ObjI>
</SurtepXML>
    ';
$headers = array(
                        "Content-Type: application/xml-dtd;charset=UTF-8;",
                        "Accept: text/xml",
                        "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)",
                        "Connection: Keep-Alive", 
                        "Content-length: ".strlen($post_data)
                    ); 
                    
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
             curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
  curl_close($ch);
  var_dump($result);

Díky za poznámku ohledně dat to chyba byla nicméně pořád mi jejich systém hází toto: "ne-validni format strData"

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: