使用ruby / savon通过SOAP发送base64binary(image)

时间:2013-08-19 13:49:10

标签: php ruby soap savon

我正在使用SOAP api for allegro.pl(ebay.com的抛光替代品),而且我通过SOAP发送图像有一个小问题。我在官方论坛上提出了同样的问题,但遗憾的是没有人回复。

无论如何,PHP中的工作(片段)代码(soap消息)看起来像这样:

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

请注意,这不是一个完整的肥皂消息,但是这个让我今晚不睡觉的消息

它的工作原理(好吧,在它工作的文档中,我不能确定,因为我不使用PHP(我也不知道))。 我在ruby中寻找等效的file_get_contents ,我试图使用net / http和open-uri从url打开文件,甚至尝试使用

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

但每次尝试时,服务器都会返回无效的XML。

当我尝试发送没有图片的请求时,它可以正常工作。


这是Ruby中的完整代码:

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 它也很流行,但包括英文命名和“Przykładywywoła”标签下的其他PHP代码

我正在使用Ruby 1.9.3和savon来发送所有SOAP请求(这有效,但发送图像却没有)。


为文本墙道歉,但我试图尽力解释这一点。 在此先感谢您的帮助,感谢您阅读本文:)

1 个答案:

答案 0 :(得分:1)

我会尝试对图像内容进行编码,如:

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