Php 使用ruby/savon通过SOAP发送base64binary(图像)
我正在为allegro.pl(ebay.com的波兰替代品)使用SOAP api,我在通过SOAP发送图像方面有点问题。我在官方论坛上问了同样的问题,但不幸的是没有人回答 无论如何,PHP中的工作(一段)代码(soap消息)如下所示: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消息,但这条
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')