示例#1
0
        public void HappyPath()
        {
            // $(SolutionDir)\tests\testData\shippingservices\v1\addresses\verify\1234567828607.http
            TestSession.Initialize();
            var warnings = new List <string>();

            Globals.DefaultSession.LogWarning = (s) => warnings.Add(s);
            var errors = new List <string>();

            Globals.DefaultSession.LogError = (s) => errors.Add(s);

            var company       = "ABC Company";
            var name          = "Rufous Sirius Canid";
            var phone         = "323 555-1212";
            var email         = "*****@*****.**";
            var residential   = false;
            var address1      = "643 Greenway RD";
            var cityTown      = "Boone";
            var stateProvince = "NC";
            var postalCode    = "28607";
            var countryCode   = "US";

            var addressFluent = AddressFluent <Address> .Create().Company(company)
                                .Person(name, phone, email)
                                .Residential(residential)
                                .AddressLines(address1)
                                .CityTown(cityTown)
                                .StateProvince(stateProvince)
                                .PostalCode(postalCode)
                                .CountryCode(countryCode); // calls the service for address validation

            var address = (Address)addressFluent;

            Assert.True(address != null);
            Assert.Same(address.Company, company);
            Assert.Same(address.Name, name);
            Assert.Same(address.Phone, phone);
            Assert.Same(address.Email, email);
            Assert.True(!address.Residential);
            int i = 0;

            for (var a = address.AddressLines.GetEnumerator(); a.MoveNext();)
            {
                if (i == 0)
                {
                    Assert.Same(a.Current, address1);
                }
                i++;
            }
            Assert.True(i == 1);
            Assert.Same(address.CityTown, cityTown);
            Assert.Same(address.StateProvince, stateProvince);
            Assert.Same(address.PostalCode, postalCode);
            Assert.Same(address.CountryCode, countryCode);
            Assert.True(address.Status == AddressStatus.NOT_CHANGED);

            address = (Address)addressFluent.Verify();
            Assert.True(address.Status == AddressStatus.VALIDATED_CHANGED);
            Assert.Same(address.PostalCode, "28607-4819");
        }
        public static IBookShipmentRequest WithConsignee(this IBookShipmentRequest IBookShipmentRequest,
                                                         Action <AddressFluent> builder)
        {
            var consigneeBuilder = new AddressFluent(null);

            builder(consigneeBuilder);
            IBookShipmentRequest.Consignee = (Address)consigneeBuilder;
            return(IBookShipmentRequest);
        }
        public static IBookShipmentRequest WithShipper(this IBookShipmentRequest IBookShipmentRequest,
                                                       Action <AddressFluent> builder)
        {
            var shipperBuilder = new AddressFluent(null);

            builder(shipperBuilder);
            IBookShipmentRequest.Shipper = (Address)shipperBuilder;
            return(IBookShipmentRequest);
        }
