Einzelnen Beitrag anzeigen

smartmod

Registriert seit: 11. Jul 2005
26 Beiträge
 
#1

XML an einen HTTPS Server übergeben und Response auswerten

  Alt 24. Apr 2007, 11:20
Hallo ihr Lieben,

ich versuche ein Programm zu schreiben, mit dem ich meinen OsCommerce Shop besser und effektiver nutzen kann.
Ein Teil davon soll eine automatische Shipping Lösung für UPS werden.

Ich habe einen Entwicklerschlüssel und somit auch Zugriff auf die UPS Online Tools.

So, jetzt weiß ich aber nicht weiter.

Ich versuche seit 3 Tagen ein Request, wie es in der Entwicklerhilfe beschrieben ist, an den UPS Server zu senden. EIne Verbindung zum Server kriege ich wohl hin, der Server beendet sie aber nach dem Post.

Mein Code sieht aktuell folgendermaßen aus:

Delphi-Quellcode:
procedure TForm1.Button10Click(Sender: TObject);

var
  request: TStrings;
  response: TStringStream;

begin
  request := TStringlist.Create;
  response := TStringStream.Create('');

request.Add('<?xml version="1.0"?>');
request.Add('<AccessRequest xml:lang="en-US">');
request.Add('<AccessLicenseNumber>5BC0971811XXXXX</AccessLicenseNumber>');
request.Add('<UserId>smartmod</UserId>');
request.Add('<Password>XXXXXXXX</Password>');
request.Add('</AccessRequest>');
request.Add('<?xml version="1.0"?>');
request.Add('<ShipmentConfirmRequest xml:lang="en-US">');
request.Add('<Request>');
request.Add('<TransactionReference>');
request.Add('<CustomerContext>Ship Confirm / nonvalidate</CustomerContext>');
request.Add('<XpciVersion>1.0001</XpciVersion>');
request.Add('</TransactionReference>');
request.Add('<RequestAction>ShipConfirm</RequestAction>');
request.Add('<RequestOption>nonvalidate</RequestOption>');
request.Add('</Request>');
request.Add('<LabelSpecification>');
request.Add('<LabelPrintMethod>');
request.Add('<Code>GIF</Code>');
request.Add('</LabelPrintMethod>');
request.Add('<HTTPUserAgent>Mozilla/5.0</HTTPUserAgent>');
request.Add('<LabelImageFormat>');
request.Add('<Code>GIF</Code>');
request.Add('</LabelImageFormat>');
request.Add('</LabelSpecification>');
request.Add('<Shipment>');
request.Add('<Description>DescriptionofGoodsTest</Description>');
request.Add('<Shipper>');
request.Add('<Name>Smartmod</Name>');
request.Add('<AttentionName>Jan Petermann</AttentionName>');
request.Add('<PhoneNumber>06996860470</PhoneNumber>');
request.Add('<ShipperNumber>W2217V</ShipperNumber>');
request.Add('<Address>');
request.Add('<AddressLine1>Bertha-von-Suttner-Ring 8</AddressLine1>');
request.Add('<City>Frankfurt am Main</City>');
request.Add('<PostalCode>60598</PostalCode>');
request.Add('<CountryCode>DE</CountryCode>');
request.Add('</Address>');
request.Add('</Shipper>');
request.Add('<ShipTo>');
request.Add('<CompanyName>Smartmod</CompanyName>');
request.Add('<AttentionName>Jan Petermann</AttentionName>');
request.Add('<PhoneNumber>069686440</PhoneNumber>');
request.Add('<Address>');
request.Add('<AddressLine1>Bertha-von-Suttner-Ring 8</AddressLine1>');
request.Add('<PostalCode>60598</PostalCode>');
request.Add('<City>Frankfurt</City>');
request.Add('<CountryCode>DE</CountryCode>');
request.Add('</Address>');
request.Add('</ShipTo>');
request.Add('<ShipFrom>');
request.Add('<CompanyName>ShipFromCompanyName</CompanyName>');
request.Add('<AttentionName>Jan Petermann</AttentionName>');
request.Add('<PhoneNumber>06996860470</PhoneNumber>');
request.Add('<ShipperNumber>W2217V</ShipperNumber>');
request.Add('<Address>');
request.Add('<AddressLine1>Bertha-von-Suttner-Ring 8</AddressLine1>');
request.Add('<City>Frankfurt am Main</City>');
request.Add('<PostalCode>60598</PostalCode>');
request.Add('<CountryCode>DE</CountryCode>');
request.Add('</Address>');
request.Add('</ShipFrom>');
request.Add('<PaymentInformation>');
request.Add('<Prepaid>');
request.Add('<BillShipper>');
request.Add('<AccountNumber>W2217V</AccountNumber>');
request.Add('</BillShipper>');
request.Add('</Prepaid>');
request.Add('</PaymentInformation>');
request.Add('<Service>');
request.Add('<Code>07</Code>');
request.Add('</Service>');
request.Add('<Package>');
request.Add('<PackagingType>');
request.Add('<Code>02</Code>');
request.Add('</PackagingType>');
request.Add('<Dimensions>');
request.Add('<UnitOfMeasurement>');
request.Add('<Code>CM</Code>');
request.Add('</UnitOfMeasurement>');
request.Add('<Length>60</Length>');
request.Add('<Width>7</Width>');
request.Add('<Height>5</Height>');
request.Add('</Dimensions>');
request.Add('<PackageWeight>');
request.Add('<UnitOfMeasurement>');
request.Add('<Code>KGS</Code>');
request.Add('</UnitOfMeasurement>');
request.Add('<Weight>3.0</Weight>');
request.Add('</PackageWeight>');
request.Add('</Package>');
request.Add('</Shipment>');
request.Add('</ShipmentConfirmRequest>');

