User Shipment Service Initialize Info Request Module | A | | . . |. |. . . . |. . . . . . . . .|. . . . . . . . . . | | | | ShipAPI.pm . . V | | V . . | . . initialize | _ shipper . . object | | config info . . ______| | . . | . . . .|. . . . . . . . . . . . . | . | . V . .V. . . . . . . . . . . . . . . ShipAPI::carrier.pm . . parse . . . . request <------------> Available . . . . Services . . | . . . . | . . . . V . . . . . . . . translate . . field . . & validate <----------> translation . . fields . . tables . . . . . . | . . . . | . . . . V . . . . . . . . fill XML . . . . template <----------> XML template . . . . . . | . . . . | . . . . V . . . . . . . to carrier . transmit . . URI, Auth . server <------ HTTPS <----------> & access . . request . . info . . . . . . . . . from . receive . . . carrier -------> HTTPS . . . server . response . . . . . . . . | . . . . | . . . . V . . . . . . . . parse XML . . . . . . . . | . . . . | . . . . V . . . . . . . . translate . . response . . response <---------> translation . . data . . tables . . . . . . | . . . . . . . | . . . . . . . . . . . . . . . . . . . | V Asynchronous User Response (via callback?) #### # definitions: # shipper - sends the shipment # carrier - transports the shipment # recipient - recieves the shipment # configuration info %conf = ( weightUnits => dimensionUnits => currency => shipper => { name => address => ... etc => } carriers => [ { carrier => shipperId => serverUrl => authent => ... etc => },{ carrier => ... etc => } ] ); # configure the module ShipAPI->configure(\%conf); # create a shipping object w/recipient info $pkg = ShipAPI->shipment( carrier => name => company => address => ...etc => ); # validate recipient address $rv = $pkg->validate(); # add package(s) info $rv = $pkg->addPackage( weight => dimensions => [$h, $w, $d] type => ); # get shipping services available(ground, next day etc) $rv = $pkg->availableShipping(); # get transit time $rv = $pkg->transit( service => ); # get add-on services available for this shipment $rv = $pkg->availableAddon() # add add-on services (COD, pickup, etc) $rv = $pkg->addService( type => param => ...etc => ); # get service rates $rv = $pkg->rates( service => ); # add billing info if not billed to shipper $rv = $pkg->billing( account => zipcode => ); # submit for shipment $rv = $pkg->ship( service => ); # cancel shipment $rv = $pkg->cancel(); # cancel shipment $rv = ShipAPI->cancel( carrier => tracknum => ); # track shipment $rv = $pkg->track(); # track shipment $rv = ShipAPI->track( carrier => tracknum => ); # response callbacks: shippingRates trackingResults transitTime addressValidation shipmentAcknowledge