/// <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; }
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); }
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; }
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; }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
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; }
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); }
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); }
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))); }
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); } }
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); }
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); }
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; } }
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; } }
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; } }
public override Label CreateLabel(ShippingSession session, IShippingContext context, Shipment shipment) { return CreateLabel((ShippoSession)session, context, shipment); }
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; } }
public abstract Financial.Amount?EstimateShippingCost(ShippingSession session, IShippingContext context, Shipment shipment);
public virtual IEnumerable <ShippingCarrier> GetShippingCarriers(ShippingSession session, IShippingContext context) { return(m_PreconfiguredShippingCarriers); }
public abstract Address ValidateAddress(ShippingSession session, IShippingContext context, Address address, out ValidateShippingAddressException error);
/// <summary> /// Creates shipping label /// </summary> public Label CreateLabel(IShippingContext context, Shipment shipment) { return m_ShippingSystem.CreateLabel(this, context, shipment); }
public override Label CreateReturnLabel(ShippingSession session, IShippingContext context, Shipment shipment, object labelID) { return CreateReturnLabel((ShippoSession)session, context, shipment, labelID); }
// 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; } }
public abstract ShippingRate EstimateShippingCost(ShippingSession session, IShippingContext context, Shipment shipment);
public override Address ValidateAddress(ShippingSession session, IShippingContext context, Address address, out ValidateShippingAddressException error) { throw new ShippingException("Not supported"); }
/// <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); }
private TrackInfo doTrackShipment(ShippoSession session, IShippingContext context, string trackingNumber, Guid logID) { throw new NotImplementedException(); }
public override Label CreateLabel(ShippingSession session, IShippingContext context, Shipment shipment) { throw new ShippingException("Not supported"); }
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; }
public override ShippingRate EstimateShippingCost(ShippingSession session, IShippingContext context, Shipment shipment) { throw new ShippingException("Not supported"); }
public override TrackInfo TrackShipment(ShippingSession session, IShippingContext context, string trackingNumber) { return TrackShipment((ShippoSession)session, context, trackingNumber); }
public abstract Label CreateLabel(ShippingSession session, IShippingContext context, Shipment shipment);
/// <summary> /// Retrieves shipment tracking info /// </summary> public TrackInfo TrackShipment(IShippingContext context, string trackingNumber) { return m_ShippingSystem.TrackShipment(this, context, trackingNumber); }
public abstract TrackInfo TrackShipment(ShippingSession session, IShippingContext context, string carrierID, string trackingNumber);