示例#4
0
        public void VerifyAddress()
        {
            var company       = "ABC Company";
            var name          = "Rufous Sirius Canid";
            var phone         = "323 555-1212";
            var email         = "*****@*****.**";
            var residential   = false;
            var address1      = "643 Greenway RD";
            var cityTown      = "Boone";
            var stateProvince = "NC";
            var postalCode    = "28607";
            var countryCode   = "US";

            var addressFluent = AddressFluent <Address> .Create().Company(company)
                                .Person(name, phone, email)
                                .Residential(residential)
                                .AddressLines(address1)
                                .CityTown(cityTown)
                                .StateProvince(stateProvince)
                                .PostalCode(postalCode)
                                .CountryCode(countryCode); // calls the service for address validation

            var address = (Address)addressFluent;

            Assert.True(address != null);
            Assert.Same(address.Company, company);
            Assert.Same(address.Name, name);
            Assert.Same(address.Phone, phone);
            Assert.Same(address.Email, email);
            Assert.True(!address.Residential);
            int i = 0;

            for (var a = address.AddressLines.GetEnumerator(); a.MoveNext();)
            {
                if (i == 0)
                {
                    Assert.Same(a.Current, address1);
                }
                i++;
            }
            Assert.True(i == 1);
            Assert.Same(address.CityTown, cityTown);
            Assert.Same(address.StateProvince, stateProvince);
            Assert.Same(address.PostalCode, postalCode);
            Assert.Same(address.CountryCode, countryCode);
            Assert.True(address.Status == AddressStatus.NOT_CHANGED);

            address = (Address)addressFluent.Verify();
            Assert.True(address.Status == AddressStatus.VALIDATED_AND_NOT_CHANGED);
            Assert.True(address.PostalCode == "28607-4819");
        }
        static void Main(string[] args)
        {
            var sandbox = new Session()
            {
                EndPoint = "https://api-sandbox.pitneybowes.com", Requester = new ShippingApiHttpRequest()
            };

            sandbox.AddConfigItem("ApiKey", "your api key");
            sandbox.AddConfigItem("ApiSecret", "your api secret");
            sandbox.AddConfigItem("ShipperID", "your shipper id");
            sandbox.AddConfigItem("DeveloperID", "your developer id");

            Model.RegisterSerializationTypes(sandbox.SerializationRegistry);
            Globals.DefaultSession = sandbox;

            var shipment = ShipmentFluent <Shipment> .Create()
                           .ToAddress((Address)AddressFluent <Address> .Create()
                                      .AddressLines("643 Greenway Rd")
                                      .PostalCode("28607")
                                      .CountryCode("US")
                                      .Verify())
                           .FromAddress((Address)AddressFluent <Address> .Create()
                                        .Company("Pitney Bowes Inc")
                                        .AddressLines("27 Waterview Drive")
                                        .CityTown("Shelton").StateProvince("CT").PostalCode("06484")
                                        .CountryCode("US")
                                        )
                           .Parcel((Parcel)ParcelFluent <Parcel> .Create()
                                   .Dimension(12, 12, 10)
                                   .Weight(16m, UnitOfWeight.OZ))
                           .Rates(RatesArrayFluent <Rates> .Create()
                                  .USPSPriority <Rates, Parameter>())
                           .Documents((List <IDocument>)DocumentsArrayFluent <Document> .Create()
                                      .ShippingLabel(ContentType.URL, Size.DOC_4X6, FileFormat.PDF))
                           .ShipmentOptions(ShipmentOptionsArrayFluent <ShipmentOptions> .Create()
                                            .ShipperId("your shipper id") // ******* dont forget this one too *******
                                            )
                           .TransactionId(Guid.NewGuid().ToString().Substring(15));

            var label = Api.CreateShipment((Shipment)shipment).GetAwaiter().GetResult();

            if (label.Success)
            {
                var sw = new StreamWriter("label.pdf");
                foreach (var d in label.APIResponse.Documents)
                {
                    Api.WriteToStream(d, sw.BaseStream).GetAwaiter().GetResult();
                }
            }
        }
        //[Fact] // Need to have UPS account
        public void TestRegistration()
        {
            var license = new CarrierLicense();

            license.Carrier           = Carrier.UPS;
            license.OriginCountryCode = "US";

            var licResponse = Api.CarrierLicenseAgreements(license, Globals.DefaultSession).GetAwaiter().GetResult();

            var responseLicense = licResponse.ResponseObject as CarrierLicense;

            var registration = new CarrierAccount();

            registration.DeveloperId           = Globals.DefaultSession.GetConfigItem("DeveloperID");
            registration.Carrier               = Carrier.UPS;
            registration.PostalReportingNumber = "123456789";
            registration.TransactionId         = Guid.NewGuid().ToString().Substring(15);
            registration.AccountNumber         = "56V7A6";

            var accountAddress = AddressFluent <Address> .Create()
                                 .Company("Widgets")
                                 .Name("James Smith")
                                 .Phone("303-555-1213")
                                 .Email("*****@*****.**")
                                 .Residential(false)
                                 .AddressLines("4750 Walnut Street")
                                 .CityTown("Boulder")
                                 .StateProvince("CO")
                                 .PostalCode("80301")
                                 .CountryCode("US");

            registration.AccountAddress     = (Address)accountAddress;
            registration.ContactAddress     = (Address)accountAddress;
            registration.AccountPostalCode  = "80301";
            registration.AccountCountryCode = "US";
            registration.ContactTitle       = "Manager";
            registration.EndUserIP          = "10.100.20.20";
            registration.DeviceIdentity     = "84315tr3M5e4n";
            registration.LicenseText        = responseLicense.LicenseText;

            var response = Api.RegisterCarrierAccount(registration, Globals.DefaultSession).GetAwaiter().GetResult();

            Assert.True(response.Success);
            var responseAccount = response.ResponseObject as CarrierAccount;

            Assert.NotNull(responseAccount);
        }
