2016-07-12 12 views
0

seit einem halben Jahr versuche ich nun ein Bas64 kodiertes PDF aus meiner Rails-App zu einem Auftrag in Plentymarkets via SOAP mit savon hinzuzufügen. Dies funktionierte nicht so frei und einfach wie beschrieben, daher kontaktierte ich das Plenty-Support-Team, wo mir mitgeteilt wurde, dass der Fehler meine Base64-Zeichenfolge mit Zeilenumbrüchen betrifft. Also habe ich:Savon fügt Absätze zu Base64 String hinzu

file = open(@kvas.pdf_attachment.url).read 
    @data = Base64.encode64(file).gsub(/\n/, '') 

Aber obwohl ich strict_encode64 versucht, url_save_encode64 und einige Variationen von .gsub("this",'that'), Tonnen von Threads gelesen ‚bout Base64-Kodierung ich durchweg mit Zeilenumbrüche und Absätze in der Base64-String am Ende gezeigt in der xml-Anfrage, die über savon gesendet wurde. Gedit zeigt den aus der Anfrage kopierten String in gleicher Weise beschädigt, mit Zeilenumbrüchen, beginnend mit + (jeder + provoziert eine neue Zeile) oder / (hier ist es eher sporadisch) bis ich den automatischen Zeilenwechsel umschalte. Interpretiert Savon Zeilenumbrüche in die Base64-Zeichenfolge? und kann ich dieses Verhalten ausschalten?

mein hier Savon Aufruf:

client = Savon.client(
     :wsdl => @settings.wsdladdr, 
     :soap_header => { 
       "verifyingToken" => { 
       "UserID" => @tokens.userid, 
       "Token"=> @tokens.token 
       }}, 
     :open_timeout => 20, 
     :read_timeout => 20, 
     :pretty_print_xml => false, 
     :log => false, 
     :mime_multipart => true 
    ) 

response = client.call(:add_document, message: {:oPlentySoapRequest_AddDocument => {"DocumentList"=>{"item"=>{"OrderDocumentType"=>"RepairBill", "Document"=>{"FileData"=> "#{@data}","FileEnding"=>".pdf", "FileName"=>"66667"}, "OrderID" =>"4009", "CallItemsLimit"=>"1"}}}}) 

Antwort

0

Nun, nach einem halben Jahr nach oben und unten im Netz versuchen, alles, habe ich eine Antwort (einen Tag nach der Einlieferung dieser Frage) Es ist alles leicht gefunden:

Base64.encode64(Base64.encode64(file)).sub(/\n/, '') 

das hat der Trick jetzt die base64 String ist ein one_liner , die daran denken würde? Eine doppelt codierte Base64-String ??? !!! Ich muss sagen, eine gute Dokumentation erspart Ihnen viele Probleme

Verwandte Themen