0

allegro.pl (ebay.com の洗練された代替手段) に SOAP API を使用していますが、SOAP を介して画像を送信する際に少し問題があります。公式フォーラムで同じ質問をしましたが、残念ながら誰も答えていません。

とにかく、PHP で動作する (一部の) コード (soap メッセージ) は次のようになります。

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

これは完全な石鹸メッセージではないことに注意してください。

そして、それは機能します(まあ、ドキュメントでは機能しますが、私はPHPを使用していないので確信が持てません(私もそれを知りません))。ルビーで 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コードが機能するWebサイトがあります Webサイトはポーランド語ですが、コードはPHPです

最後に、これも洗練されたドキュメントですが、 「Przykłady wywołań」タブの下に英語の名前と追加の PHP コードが含まれています。

Ruby 1.9.3 と savon を使用してすべての SOAP リクエストを送信しています (これは機能しますが、画像の送信は機能しません)。


テキストの壁については申し訳ありませんが、私はできる限りこれを説明しようとしていました. 助けてくれてありがとう、そしてこれを読んでくれてありがとう:)

4

1 に答える 1