eBay API AddItem call returns "Domestic shipping is required if AutoPay is specified" error

920 Views Asked by At

I'm new to eBay's API, and I'm trying to make an AddItem call. However, I keep getting an error:

Domestic shipping is required if AutoPay is specified

I copied the code in line-for-line from the SDK example code and it compiles and runs just fine, so I feel like there might have been some sort of change on eBay's end.

Here's some of my code:

static ItemType BuildItem()
    {
        ItemType item = new ItemType();

        item.AutoPaySpecified = false;

        item.Title = "Test Item";
        item.Description = "eBay SDK sample test item";

        item.ListingType = ListingTypeCodeType.Chinese;
        item.Currency = CurrencyCodeType.USD;
        item.StartPrice = new AmountType();
        item.StartPrice.Value = 20;
        item.StartPrice.currencyID = CurrencyCodeType.USD;

        item.ListingDuration = "Days_3";

        item.Location = "San Jose";
        item.Country = CountryCodeType.US;

        CategoryType category = new CategoryType();
        category.CategoryID = "11104";
        item.PrimaryCategory = category;

        item.Quantity = 1;
        item.ConditionID = 1000;
        item.ItemSpecifics = buildItemSpecifics();

        item.PaymentMethods = new BuyerPaymentMethodCodeTypeCollection();
        item.PaymentMethods.AddRange(
            new BuyerPaymentMethodCodeType[] { BuyerPaymentMethodCodeType.PayPal }
            );
        item.PayPalEmailAddress = "[email protected]";

        item.DispatchTimeMax = 1;
        item.ShippingDetails = BuildShippingDetails();

        item.ReturnPolicy = new ReturnPolicyType();
        item.ReturnPolicy.ReturnsAcceptedOption = "ReturnsAccepted";

        AmountType amount = new AmountType();
        amount.Value = 2.8;
        amount.currencyID = CurrencyCodeType.USD;
        item.StartPrice = amount;

        return item;
    }

    static NameValueListTypeCollection buildItemSpecifics()
    {
        NameValueListTypeCollection nvCollection = new NameValueListTypeCollection();

        NameValueListType nv1 = new NameValueListType();
        nv1.Name = "Platform";
        StringCollection nv1Col = new StringCollection();
        String[] strArr1 = new string[] { "Microsoft Xbox 360" };
        nv1Col.AddRange(strArr1);
        nv1.Value = nv1Col;
        NameValueListType nv2 = new NameValueListType();
        nv2.Name = "Genre";
        StringCollection nv2Col = new StringCollection();
        String[] strArr2 = new string[] { "Simulation" };
        nv2Col.AddRange(strArr2);
        nv2.Value = nv2Col;
        nvCollection.Add(nv1);
        nvCollection.Add(nv2);

        return nvCollection;
    }

    static ShippingDetailsType BuildShippingDetails()
    {
        ShippingDetailsType sd = new ShippingDetailsType();

        sd.ApplyShippingDiscount = true;
        AmountType amount = new AmountType();
        amount.Value = 2.8;
        amount.currencyID = CurrencyCodeType.USD;
        sd.PaymentInstructions = "eBay .Net SDK test instructions";

        // shipping type and shipping service options
        sd.ShippingType = ShippingTypeCodeType.Flat;
        ShippingServiceOptionsType shippingOptions = new ShippingServiceOptionsType();
        shippingOptions.ShippingService = ShippingServiceCodeType.ShippingMethodStandard.ToString();
        amount = new AmountType();
        amount.Value = 1;
        amount.currencyID = CurrencyCodeType.USD;
        shippingOptions.ShippingServiceAdditionalCost = amount;
        shippingOptions.ShippingServicePriority = 1;
        amount = new AmountType();
        amount.Value = 1.0;
        amount.currencyID = CurrencyCodeType.USD;
        shippingOptions.ShippingInsuranceCost = amount;

        sd.ShippingServiceOptions = new ShippingServiceOptionsTypeCollection(
            new ShippingServiceOptionsType[] { shippingOptions }
            );

        return sd;
    }

I've tried to set item.AutoPay = false; and item.AutoPaySpecified = false; - neither of those seem to do anything. I've searched the docs for any reference to something about domestic shipping, but I'm not finding anything.

Does anyone have any idea why this might be happening?

1

There are 1 best solutions below

0
On

Your shippingOptions field is missing a ShippingServiceCost, try changing the line:

shippingOptions.ShippingServiceAdditionalCost = amount;

to

shippingOptions.ShippingServiceCost = amount;

or add an assignment to ShippingServiceCost.

"Domestic shipping is required if AutoPay is specified" seems to mean that some conditional (i.e. depending on the type of shipping) field is missing from the shipping options. I ran into the same error when trying to add all the necessary fields for calculated shipping - without all the fields, eBay interprets it as flat-rate shipping that is missing the ShippingServiceCost field.