Memo1.Text := IDHTTP1.Post('https://wwwcie.ups.com/ups.app/xml/ShipConfirm', request);

end;
Als Response sollte eigentlich etwas in dieser Art kommen:

Delphi-Quellcode:
  <?xml version="1.0" ?>
- <ShipmentConfirmResponse>
- <Response>
- <TransactionReference>
  <CustomerContext>ShipConfirmUS</CustomerContext>
  <XpciVersion>1.0001</XpciVersion>
  </TransactionReference>
  <ResponseStatusCode>1</ResponseStatusCode>
  <ResponseStatusDescription>Success</ResponseStatusDescription>
  </Response>
- <ShipmentCharges>
- <TransportationCharges>
  <CurrencyCode>USD</CurrencyCode>
  <MonetaryValue>31.38</MonetaryValue>
  </TransportationCharges>
- <ServiceOptionsCharges>
  <CurrencyCode>USD</CurrencyCode>
  <MonetaryValue>7.75</MonetaryValue>
  </ServiceOptionsCharges>
- <TotalCharges>
  <CurrencyCode>USD</CurrencyCode>
  <MonetaryValue>39.13</MonetaryValue>
  </TotalCharges>
  </ShipmentCharges>
- <BillingWeight>
- <UnitOfMeasurement>
  <Code>LBS</Code>
  </UnitOfMeasurement>
  <Weight>4.0</Weight>
  </BillingWeight>
  <ShipmentIdentificationNumber>1Z12345E1512345676</ShipmentIdentificationNumber>
  <ShipmentDigest>INSERT SHIPPING DIGEST HERE</ShipmentDigest>
  </ShipmentConfirmResponse>
Aber mein Memo bleibt immer leer und ich bekomme nur die Meldung "Connection closed gracefully". Das bedeutet, wie ich gelesen habe, dass UPS die Verbindung getrennt hat.

Noch eine Frage... Im weiteren Verlauf der Sendungsvorbereitung wird irgendwann von UPS zusammen mit einem Response ein Bild mit dem Shipping Label übergeben. Wie kann ich das weiterverwenden?

Bitte helft mir, ich kenn mich echt absolut nicht aus.
  Mit Zitat antworten Zitat