示例#7
0
        public void ScheduleAndCancel()
        {
            var address = (Address)AddressFluent <Address> .Create()
                          .Company("Pitney Bowes Inc.")
                          .AddressLines("27 Waterview Drive")
                          .Residential(false)
                          .CityTown("Shelton")
                          .StateProvince("CT")
                          .PostalCode("06484")
                          .CountryCode("US")
                          .Person("Paul Wright", "203-555-1213", "*****@*****.**");

            // Schedule a pickup

            var pickup = PickupFluent <Pickup> .Create()
                         .Carrier(Carrier.USPS)
                         .PackageLocation(PackageLocation.MailRoom)
                         .PickupAddress(address)
                         .PickupDate(DateTime.Now.AddDays(1))
                         .SpecialInstructions("N/A")
                         .AddPickupSummary <PickupCount, ParcelWeight>(PickupService.PM, 1, 16M, UnitOfWeight.OZ)
                         .TransactionId(Guid.NewGuid().ToString().Substring(15));

            var pickupResponse = Api.Schedule <Pickup>(pickup).GetAwaiter().GetResult();

            Assert.NotNull(pickupResponse);
            Assert.True(pickupResponse.Success);
            Assert.NotNull(pickupResponse.ResponseObject);

            // Cancel pickup
            var p = pickupResponse.ResponseObject as Pickup;

            Assert.NotNull(p);

            var cancelPickup = new PickupCancelRequest()
            {
                PickupId      = p.PickupId,
                TransactionId = Guid.NewGuid().ToString().Substring(15)
            };

            var pickupCancelResponse = Api.CancelPickup(cancelPickup).GetAwaiter().GetResult();

            Assert.NotNull(pickupCancelResponse);
            Assert.True(pickupCancelResponse.Success);
            Assert.NotNull(pickupCancelResponse.ResponseObject);
        }
        static Shipment print(string s, int i, int j, ISession session)
        {
            var shipment = (Shipment)ShipmentFluent <Shipment> .Create()
                           .ToAddress((Address)AddressFluent <Address> .Create()
                                      .AddressLines("643 Greenway Rd")
                                      .PostalCode("28607")
                                      .CountryCode("US"))
                           .FromAddress((Address)AddressFluent <Address> .Create()
                                        .Company("Pitney Bowes Inc")
                                        .AddressLines("27 Waterview Drive")
                                        .CityTown("Shelton").StateProvince("CT").PostalCode("06484")
                                        .CountryCode("US")
                                        )
                           .Parcel((Parcel)ParcelFluent <Parcel> .Create()
                                   .Dimension(12, 12, 10)
                                   .Weight(16m, UnitOfWeight.OZ))
                           .Rates(RatesArrayFluent <Rates> .Create()
                                  .USPSPriority <Rates, Parameter>())
                           .Documents((List <IDocument>)DocumentsArrayFluent <Document> .Create()
                                      .ShippingLabel(ContentType.URL, Size.DOC_4X6, FileFormat.PDF))
                           .ShipmentOptions(ShipmentOptionsArrayFluent <ShipmentOptions> .Create()
                                            .ShipperId(session.GetConfigItem("ShipperID"))
                                            )
                           .TransactionId(string.Format("{0}{1}{2}", s, i, j));

            var label = Api.CreateShipment(shipment, session).GetAwaiter().GetResult();

            if (!label.Success)
            {
                Console.WriteLine("Label {0} {1} failed:{1}", i, string.Format("{0}-{1}-{2}", s, i, j, label.HttpStatus));
                foreach (var e in label.Errors)
                {
                    Console.WriteLine("    {0} {1}", e.ErrorCode, e.Message);
                }
            }
            return(label.APIResponse);
        }
 public AddressFluentValidationTests()
 {
     _addressFluent = new AddressFluent(null);
 }
        public void TestShipmentDetailed()
        {
            var shipment = ShipmentFluent <Shipment> .Create()
                           .ToAddress((Address)AddressFluent <Address> .Create()
                                      .AddressLines("643 Greenway RD")
                                      .PostalCode("28607")
                                      .CountryCode("US")
                                      .Verify() // calls the service for address validation - will populate city and state from the zip
                                      )
                           .MinimalAddressValidation("true")
                           //.ShipperRatePlan(Globals.DefaultSession.GetConfigItem("RatePlan")) // use if you have a custom rate plan
                           .FromAddress((Address)AddressFluent <Address> .Create()
                                        .Company("Pitney Bowes Inc.")
                                        .AddressLines("27 Waterview Drive")
                                        .Residential(false)
                                        .CityTown("Shelton")
                                        .StateProvince("CT")
                                        .PostalCode("06484")
                                        .CountryCode("US")
                                        .Person("Paul Wright", "203-555-1213", "*****@*****.**")
                                        )
                           .Parcel((Parcel)ParcelFluent <Parcel> .Create()
                                   .Dimension(12, 12, 10)
                                   .Weight(16m, UnitOfWeight.OZ)
                                   )
                           .Rates(RatesArrayFluent <Rates> .Create()
                                  .USPSPriority <Rates, Parameter>()
                                  .InductionPostalCode("06484")
                                  )
                           .Documents((List <IDocument>)DocumentsArrayFluent <Document> .Create()
                                      .ShippingLabel(ContentType.BASE64, Size.DOC_4X6, FileFormat.ZPL2)
                                      )
                           .ShipmentOptions(ShipmentOptionsArrayFluent <ShipmentOptions> .Create()
                                            .ShipperId(Globals.DefaultSession.GetConfigItem("ShipperID"))
                                            .AddToManifest()
                                            )
                           .TransactionId(Guid.NewGuid().ToString().Substring(15));


            var label = Api.CreateShipment((Shipment)shipment).GetAwaiter().GetResult();

            Assert.NotNull(label);
            Assert.True(label.Success);
            Assert.NotNull(label.ResponseObject as Shipment);
            Assert.NotNull(label.APIResponse.ParcelTrackingNumber);
            Assert.True(label.APIResponse.ParcelTrackingNumber != string.Empty);

            // var trackingRequest = new TrackingRequest
            // {
            //     Carrier = Carrier.USPS,
            //     TrackingNumber = label.APIResponse.ParcelTrackingNumber
            // };
            // var trackingResponse = Api.Tracking<TrackingStatus>(trackingRequest).GetAwaiter().GetResult();

            // Parcel Reprint
            var reprintRequest = new ReprintShipmentRequest()
            {
                Shipment = label.APIResponse.ShipmentId
            };

            var reprintResponse = Api.ReprintShipment <Shipment>(reprintRequest).GetAwaiter().GetResult();

            Assert.NotNull(reprintResponse);
            Assert.True(reprintResponse.Success);
            Assert.NotNull(reprintResponse.ResponseObject as Shipment);
            Assert.NotNull(reprintResponse.APIResponse.ParcelTrackingNumber);
            Assert.True(reprintResponse.APIResponse.ParcelTrackingNumber != string.Empty);

            using (var labelStream = new MemoryStream())
            {
                foreach (var d in reprintResponse.APIResponse.Documents)
                {
                    if (d.ContentType == ContentType.BASE64 && d.FileFormat == FileFormat.PNG)
                    {
                        // Multiple page png document
                        Api.WriteToStream(d, null,

                                          (stream, page) => // callback for each page
                        {
                            // append to the memory stream
                            return(labelStream);
                        },
                                          disposeStream: false
                                          ).GetAwaiter().GetResult();
                    }
                    else
                    {
                        Api.WriteToStream(d, labelStream).GetAwaiter().GetResult();
                    }
                }
                Assert.True(labelStream.Length > 0);
            }

            // manifest
            var manifest = ManifestFluent <Manifest> .Create()
                           .Carrier(Carrier.USPS)
                           .FromAddress(((Shipment)shipment).FromAddress)
                           .InductionPostalCode("06484")
                           .SubmissionDate(DateTime.Now)
                           .AddParameter <Parameter>(ManifestParameter.SHIPPER_ID, Globals.DefaultSession.GetConfigItem("ShipperID"))
                           .TransactionId(Guid.NewGuid().ToString().Substring(15));

            var manifestResponse = Api.CreateManifest <Manifest>(manifest).GetAwaiter().GetResult();

            Assert.NotNull(manifestResponse);
            if (manifestResponse.Success)
            {
                Assert.NotNull(manifestResponse.ResponseObject);
            }
            else
            {
                // making a shipment available to manifest seems to be an async process and the shipment just created might
                // not be available
                Assert.True(manifestResponse.Errors.Count == 1);
                Assert.True(manifestResponse.Errors[0].ErrorCode == "1110019");
            }

            using (var manifestStream = new MemoryStream())
            {
                foreach (var d in manifestResponse.APIResponse.Documents)
                {
                    Api.WriteToStream(d, manifestStream).GetAwaiter().GetResult();
                }
                Assert.True(manifestStream.Length > 0);
            }

            // Cancel the label

            var cancelRequest = new CancelShipmentRequest
            {
                Carrier          = Carrier.USPS,
                CancelInitiator  = CancelInitiator.SHIPPER,
                TransactionId    = Guid.NewGuid().ToString().Substring(15),
                ShipmentToCancel = label.APIResponse.ShipmentId
            };
            var cancelResponse = Api.CancelShipment(cancelRequest).GetAwaiter().GetResult();

            Assert.NotNull(cancelResponse);
            Assert.True(cancelResponse.Success);
            Assert.NotNull(cancelResponse.ResponseObject);
        }
