Php 使用ruby/savon通过SOAP发送base64binary(图像)

Php 使用ruby/savon通过SOAP发送base64binary(图像),php,ruby,soap,savon,Php,Ruby,Soap,Savon,我正在为allegro.pl(ebay.com的波兰替代品)使用SOAP api,我在通过SOAP发送图像方面有点问题。我在官方论坛上问了同样的问题,但不幸的是没有人回答 无论如何,PHP中的工作(一段)代码(soap消息)如下所示: array( 'fid' => 16, 'fvalueImage' => file_get_contents('http://www.stropna_www.pl/images/obrazek.jpg') 注意,这不是一条完整的soap消息,但这条

我正在为allegro.pl(ebay.com的波兰替代品)使用SOAP api,我在通过SOAP发送图像方面有点问题。我在官方论坛上问了同样的问题,但不幸的是没有人回答

无论如何,PHP中的工作(一段)代码(soap消息)如下所示:

array(
'fid' => 16,
'fvalueImage' => file_get_contents('http://www.stropna_www.pl/images/obrazek.jpg') 
注意,这不是一条完整的soap消息,但这条消息让我今晚睡不着觉

而且它是有效的(好吧,在文档中它是有效的,我不能确定,因为我没有使用PHP(我也不知道它))我在ruby中寻找与file\u get\u 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,我很确定它能够正常工作,因为没有映像,服务器会按它应该的方式响应(它可以工作!)

但是,随着图像的发送,服务器以

{:fault=>{:faultcode=>"Sender", :faultstring=>"Invalid XML"}}
这里的网站是波兰语的,但代码是PHP的

最后,它也是波兰语的,但在“Przykłady wywołań”选项卡下包含了英语命名和其他PHP代码

我正在使用Ruby 1.9.3和savon发送所有SOAP请求(这是可行的,但发送图像却不行)


很抱歉,我在尽我所能解释这一点。
提前感谢您的帮助,甚至感谢您阅读本文:)

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

Base64.encode64(File.binread('path\u to\u your\u File')