/// <summary>
        /// Initializes a new instance of the <see cref="ShippingGatewayApiController"/> class.
        /// </summary>
        /// <param name="merchelloContext">
        /// The merchello context.
        /// </param>
        public ShippingGatewayApiController(MerchelloContext merchelloContext)
            : base(merchelloContext)
        {
            _shippingContext = MerchelloContext.Gateways.Shipping;

            _shipCountryService = ((ServiceContext)MerchelloContext.Services).ShipCountryService;
        }
Exemple #2
0
        public string GetTrackingURL(ShippoSession session, IShippingContext context, string carrierID, string trackingNumber)
        {
            var url = base.GetTrackingURL(session, context, carrierID, trackingNumber);

            if (url.IsNullOrWhiteSpace() &&
                carrierID.IsNotNullOrWhiteSpace() &&
                trackingNumber.IsNotNullOrWhiteSpace())
            {
                var carrier = GetShippingCarriers(session, context).FirstOrDefault(c => c.Name.EqualsIgnoreCase(carrierID));
                if (carrier == null)
                {
                    return(null);
                }

                string ccode;
                if (!CARRIERS.TryGetValue(carrier.Type, out ccode))
                {
                    return(null);
                }

                return(URI_TRACKING_BY_NUM.Args(carrierID, trackingNumber));
            }

            return(url);
        }