示例#11
0
        static void Main(string[] args)
        {
            var sandbox = new Session()
            {
                EndPoint = "https://api-sandbox.pitneybowes.com", Requester = new ShippingApiHttpRequest()
            };

            var configs = new Dictionary <string, string>
            {
                { "ApiKey", "YOUR_API_KEY" },
                { "ApiSecret", "YOUR_API_SECRET" },
                { "RatePlan", "YOUR_RATE_PLAN" },
                { "ShipperID", "YOUR_SHIPPER_ID" },
                { "DeveloperID", "YOUR_DEVELOPER_ID" }
            };
            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder
            .AddInMemoryCollection(configs)
            .AddJsonFile(Globals.GetConfigPath("shippingapisettings.json"), optional: true, reloadOnChange: true);

            sandbox.GetConfigItem = (c) => configurationBuilder.Build()[c];
            Model.RegisterSerializationTypes(sandbox.SerializationRegistry);
            Globals.DefaultSession = sandbox;

            var shipment = (Shipment)ShipmentFluent <Shipment> .Create()
                           .ToAddress((Address)AddressFluent <Address> .Create()
                                      .AddressLines("643 Greenway Rd")
                                      .PostalCode("28607")
                                      .CountryCode("US")
                                      .Verify())
                           .FromAddress((Address)AddressFluent <Address> .Create()
                                        .Company("Pitney Bowes Inc")
                                        .AddressLines("27 Waterview Drive")
                                        .CityTown("Shelton").StateProvince("CT").PostalCode("06484")
                                        .CountryCode("US")
                                        )
                           .Parcel((Parcel)ParcelFluent <Parcel> .Create()
                                   .Dimension(12, 0.25M, 9)
                                   .Weight(3m, UnitOfWeight.OZ))
                           .Rates(RatesArrayFluent <Rates> .Create()
                                  .USPSPriority <Rates, Parameter>()
                                  .InductionPostalCode("06484")
                                  )
                           .Documents((List <IDocument>)DocumentsArrayFluent <Document> .Create()
                                      .ShippingLabel(ContentType.BASE64, Size.DOC_4X6, FileFormat.PNG))
                           .ShipmentOptions(ShipmentOptionsArrayFluent <ShipmentOptions> .Create()
                                            .ShipperId(sandbox.GetConfigItem("ShipperID"))
                                            .MinimalAddressvalidation()
                                            )
                           .TransactionId(Guid.NewGuid().ToString().Substring(15));

            shipment.IncludeDeliveryCommitment = true;
            var label = Api.CreateShipment(shipment).GetAwaiter().GetResult();

            if (label.Success)
            {
                var sw = new StreamWriter("label.pdf");
                foreach (var d in label.APIResponse.Documents)
                {
                    Api.WriteToStream(d, sw.BaseStream).GetAwaiter().GetResult();
                }
            }
        }
