2013-08-19 1 views
0

allegro.pl (ebay.com을 대신 할 수있는 대안)에 SOAP API를 사용하고 SOAP을 통해 이미지를 보내는 데 문제가 있습니다. 공식 포럼에서 같은 질문을하고 있었지만 불행히도 아무도 대답하지 못했습니다.ruby ​​/ savon을 사용하여 SOAP를 통해 base64binary (이미지)를 보냅니다.

어쨌든, PHP에서 (조각) 코드 (SOAP 메시지)를 작동하면 해당 같습니다

array(
'fid' => 16, 
'fvalueImage' => file_get_contents('http://www.stropna_www.pl/images/obrazek.jpg') 

참고이 전체 SOAP 메시지가 아니라 만들어진이 한 날이 밤 자고하지

그리고 잘 작동합니다. 설명서가 제대로 작동하지 않기 때문에 PHP를 사용하지 않아서 확신 할 수 없습니다. 내가 루비에서 file_get_contents에 대한 동등한를 찾고 있었다 나는 그물/HTTP와를 사용하려고 한 URL에서 파일을 열 오픈 URI 심지어

img = File.open('img.jpg', 'rb') { |f| f.read } 

하지만, 서버가 반환을 시도 할 때마다 사용하려고 잘못된 XML.

이미지없이 요청을 보내려고하면 제대로 작동합니다.


여기에 루비의 전체 ​​코드입니다 :

def self.do_new_auction_ext 
img = File.open('img.jpg', 'rb') { |f| f.read } 

xml_message = prepare_message("DoNewAuctionExtRequest", { 
    :sessionHandle => self.session_id, 
    :fields => [ 
    { :fid => 1,        # Tytuł 
     :fvalueString => "Oferta Testowa ze zdjeciem", },  # TODO: Zmienne? 
    { :fid => 2,        # Kategoria 
     :fvalueInt => 1834 },      # TODO: Zmienne? 
    { :fid => 4,        # Czas trwania 
     :fvalueInt => 3 },       # 1 - 3 dni, 2 - 7 dni, 3 - 10 dni 
    { :fid => 5,        # Ilość 
     :fvalueInt => 12},       # TODO: Zmienne? 
    { :fid => 8,        # Cena kup teraz 
     :fvalueFloat => 50.00},      # TODO: Zmienne? 
    { :fid => 9,        # Kraj 
     :fvalueInt => 228},       # 1 - Polska, 228 - Neverland 
    { :fid => 10,        # Wojewodztwo 
     :fvalueInt => 215},       # Lewopolskie 
    { :fid => 11,        # Miejscowość 
     :fvalueString => "Bielsko-Biala"}, 
    { :fid => 14,        # Formy platnosci 
     :fvalueInt => 1 },       # Płatne z góry przelewem 
    { :fid => 16,        # Zdjecie 1 
     :fvalueString => img }, 
    #{ :fid => 15,        # Opcje dodatkowe 
    # :fvalueInt => 2}, 
    { :fid => 24,        # Opis 
     :fvalueString => "konik"}, 
    { :fid => 28,        # Sztuki/Komplety/Pary 
     :fvalueInt => 1}, 
    { :fid => 32,        # Kod pocztowy 
     :fvalueString => "43-300"}, 
    { :fid => 35,        # Darmowe opcje przesylki 
     :fvalueInt => 2}       # 1 - Odbior osobisty, 2 - e-mail, 4 - Odbior osobisty po przedplacie 
    ] 
}) 

# puts xml_message 

response = @client.call(:do_new_auction_ext) do 
    xml xml_message 
end 

괜찮다 폴란드어 의견

prepare_message의 기능은 서버로 이동 XML을 생성, 그리고 꽤 있어요 그것으로 제대로 작동하는지 w/o 이미지로 서버가 응답해야합니다 (작동합니다!)

그러나, 함께 전자 이미지는 서버가

{:fault=>{:faultcode=>"Sender", :faultstring=>"Invalid XML"}} 

으로 대응 전송 여기 website with working PHP code웹 사이트는 폴란드어에있는,하지만 코드는 PHP에서 폴란드어도의 here is the documentation마지막

및이지만, 영어 이름 및 추가를 포함 "아래에있는 코드"탭

Ruby 1.9.3 및 savon을 사용하여 모든 SOAP 요청을 보내고 있습니다 (작동하지만 이미지를 보내는 것은 아닙니다).


텍스트 벽에 사과드립니다. 가능한 한 최선을 설명하려고했습니다. 어떤 도움에 미리 감사드립니다, 그리고 심지어 읽어 주셔서 감사합니다이 :

답변

1

I 같은 이미지 콘텐츠를 인코딩하기 위해 노력하겠다고 :

Base64.encode64(File.binread('path_to_your_file')