Exemple #3
0
        private Label doCreateLabel(ShippoSession session, IShippingContext context, Shipment shipment, object labelID, Guid logID)
        {
            var cred = (ShippoCredentials)session.User.Credentials;

            // label request
            var request = new WebClient.RequestParams
            {
                Caller      = this,
                Uri         = new Uri(URI_API_BASE + URI_TRANSACTIONS),
                Method      = HTTPRequestMethod.POST,
                ContentType = ContentType.JSON,
                Headers     = new Dictionary <string, string>
                {
                    { HDR_AUTHORIZATION, HDR_AUTHORIZATION_TOKEN.Args(cred.PrivateToken) }
                },
                Body = getCreateLabelRequestBody(session, shipment, labelID)
            };

            var response = WebClient.GetJson(request);

            Log(MessageType.Info, "doCreateLabel()", response.ToJSON(), relatedMessageID: logID);

            checkResponse(response);

            // get label bin data from URL in response
            string labelURL = response["label_url"].AsString().EscapeURIStringWithPlus();
            string contentType;
            var    data = WebClient.GetData(new Uri(labelURL), this, out contentType);

            // get used rate, fill label's data
            var id             = response["object_id"];
            var trackingNumber = response["tracking_number"].AsString();
            var rate           = getRate(session, response["rate"].AsString(), logID);
            var carrier        = rate != null?
                                 CARRIERS.First(c => c.Value.EqualsIgnoreCase(rate["provider"].AsString())).Key:
                                 Carrier.Unknown;

            var amount = rate != null ?
                         new NFX.Financial.Amount(rate["currency"].AsString(), rate["amount"].AsDecimal()) :
                         new NFX.Financial.Amount(string.Empty, 0);

            var label = new Label(id,
                                  labelURL,
                                  data,
                                  shipment.LabelFormat,
                                  trackingNumber,
                                  carrier,
                                  amount);

            if (labelID == null)
            {
                StatCreateLabel();
            }
            else
            {
                StatCreateReturnLabel();
            }

            return(label);
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="merchelloContext"></param>
 public CatalogFixedRateShippingApiController(MerchelloContext merchelloContext)
     : base(merchelloContext)
 {
     _shipCountryService = ((ServiceContext)MerchelloContext.Services).ShipCountryService;
     _fixedRateShippingGatewayProvider = (FixedRateShippingGatewayProvider)MerchelloContext.Gateways.Shipping.GetProviderByKey(Constants.ProviderKeys.Shipping.FixedRateShippingProviderKey);
     _shippingContext = MerchelloContext.Gateways.Shipping;
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="merchelloContext"></param>
 public CatalogFixedRateShippingApiController(MerchelloContext merchelloContext)
     : base(merchelloContext)
 {
     _shipCountryService = ((ServiceContext) MerchelloContext.Services).ShipCountryService;
     _fixedRateShippingGatewayProvider = (FixedRateShippingGatewayProvider)MerchelloContext.Gateways.Shipping.GetProviderByKey(Constants.ProviderKeys.Shipping.FixedRateShippingProviderKey);
     _shippingContext = MerchelloContext.Gateways.Shipping;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="ShippingGatewayApiController"/> class.
        /// </summary>
        /// <param name="merchelloContext">
        /// The merchello context.
        /// </param>
        public ShippingGatewayApiController(IMerchelloContext merchelloContext)
            : base(merchelloContext)
        {
            _shippingContext = MerchelloContext.Gateways.Shipping;

            _shipCountryService = ((ServiceContext)MerchelloContext.Services).ShipCountryService;
        }
Exemple #7
0
 public virtual TrackInfo TrackShipment(ShippingSession session, IShippingContext context, string carrierID, string trackingNumber)
 {
     return(new TrackInfo
     {
         TrackingURL = GetTrackingURL(session, context, carrierID, trackingNumber),
         TrackingNumber = trackingNumber,
         CarrierID = carrierID
     });
 }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="merchelloContext"></param>
        public ShippingGatewayApiController(MerchelloContext merchelloContext)
            : base(merchelloContext)
        {
            _shippingContext = MerchelloContext.Gateways.Shipping;

            _gatewayProviderService = MerchelloContext.Services.GatewayProviderService;
            _storeSettingService = MerchelloContext.Services.StoreSettingService;
            _shipCountryService = ((ServiceContext)MerchelloContext.Services).ShipCountryService;
        }
Exemple #9
0
        /// <summary>
        /// Retrieves tracking URL by carrier and number
        /// </summary>
        public string GetTrackingURL(IShippingContext context, string carrierID, string trackingNumber)
        {
            if (!m_ShippingSystem.Capabilities.SupportsShipmentTracking)
            {
                throw new ShippingException(StringConsts.SHIPPING_SYSTEM_UNSUPPORTED_ACTION.Args("GetTrackingURL"));
            }

            return(m_ShippingSystem.GetTrackingURL(this, context, carrierID, trackingNumber));
        }
Exemple #10
0
        /// <summary>
        /// Validates shipping address.
        /// Returns new Address instance which may contain corrected address fields ('New Yourk' -> 'New York')
        /// </summary>
        public Address ValidateAddress(IShippingContext context, Address address, out ValidateShippingAddressException error)
        {
            if (!m_ShippingSystem.Capabilities.SupportsAddressValidation)
            {
                throw new ShippingException(StringConsts.SHIPPING_SYSTEM_UNSUPPORTED_ACTION.Args("ValidateAddress"));
            }

            return(m_ShippingSystem.ValidateAddress(this, context, address, out error));
        }
Exemple #11
0
        /// <summary>
        /// Returns all the carriers allowed for the system
        /// </summary>
        public IEnumerable <ShippingCarrier> GetShippingCarriers(IShippingContext context)
        {
            if (!m_ShippingSystem.Capabilities.SupportsCarrierServices)
            {
                throw new ShippingException(StringConsts.SHIPPING_SYSTEM_UNSUPPORTED_ACTION.Args("GetShippingCarriers"));
            }

            return(m_ShippingSystem.GetShippingCarriers(this, context));
        }
Exemple #12
0
        /// <summary>
        /// Estimates shipping label cost
        /// </summary>
        public ShippingRate EstimateShippingCost(IShippingContext context, Shipment shipment)
        {
            if (!m_ShippingSystem.Capabilities.SupportsShippingCostEstimation)
            {
                throw new ShippingException(StringConsts.SHIPPING_SYSTEM_UNSUPPORTED_ACTION.Args("EstimateShippingCost"));
            }

            return(m_ShippingSystem.EstimateShippingCost(this, context, shipment));
        }
Exemple #13
0
        /// <summary>
        /// Creates shipping label
        /// </summary>
        public Label CreateLabel(IShippingContext context, Shipment shipment)
        {
            if (!m_ShippingSystem.Capabilities.SupportsLabelCreation)
            {
                throw new ShippingException(StringConsts.SHIPPING_SYSTEM_UNSUPPORTED_ACTION.Args("CreateLabel"));
            }

            return(m_ShippingSystem.CreateLabel(this, context, shipment));
        }
Exemple #14
0
        private Address doValidateAddress(ShippoSession session, IShippingContext context, Address address, Guid logID, out ValidateShippingAddressException error)
        {
            error = null;
            var cred = (ShippoCredentials)session.User.Credentials;
            var body = getAddressBody(address);

            body["validate"] = true;

            // validate address request
            var request = new WebClient.RequestParams(this)
            {
                Method      = HTTPRequestMethod.POST,
                ContentType = ContentType.JSON,
                Headers     = new Dictionary <string, string>
                {
                    { HDR_AUTHORIZATION, HDR_AUTHORIZATION_TOKEN.Args(cred.PrivateToken) }
                },
                Body = body.ToJSON(JSONWritingOptions.Compact)
            };

            var response = WebClient.GetJson(new Uri(URI_API_BASE + URI_ADDRESS), request);

            Log(MessageType.Info, "doValidateAddress()", response.ToJSON(), relatedMessageID: logID);

            // check for validation errors:
            // Shippo API can return STATUS_INVALID or (!!!) STATUS_VALID but with 'code'="Invalid"
            var         state    = response["object_state"].AsString(STATUS_INVALID);
            var         messages = response["messages"] as JSONDataArray;
            JSONDataMap message  = null;
            var         code     = string.Empty;
            var         text     = string.Empty;

            if (messages != null)
            {
                message = messages.FirstOrDefault() as JSONDataMap;
            }
            if (message != null)
            {
                code = message["code"].AsString(string.Empty);
                text = message["text"].AsString(string.Empty);
            }

            // error found
            if (!state.EqualsIgnoreCase(STATUS_VALID) || code.EqualsIgnoreCase(CODE_INVALID))
            {
                var errMess = StringConsts.SHIPPO_VALIDATE_ADDRESS_INVALID_ERROR.Args(text);
                Log(MessageType.Error, "doValidateAddress()", errMess, relatedMessageID: logID);
                error = new ValidateShippingAddressException(errMess, text);
                return(null);
            }

            // no errors
            var corrAddress = getAddressFromJSON(response);

            return(corrAddress);
        }
        internal GatewayContext(IShippingContext shipping, ITaxationContext taxation, IPaymentContext payment)
        {
            Mandate.ParameterNotNull(shipping, "shipping");
            Mandate.ParameterNotNull(taxation, "taxation");
            Mandate.ParameterNotNull(payment, "payment");

            _shipping = shipping;
            _taxation = taxation;
            _payment = payment;
        }
Exemple #16
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="merchelloContext"></param>
        public ShippingGatewayApiController(MerchelloContext merchelloContext)
            : base(merchelloContext)
        {
            _shippingContext = MerchelloContext.Gateways.Shipping;


            _gatewayProviderService = MerchelloContext.Services.GatewayProviderService;
            _storeSettingService    = MerchelloContext.Services.StoreSettingService;
            _shipCountryService     = ((ServiceContext)MerchelloContext.Services).ShipCountryService;
        }
Exemple #17
0
        public string GetTrackingURL(ShippoSession session, IShippingContext context, string carrierID, string trackingNumber)
        {
            var url = base.GetTrackingURL(session, context, carrierID, trackingNumber);

            if (url.IsNullOrWhiteSpace() &&
                carrierID.IsNotNullOrWhiteSpace() &&
                trackingNumber.IsNotNullOrWhiteSpace())
            {
                return(URI_TRACKING_BY_NUM.Args(carrierID, trackingNumber));
            }

            return(null);
        }
Exemple #18
0
        public virtual string GetTrackingURL(ShippingSession session, IShippingContext context, string carrierID, string trackingNumber)
        {
            var carrier = GetShippingCarriers(session, context).FirstOrDefault(c => c.Name.EqualsIgnoreCase(carrierID));

            if (carrier != null &&
                carrier.TrackingURL.IsNotNullOrWhiteSpace() &&
                trackingNumber.IsNotNullOrWhiteSpace())
            {
                return(carrier.TrackingURL.Args(trackingNumber));
            }

            return(null);
        }
Exemple #19
0
        private Exception doValidateAddress(ShippoSession session, IShippingContext context, Address address, Guid logID)
        {
            var cred = (ShippoCredentials)session.User.Credentials;
            var body = getAddressBody(address);

            body["validate"] = true;

            // validate address request
            var request = new WebClient.RequestParams
            {
                Caller      = this,
                Uri         = new Uri(URI_API_BASE + URI_ADDRESS),
                Method      = HTTPRequestMethod.POST,
                ContentType = ContentType.JSON,
                Headers     = new Dictionary <string, string>
                {
                    { HDR_AUTHORIZATION, HDR_AUTHORIZATION_TOKEN.Args(cred.PrivateToken) }
                },
                Body = body.ToJSON(JSONWritingOptions.Compact)
            };

            var response = WebClient.GetJson(request);
            var state    = response["object_state"].AsString(STATUS_INVALID);

            if (state.EqualsIgnoreCase(STATUS_VALID))
            {
                return(null);
            }

            Log(MessageType.Info, "doValidateAddress()", response.ToJSON(), relatedMessageID: logID);

            // if any error
            var         messages = response["messages"] as JSONDataArray;
            JSONDataMap message  = null;

            if (messages != null)
            {
                message = messages.FirstOrDefault() as JSONDataMap;
            }

            string details = message == null ?
                             UNKNOWN_TXT :
                             "{0} - {1}".Args(message["code"].AsString(UNKNOWN_TXT), message["text"].AsString(UNKNOWN_TXT));

            Log(MessageType.Error, "doValidateAddress()", response.ToJSON(), relatedMessageID: logID);

            return(new ShippingException(StringConsts.SHIPPO_VALIDATE_ADDRESS_INVALID_ERROR.Args(details)));
        }
Exemple #20
0
        public Address ValidateAddress(ShippoSession session, IShippingContext context, Address address, out ValidateShippingAddressException error)
        {
            var logID = Log(MessageType.Info, "ValidateAddress()", StringConsts.SHIPPO_VALIDATE_ADDRESS_MESSAGE);

            try
            {
                return(doValidateAddress(session, context, address, logID, out error));
            }
            catch (Exception ex)
            {
                StatValidateAddressErrorCount();

                var header = StringConsts.SHIPPO_VALIDATE_ADDRESS_ERROR.Args(ex.ToMessageWithType());
                Log(MessageType.Error, "ValidateAddress()", header, ex, logID);
                throw ShippingException.ComposeError(ex.Message, ex);
            }
        }
Exemple #21
0
        private Financial.Amount?doEstimateShippingCost(ShippoSession session, IShippingContext context, Shipment shipment, Guid logID)
        {
            var cred  = (ShippoCredentials)session.User.Credentials;
            var sbody = getShipmentBody(shipment);

            // get shipping request
            var request = new WebClient.RequestParams(this)
            {
                Method      = HTTPRequestMethod.POST,
                ContentType = ContentType.JSON,
                Headers     = new Dictionary <string, string>
                {
                    { HDR_AUTHORIZATION, HDR_AUTHORIZATION_TOKEN.Args(cred.PrivateToken) }
                },
                Body = sbody.ToJSON(JSONWritingOptions.Compact)
            };

            var response = WebClient.GetJson(new Uri(URI_API_BASE + URI_SHIPMENTS), request);

            Log(MessageType.Info, "doEstimateShippingCost()", response.ToJSON(), relatedMessageID: logID);

            checkResponse(response);

            var rates = response["rates_list"] as JSONDataArray;

            if (rates == null)
            {
                return(null);
            }

            foreach (JSONDataMap rate in rates)
            {
                var carrierID = rate["carrier_account"].AsString();
                if (carrierID.IsNotNullOrWhiteSpace() &&
                    string.Equals(carrierID, shipment.Carrier.Name, StringComparison.InvariantCultureIgnoreCase) &&
                    string.Equals(rate["servicelevel_token"].AsString(), shipment.Method.Name, StringComparison.InvariantCultureIgnoreCase))
                {
                    return(new Financial.Amount(rate["currency_local"].AsString(), rate["amount_local"].AsDecimal()));
                }

                // todo: where is Template?! minimize cost among all mathced rates?
            }

            return(null);
        }
Exemple #22
0
        private Label doCreateLabel(ShippoSession session, IShippingContext context, Shipment shipment, Guid logID)
        {
            var cred = (ShippoCredentials)session.User.Credentials;

            // label request
            var request = new WebClient.RequestParams(this)
            {
                Method      = HTTPRequestMethod.POST,
                ContentType = ContentType.JSON,
                Headers     = new Dictionary <string, string>
                {
                    { HDR_AUTHORIZATION, HDR_AUTHORIZATION_TOKEN.Args(cred.PrivateToken) }
                },
                Body = getCreateLabelRequestBody(session, shipment).ToJSON(JSONWritingOptions.Compact)
            };

            var response = WebClient.GetJson(new Uri(URI_API_BASE + URI_TRANSACTIONS), request);

            Log(MessageType.Info, "doCreateLabel()", response.ToJSON(), relatedMessageID: logID);

            checkResponse(response);

            // get label bin data from URL in response
            string labelURL = response["label_url"].AsString().EscapeURIStringWithPlus();

            // get used rate, fill label's data
            var id             = response["object_id"].AsString();
            var trackingNumber = response["tracking_number"].AsString();
            var rate           = doGetRate(session, response["rate"].AsString(), logID);
            var amount         = rate != null ?
                                 new NFX.Financial.Amount(rate["currency"].AsString(), rate["amount"].AsDecimal()) :
                                 new NFX.Financial.Amount(string.Empty, 0);

            var label = new Label(id,
                                  labelURL,
                                  shipment.LabelFormat,
                                  trackingNumber,
                                  shipment.Carrier.Type,
                                  amount);

            StatCreateLabel();

            return(label);
        }
Exemple #23
0
        public TrackInfo TrackShipment(ShippoSession session, IShippingContext context, string trackingNumber) // carrier ID???
        {
            var logID = Log(MessageType.Info, "TrackShipment()", StringConsts.SHIPPO_TRACK_SHIPMENT_MESSAGE.Args(trackingNumber));

            try
            {
                return(doTrackShipment(session, context, trackingNumber, logID));
            }
            catch (Exception ex)
            {
                StatTrackShipmentErrorCount();

                var header = StringConsts.SHIPPO_TRACK_SHIPMENT_ERROR.Args(trackingNumber, ex.ToMessageWithType());
                Log(MessageType.Error, "TrackShipment()", header, ex, logID);
                var error = ShippingException.ComposeError(ex.Message, ex);

                throw error;
            }
        }
Exemple #24
0
        public Label CreateLabel(ShippoSession session, IShippingContext context, Shipment shipment)
        {
            var logID = Log(MessageType.Info, "CreateLabel()", StringConsts.SHIPPO_CREATE_LABEL_MESSAGE.Args(shipment.FromAddress, shipment.ToAddress));

            try
            {
                return(doCreateLabel(session, context, shipment, logID));
            }
            catch (Exception ex)
            {
                StatCreateLabelError();

                var header = StringConsts.SHIPPO_CREATE_LABEL_ERROR.Args(shipment.FromAddress, shipment.ToAddress, ex.ToMessageWithType());
                Log(MessageType.Error, "CreateLabel()", header, ex, logID);
                var error = ShippingException.ComposeError(ex.Message, ex);

                throw error;
            }
        }
Exemple #25
0
        public ShippingRate EstimateShippingCost(ShippoSession session, IShippingContext context, Shipment shipment)
        {
            var logID = Log(MessageType.Info, "EstimateShippingCost()", StringConsts.SHIPPO_ESTIMATE_SHIPPING_COST_MESSAGE.Args(shipment.FromAddress, shipment.ToAddress, shipment.Service.Name));

            try
            {
                return(doEstimateShippingCost(session, context, shipment, logID));
            }
            catch (Exception ex)
            {
                StatEstimateShippingCostErrorCount();

                var header = StringConsts.SHIPPO_ESTIMATE_SHIPPING_COST_ERROR.Args(shipment.FromAddress, shipment.ToAddress, shipment.Service.Name, ex.ToMessageWithType());
                Log(MessageType.Error, "EstimateShippingCost()", header, ex, logID);
                var error = ShippingException.ComposeError(ex.Message, ex);

                throw error;
            }
        }
Exemple #26
0
 public override Label CreateLabel(ShippingSession session, IShippingContext context, Shipment shipment)
 {
     return CreateLabel((ShippoSession)session, context, shipment);
 }
Exemple #27
0
        public Label CreateLabel(ShippoSession session, IShippingContext context, Shipment shipment)
        {
            var logID = Log(MessageType.Info, "CreateLabel()", StringConsts.SHIPPO_CREATE_LABEL_MESSAGE.Args(shipment.FromAddress, shipment.ToAddress));

            try
            {
              return doCreateLabel(session, context, shipment, null, logID);
            }
            catch (Exception ex)
            {
              StatCreateLabelError();

              var header = StringConsts.SHIPPO_CREATE_LABEL_ERROR.Args(shipment.FromAddress, shipment.ToAddress, ex.ToMessageWithType());
              Log(MessageType.Error, "CreateLabel()", header, ex, logID);
              var error = ShippingException.ComposeError(ex.Message, ex);

              throw error;
            }
        }
Exemple #28
0
 public abstract Financial.Amount?EstimateShippingCost(ShippingSession session, IShippingContext context, Shipment shipment);
Exemple #29
0
 public virtual IEnumerable <ShippingCarrier> GetShippingCarriers(ShippingSession session, IShippingContext context)
 {
     return(m_PreconfiguredShippingCarriers);
 }
Exemple #30
0
 public abstract Address ValidateAddress(ShippingSession session, IShippingContext context, Address address, out ValidateShippingAddressException error);
Exemple #31
0
 /// <summary>
 /// Creates shipping label
 /// </summary>
 public Label CreateLabel(IShippingContext context, Shipment shipment)
 {
     return m_ShippingSystem.CreateLabel(this, context, shipment);
 }
Exemple #32
0
 public override Label CreateReturnLabel(ShippingSession session, IShippingContext context, Shipment shipment, object labelID)
 {
     return CreateReturnLabel((ShippoSession)session, context, shipment, labelID);
 }
Exemple #33
0
        // carrier ID???
        public TrackInfo TrackShipment(ShippoSession session, IShippingContext context, string trackingNumber)
        {
            var logID = Log(MessageType.Info, "TrackShipment()", StringConsts.SHIPPO_TRACK_SHIPMENT_MESSAGE.Args(trackingNumber));

            try
            {
              return doTrackShipment(session, context, trackingNumber, logID);
            }
            catch (Exception ex)
            {
              StatCreateLabelError();

              var header = StringConsts.SHIPPO_TRACK_SHIPMENT_ERROR.Args(trackingNumber,ex.ToMessageWithType());
              Log(MessageType.Error, "TrackShipment()", header, ex, logID);
              var error = ShippingException.ComposeError(ex.Message, ex);

              throw error;
            }
        }
Exemple #34
0
 public abstract ShippingRate EstimateShippingCost(ShippingSession session, IShippingContext context, Shipment shipment);
Exemple #35
0
 public override Address ValidateAddress(ShippingSession session, IShippingContext context, Address address, out ValidateShippingAddressException error)
 {
     throw new ShippingException("Not supported");
 }
Exemple #36
0
 /// <summary>
 /// Creates return label for existed shipping label
 /// </summary>
 public Label CreateReturnLabel(IShippingContext context, Shipment shipment, object labelID)
 {
     return m_ShippingSystem.CreateReturnLabel(this, context, shipment, labelID);
 }
Exemple #37
0
 private TrackInfo doTrackShipment(ShippoSession session, IShippingContext context, string trackingNumber, Guid logID)
 {
     throw new NotImplementedException();
 }
Exemple #38
0
 public override Label CreateLabel(ShippingSession session, IShippingContext context, Shipment shipment)
 {
     throw new ShippingException("Not supported");
 }
Exemple #39
0
        private Label doCreateLabel(ShippoSession session, IShippingContext context, Shipment shipment, object labelID, Guid logID)
        {
            var cred = (ShippoCredentials)session.User.Credentials;

            // label request
            var request = new WebClient.RequestParams
            {
              Caller = this,
              Uri = new Uri(URI_API_BASE + URI_TRANSACTIONS),
              Method = HTTPRequestMethod.POST,
              ContentType = ContentType.JSON,
              Headers = new Dictionary<string, string>
            {
              { HDR_AUTHORIZATION, HDR_AUTHORIZATION_TOKEN.Args(cred.PrivateToken) }
            },
              Body = getCreateLabelRequestBody(session, shipment, labelID)
            };

            var response = WebClient.GetJson(request);

            Log(MessageType.Info, "doCreateLabel()", response.ToJSON(), relatedMessageID: logID);

            checkResponse(response);

            // get label bin data from URL in response
            string labelURL = response["label_url"].AsString().EscapeURIStringWithPlus();
            string contentType;
            var data = WebClient.GetData(new Uri(labelURL), this, out contentType);

            // get used rate, fill label's data
            var id = response["object_id"];
            var trackingNumber = response["tracking_number"].AsString();
            var rate = getRate(session, response["rate"].AsString(), logID);
            var carrier = rate != null ?
                      CARRIERS.First(c => c.Value.EqualsIgnoreCase(rate["provider"].AsString())).Key :
                      Carrier.Unknown;
            var amount = rate != null ?
                     new NFX.Financial.Amount(rate["currency"].AsString(), rate["amount"].AsDecimal()) :
                     new NFX.Financial.Amount(string.Empty, 0);

            var label = new Label(id,
                              labelURL,
                              data,
                              shipment.LabelFormat,
                              trackingNumber,
                              carrier,
                              amount);

            if (labelID == null) StatCreateLabel();
            else StatCreateReturnLabel();

            return label;
        }
Exemple #40
0
 public override ShippingRate EstimateShippingCost(ShippingSession session, IShippingContext context, Shipment shipment)
 {
     throw new ShippingException("Not supported");
 }
Exemple #41
0
 public override TrackInfo TrackShipment(ShippingSession session, IShippingContext context, string trackingNumber)
 {
     return TrackShipment((ShippoSession)session, context, trackingNumber);
 }
Exemple #42
0
 public abstract Label CreateLabel(ShippingSession session, IShippingContext context, Shipment shipment);
Exemple #43
0
 /// <summary>
 /// Retrieves shipment tracking info
 /// </summary>
 public TrackInfo TrackShipment(IShippingContext context, string trackingNumber)
 {
     return m_ShippingSystem.TrackShipment(this, context, trackingNumber);
 }
Exemple #44
0
 public abstract TrackInfo TrackShipment(ShippingSession session, IShippingContext context, string carrierID, string trackingNumber);