示例#12
0
        static void Main(string[] args)
        {
            #region Example program setup
            SetupConfigProvider();
            SetupApiKey();
            #endregion

            #region ConfigureFramework

            var sandbox = new Session()
            {
                EndPoint = "https://api-sandbox.pitneybowes.com", Requester = new ShippingApiHttpRequest()
            };

            // Initialize framework

            // Hook in your concrete classes
            Model.RegisterSerializationTypes(sandbox.SerializationRegistry);

            // Hook in your config provider
            sandbox.GetConfigItem = (s) => Configuration[s];

            // Hook in your logger
            sandbox.LogWarning     = (s) => Logger.LogWarning(s);
            sandbox.LogError       = (s) => Logger.LogError(s);
            sandbox.LogConfigError = (s) => Logger.LogCritical(s);
            sandbox.LogDebug       = (s) => Logger.LogInformation(s);

            // Hook in your secure API key decryption
            sandbox.GetApiSecret = GetApiKey;

            if (Configuration["Mock"] == "true")
            {
                sandbox.Requester = new ShippingAPIMock();
            }

            Globals.DefaultSession = sandbox;
            #endregion
            #region CreateShipment

            try
            {
                // Create shipment
                var shipment = ShipmentFluent <Shipment> .Create()
                               .ToAddress((Address)AddressFluent <Address> .Create()
                                          .AddressLines("643 Greenway RD")
                                          .PostalCode("28607")
                                          .CountryCode("US")
                                          .Verify() // calls the service for address validation - will populate city and state from the zip
                                          )
                               .MinimalAddressValidation("true")
                               //.ShipperRatePlan(Globals.DefaultSession.GetConfigItem("RatePlan")) // use if you have a custom rate plan
                               .FromAddress((Address)AddressFluent <Address> .Create()
                                            .Company("Pitney Bowes Inc.")
                                            .AddressLines("27 Waterview Drive")
                                            .Residential(false)
                                            .CityTown("Shelton")
                                            .StateProvince("CT")
                                            .PostalCode("06484")
                                            .CountryCode("US")
                                            .Person("Paul Wright", "203-555-1213", "*****@*****.**")
                                            )
                               .Parcel((Parcel)ParcelFluent <Parcel> .Create()
                                       .Dimension(12, 12, 10)
                                       .Weight(16m, UnitOfWeight.OZ)
                                       )
                               .Rates(RatesArrayFluent <Rates> .Create()
                                      .USPSPriority <Rates, Parameter>()
                                      .InductionPostalCode("06484")
                                      )
                               .Documents((List <IDocument>)DocumentsArrayFluent <Document> .Create()
                                          .ShippingLabel(ContentType.BASE64, Size.DOC_4X6, FileFormat.ZPL2)
                                          )
                               .ShipmentOptions(ShipmentOptionsArrayFluent <ShipmentOptions> .Create()
                                                .ShipperId(sandbox.GetConfigItem("ShipperID"))
                                                .AddToManifest()
                                                )
                               .TransactionId(Guid.NewGuid().ToString().Substring(15));


                var label = Api.CreateShipment((Shipment)shipment).GetAwaiter().GetResult();

                #endregion
                #region UseShipment
                if (label.Success)
                {
                    Console.WriteLine(label.APIResponse.ParcelTrackingNumber);

                    // Tracking

                    var trackingRequest = new TrackingRequest
                    {
                        Carrier        = Carrier.USPS,
                        TrackingNumber = label.APIResponse.ParcelTrackingNumber
                    };
                    var trackingResponse = Api.Tracking <TrackingStatus>(trackingRequest).GetAwaiter().GetResult();

                    // Parcel Reprint
                    var reprintRequest = new ReprintShipmentRequest()
                    {
                        Shipment = label.APIResponse.ShipmentId
                    };

                    var reprintResponse = Api.ReprintShipment <Shipment>(reprintRequest).GetAwaiter().GetResult();

                    // Write the label to disk
                    foreach (var d in reprintResponse.APIResponse.Documents)
                    {
                        if (d.ContentType == ContentType.BASE64 && d.FileFormat == FileFormat.PNG)
                        {
                            // Multiple page png document
                            Api.WriteToStream(d, null,

                                              (stream, page) => // callback for each page
                            {
                                // create a new file

                                if (stream != null)
                                {
                                    stream.Dispose();
                                }
                                string fileName = string.Format("{0}{1}p{2}.{3}", Path.GetTempPath(), reprintResponse.APIResponse.ShipmentId, page.ToString(), d.FileFormat.ToString());
                                Console.WriteLine("Document written to " + fileName);
                                return(new FileStream(fileName, FileMode.OpenOrCreate));
                            },
                                              disposeStream: true
                                              ).GetAwaiter().GetResult();
                        }
                        else
                        {
                            string fileName = string.Format("{0}{1}.{2}", Path.GetTempPath(), reprintResponse.APIResponse.ShipmentId, d.FileFormat.ToString());
                            using (StreamWriter sw = new StreamWriter(fileName))
                            {
                                Api.WriteToStream(d, sw.BaseStream).GetAwaiter().GetResult();
                                Console.WriteLine("Document written to " + fileName);
                            }
                        }
                    }
                }
                #endregion
                #region CreateManifest

                // Create the manifest

                var manifest = ManifestFluent <Manifest> .Create()
                               .Carrier(Carrier.USPS)
                               .FromAddress(((Shipment)shipment).FromAddress)
                               .InductionPostalCode("06484")
                               .SubmissionDate(DateTime.Now)
                               .AddParameter <Parameter>(ManifestParameter.SHIPPER_ID, sandbox.GetConfigItem("ShipperID"))
                               .TransactionId(Guid.NewGuid().ToString().Substring(15));

                var manifestResponse = Api.CreateManifest <Manifest>(manifest).GetAwaiter().GetResult();
                #endregion
                #region UseManifest
                if (manifestResponse.Success)
                {
                    foreach (var d in manifestResponse.APIResponse.Documents)
                    {
                        string fileName = string.Format("{0}{1}.{2}", Path.GetTempPath(), manifestResponse.APIResponse.ManifestId, d.FileFormat.ToString());
                        try
                        {
                            using (StreamWriter sw = new StreamWriter(fileName))
                            {
                                Api.WriteToStream(d, sw.BaseStream).GetAwaiter().GetResult();
                                Console.WriteLine("Document written to " + fileName);
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }
                }
                #endregion
                #region SchedulePickup
                // Schedule a pickup

                var pickup = PickupFluent <Pickup> .Create()
                             .Carrier(Carrier.USPS)
                             .PackageLocation(PackageLocation.MailRoom)
                             .PickupAddress(((Shipment)shipment).FromAddress)
                             .PickupDate(DateTime.Now.AddDays(1))
                             .AddPickupSummary <PickupCount, ParcelWeight>(PickupService.PM, 1, 16M, UnitOfWeight.OZ)
                             .TransactionId(Guid.NewGuid().ToString().Substring(15));

                var pickupResponse = Api.Schedule <Pickup>(pickup).GetAwaiter().GetResult();
                #endregion
                #region UsePickup
                // Cancel pickup

                if (pickupResponse.Success)
                {
                    pickup.Cancel();
                }

                // Cancel the label

                if (label.Success)
                {
                    var cancelRequest = new CancelShipmentRequest
                    {
                        Carrier          = Carrier.USPS,
                        CancelInitiator  = CancelInitiator.SHIPPER,
                        TransactionId    = Guid.NewGuid().ToString().Substring(15),
                        ShipmentToCancel = label.APIResponse.ShipmentId
                    };
                    var cancelResponse = Api.CancelShipment(cancelRequest).GetAwaiter().GetResult();
                }
                #endregion
                #region TransactionReports
                // Transaction report with IEnumerable

                var transactionsReportRequest = new ReportRequest()
                {
                    FromDate    = DateTimeOffset.Parse("6/30/2019"),
                    ToDate      = DateTimeOffset.Now,
                    DeveloperId = sandbox.GetConfigItem("DeveloperID")
                };
                foreach (var t in TransactionsReport <Transaction> .Report(transactionsReportRequest, x => x.CreditCardFee == null || x.CreditCardFee > 10.0M, maxPages: 2))
                {
                    Console.WriteLine(t.DestinationAddress);
                }

                // Transaction report with LINQ
                TransactionsReport <Transaction> report = new TransactionsReport <Transaction>(sandbox.GetConfigItem("DeveloperID"), maxPages: 2);
                var query = from transaction in report
                            where transaction.TransactionDateTime >= DateTimeOffset.Parse("6/30/2019") && transaction.TransactionDateTime <= DateTimeOffset.Now && transaction.TransactionType == TransactionType.POSTAGE_PRINT
                            select new { transaction.TransactionId };
                foreach (var obj in query)
                {
                    Console.WriteLine(obj);
                }

                #endregion
                #region CarrierRules

                // Download the carrier rules
                var req = new RatingServicesRequest()
                {
                    Carrier                = Carrier.USPS,
                    OriginCountryCode      = "US",
                    DestinationCountryCode = "US"
                };
                var res = CarrierRulesMethods.RatingServices(req).GetAwaiter().GetResult();
                if (res.Success)
                {
                    // validate a shipment
                    var v = new ShipmentValidator();
                    if (!v.Validate((Shipment)shipment, res.APIResponse))
                    {
                        Console.WriteLine("Shipment is not valid: {0}", v.Reason);
                    }

                    // do some interesting things with the rules
                    var ruleRep = new RuleReport
                    {
                        CarrierRules = new CarrierRule[1] {
                            res.APIResponse
                        }
                    };

                    // find possible services to fit a parcel
                    var to     = ((Shipment)shipment).ToAddress;
                    var from   = ((Shipment)shipment).FromAddress;
                    var parcel = ((Shipment)shipment).Parcel;

                    // match countries
                    ruleRep.CarrierRuleFilter = (rule) => rule.OriginCountry == from.CountryCode && rule.DestinationCountry == to.CountryCode;
                    // make sure parcel fits, is trackable and supports insurance, commercial base pricing
                    ruleRep.ParcelTypeRuleFilter = (rule) =>
                                                   rule.FitsDimensions(parcel.Dimension) &&
                                                   rule.HoldsWeight(parcel.Weight) &&
                                                   !(rule.Trackable == Trackable.NON_TRACKABLE) &&
                                                   rule.SpecialServiceRules.ContainsKey(SpecialServiceCodes.Ins) &&
                                                   rule.RateTypeId == "CONTRACT_RATES";

                    Shipment cheapestOption = null;
                    foreach (var ruleItem in ruleRep)
                    {
                        // create the shipment from looked up values
                        var newShipment = ShipmentFluent <Shipment> .Create()
                                          .ToAddress(to)
                                          .FromAddress(from)
                                          .MinimalAddressValidation("true")
                                          //.ShipperRatePlan(Globals.DefaultSession.GetConfigItem("RatePlan"))
                                          .Parcel(parcel)
                                          .Rates(RatesArrayFluent <Rates> .Create()
                                                 .Add()
                                                 .RateFromRule(ruleItem.Item1, ruleItem.Item2, ruleItem.Item3)
                                                 .SpecialServiceFromRule <Rates, SpecialServices>(ruleItem.Item4)
                                                 .SuggestedTrackingServiceFromRule <Rates, SpecialServices>(ruleItem.Item3)
                                                 .InductionPostalCode(from.PostalCode)
                                                 )
                                          .Documents((List <IDocument>)DocumentsArrayFluent <Document> .Create()
                                                     .ShippingLabel()
                                                     )
                                          .ShipmentOptions(ShipmentOptionsArrayFluent <ShipmentOptions> .Create()
                                                           .ShipperId(sandbox.GetConfigItem("ShipperID"))
                                                           .AddToManifest()
                                                           )
                                          .TransactionId(Guid.NewGuid().ToString().Substring(15));

                        // rate the parcel
                        var ratesResponse = Api.Rates <Shipment>((Shipment)newShipment).GetAwaiter().GetResult();
                        if (ratesResponse.Success)
                        {
                            if (cheapestOption == null || ratesResponse.APIResponse.Rates.First().TotalCarrierCharge < cheapestOption.Rates.First().TotalCarrierCharge)
                            {
                                cheapestOption = ratesResponse.APIResponse;
                            }
                            Console.WriteLine("{0},{1},{2},{3},{4},{5},{6} --- ${7}",
                                              ruleItem.Item1.Carrier,
                                              ruleItem.Item1.OriginCountry,
                                              ruleItem.Item1.DestinationCountry,
                                              ruleItem.Item2.ServiceId,
                                              ruleItem.Item3.ParcelType,
                                              ruleItem.Item3.RateTypeId,
                                              ruleItem.Item4 == null ? String.Empty : ruleItem.Item4.SpecialServiceId.ToString(),
                                              ratesResponse.APIResponse.Rates.First().TotalCarrierCharge);
                        }
                    }
                    //get the label
                    cheapestOption.TransactionId = Guid.NewGuid().ToString().Substring(15);
                    var newLabel = Api.CreateShipment(cheapestOption).GetAwaiter().GetResult();
                    if (newLabel.Success)
                    {
                        string fileName = string.Format("{0}{1}.{2}", Path.GetTempPath(), newLabel.APIResponse.ShipmentId, "PDF");
                        using (StreamWriter sw = new StreamWriter(fileName))
                        {
                            Api.WriteToStream(newLabel.APIResponse.Documents.First(), sw.BaseStream).GetAwaiter().GetResult();
                            Console.WriteLine("Document written to " + fileName);
                        }
                    }
                }
                foreach (var u in sandbox.Counters.Keys)
                {
                    Console.WriteLine(u);
                    Console.WriteLine("Errors: {0}", sandbox.Counters[u].ErrorCount);
                    foreach (var b in sandbox.Counters[u].CallHistogram.Keys)
                    {
                        Console.WriteLine("{0} {1}", 10 * b, sandbox.Counters[u].CallHistogram[b]);
                    }
                }
            }
            catch (ShippingAPIException e)
            {
                Console.WriteLine("ShippingAPI exception" + e.Message);
                if (e.ErrorResponse != null && e.ErrorResponse.Errors != null)
                {
                    foreach (var l in e.ErrorResponse.Errors)
                    {
                        Console.WriteLine(l.ErrorCode + " " + l.Message);
                    }
                }
            }

            #endregion
        }
示例#13
0
        static void Main(string[] args)
        {
            var sandbox = new Session()
            {
                EndPoint  = "https://api-sandbox.pitneybowes.com",
                Requester = new ShippingApiHttpRequest()
            };
            var configs = new Dictionary <string, string>
            {
                { "ApiKey", "<API_KEY>" },
                { "ApiSecret", "<API_Secret>" },
                { "RatePlan", "<Rate_Plan>" },
                { "ShipperID", "<Shipper_Id>" },
            };
            var configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(configs).AddJsonFile(Path.Combine(Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory), "shippingapisettings.json"), optional: true, reloadOnChange: true);



            sandbox.GetConfigItem = (c) => configurationBuilder.Build()[c];
            Model.RegisterSerializationTypes(sandbox.SerializationRegistry);
            Globals.DefaultSession = sandbox;
            var shipment = (Shipment)ShipmentFluent <Shipment> .Create()
                           .ToAddress((Address)AddressFluent <Address> .Create()
                                      .Company("Shop")
                                      .Name("Mary Jones")
                                      .Phone("620-555-0000")
                                      .Email("*****@*****.**")
                                      .AddressLines("284 W Fulton")
                                      .CityTown("Garden City").StateProvince("KS")
                                      .PostalCode("67846")
                                      .CountryCode("US")
                                      )
                           .FromAddress((Address)AddressFluent <Address> .Create()
                                        .Company("Supplies")
                                        .Name("Kathryn Smith")
                                        .Phone("334-000-0000 ")
                                        .Email("*****@*****.**")
                                        .AddressLines("2352 Bent Creek Rd")
                                        .CityTown("Auburn").StateProvince("AL").PostalCode("36830")
                                        .CountryCode("US")
                                        )
                           .Parcel((Parcel)ParcelFluent <Parcel> .Create()
                                   .Weight(20, UnitOfWeight.OZ))
                           .Rates(RatesArrayFluent <Rates> .Create().
                                  Add().Carrier(Carrier.FedEx)
                                  .Service(Services.TwoDA)
                                  .ParcelType(ParcelType.PKG))
                           .Documents((List <IDocument>)DocumentsArrayFluent <Document> .Create()
                                      .ShippingLabel(ContentType.URL, Size.DOC_4X6, FileFormat.PDF))
                           .ShipmentOptions(ShipmentOptionsArrayFluent <ShipmentOptions> .Create()
                                            .ShipperId(sandbox.GetConfigItem("ShipperID"))
                                            )
                           .TransactionId(Guid.NewGuid().ToString().Substring(15));



            shipment.IncludeDeliveryCommitment = true;
            var shipmentreq = (Shipment)shipment;

            shipmentreq.IncludeDeliveryCommitment = true;
            var label = Api.CreateShipment(shipment).GetAwaiter().GetResult();

            if (label.Success)
            {
                var sw = new StreamWriter("label.PDF");
                foreach (var d in label.APIResponse.Documents)
                {
                    Api.WriteToStream(d, sw.BaseStream).GetAwaiter().GetResult();
                }
            }
        }