Search code examples
ebay-api

eBay API in Perl - can't use SetShipmentTrackingInfoRequest to update tracking information


I'm trying to figure out why I can't seem to update a tracking number using the eBay API. Here is the page I'm referencing:

http://developer.ebay.com/DevZone/merchant-data/CallRef/SetShipmentTrackingInfo.html

Based on that, I've got the following code in Perl:

 use Net::eBay;

 my $ebay = new Net::eBay( {
                              SiteLevel => 'prod',
                              DeveloperKey => 'x',
                              ApplicationKey => 'xxxx',
                              CertificateKey => 'xxx',
                              Token => 'xxxx',
                             } );

$ebay->setDefaults( { API => 2, compatibility => 900  } );


my $result = $ebay->submitRequest( "SetShipmentTrackingInfoRequest",
                      {
                       DetailLevel => "ReturnAll",
                       ErrorLevel => "1",
                       SiteId => "1",
                       OrderID => 1234546, # not the real order ID I'm using :)
                       ShipmentTrackingDetails => {
                        ShipmentTrackingNumber => "12345",
                        ShippingCarrierUsed => "Hermes"
                       }
                      });
     print $IN->header;
     use Data::Dumper;
     print Dumper($result);

When running it, I get an error in $result:

$VAR1 = {
          'Errors' => {
                      'ErrorClassification' => 'RequestError',
                      'SeverityCode' => 'Error',
                      'ShortMessage' => 'Unsupported API call.',
                      'ErrorCode' => '2',
                      'LongMessage' => 'The API call "SetShipmentTrackingInfoRequest" is invalid or not supported in this release.'
                    },
          'xmlns' => 'urn:ebay:apis:eBLBaseComponents',
          'Timestamp' => '2016-10-21 07:03:04',
          'Build' => '18007281',
          'Version' => '900',
          'Ack' => 'Failure'
        };

I'm a bit confused, as it looks like SetShipmentTrackingInfoRequest is the API call I need to be making? I've not really done much with the eBay API, so it's possible I'm missing something stupid.

UPDATE: As per feedback below, I'm now using the CompleteSale API call:

http://developer.ebay.com/Devzone/XML/docs/Reference/eBay/CompleteSale.html

my $result = $ebay->submitRequest( "CompleteSale ", { DetailLevel => "ReturnAll", ErrorLevel => "1", SiteId => "1", OrderID => 1933420817015, Shipment => { ShipmentTrackingDetails => { ShipmentTrackingNumber => "77293124902615", ShippingCarrierUsed => "Hermes" } } });

When I run it, I now get the error:

'LongMessage' => 'XML Error Text: "; nested exception is: org.xml.sax.SAXParseException: Attribute name "Request" associated with an element type "CompleteSale" must be followed by the \' = \' character.".',

Enabling debugging, the XML being sent is:

<?xml version='1.0' encoding='utf-8'?>
 <CompleteSale Request xmlns="urn:ebay:apis:eBLBaseComponents">
 <RequesterCredentials>
  <eBayAuthToken>xxxx</eBayAuthToken>
</RequesterCredentials>

    <DetailLevel>ReturnAll</DetailLevel>
    <ErrorLevel>1</ErrorLevel>
    <OrderID>xxxxx</OrderID>
    <Shipment>
      <ShipmentTrackingDetails>
        <ShipmentTrackingNumber>xxxx</ShipmentTrackingNumber>
        <ShippingCarrierUsed>Hermes</ShippingCarrierUsed>
      </ShipmentTrackingDetails>
    </Shipment>
    <SiteId>1</SiteId>

</CompleteSale Request>

Solution

  • From looking at the eBay API doc link you posted doesn't the second 'Note' entirely explain why it doesn't work as a single API call?

    Note: SetShipmentTrackingInfo cannot be issued on its own like an ordinary API call, using an endpoint

    It then goes on to say:

    In the Trading API, the CompleteSale call provides similar functionality that you can invoke directly

    So perhaps looking there should be the next step