0

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

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

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,我很确定它可以正常工作,因为没有图像服务器会按应有的方式响应(它可以工作!)

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

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

这是带有工作 PHP 代码 的网站 网站是波兰语,但代码是 PHP

最后,这里是 波兰语的文档,但在“Przykłady wywołań”选项卡下包括英文命名和附加 PHP 代码

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


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

4

1 回答 1

1

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

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

于 2013-08-19T14:12:44.830 回答