尝试添加项目兼容性时使用 eBay SDK 时出错

问题描述 投票:0回答:1

我有一个 winform C# 应用程序,用作库存管理系统并在 eBay 拍卖上发布商品。我们正在尝试添加零件的兼容性,当尝试修改列表以添加兼容性信息时,我收到以下错误:

“不存在 被指定为空标签。”

但是,API 参考指出了这一点:

ConditionID(已添加):Sandbox 中的一些类别支持 ConditionID。从 2010 年 5 月开始,它将在大多数类别的生产中发挥作用。当 GetCategoryFeatures 显示商品主要类别的 ConditionEnabled=Enabled 或必需时,使用 ConditionID 而不是 AttributeSetArray、LookupAttributeArray 或 ItemSpecifics 来指定项目的条件。

public partial class MainForm : Form
{
    public List<string[]> CsvData { get; set; } = [];
    public string? SerialNumber { get; set; }
    public string? File { get; set; }

    public MainForm()
    {
        InitializeComponent();
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
        Logger.Logger.LogInfo("Starting Up...");
    }

    private void TbSerial_TextChanged(object sender, EventArgs e)
    {
        SerialNumber = tbSerial.Text;
    }

    private void btnCSV_Click(object sender, EventArgs e)
    {
        var dialog = new OpenFileDialog();
        dialog.ShowDialog();
        File = dialog.FileName;

        CreateDataTable();
    }

    private void CreateDataTable()
    {
        var dataTable = new DataTable();
        dataTable.Columns.Add("Year");
        dataTable.Columns.Add("Make");
        dataTable.Columns.Add("Line");
        dataTable.Columns.Add("Model");

        if (File != null)
        {
            var streamReader = new StreamReader(File);
            while (!streamReader.EndOfStream)
            {
                var totalData = streamReader.ReadLine()?.Split(',');
                if (totalData is not { Length: > 0 }) continue;

                CsvData.Add(totalData);

                dataTable.Rows.Add(totalData[0], totalData[1], totalData[2], totalData[3]);
            }
        }

        dataGridView1.DataSource = dataTable;
    }

    private void BtnEbayUpdate_Click(object sender, EventArgs e)
    {
        if (CsvData.Count <= 0)
            Logger.Logger.LogError("You must upload a fitment file first!!");

        if (string.IsNullOrEmpty(SerialNumber))
            Logger.Logger.LogError("You must input a serial number!!");

        var itemCompatibilityTypeCollection = new ItemCompatibilityTypeCollection();

        for (var i = 0; i < CsvData.Count; i++)
        {
            var line = CsvData[i];
            if (i == 0) { continue; }
            var year = line[0];
            var make = line[1];
            var model = line[3];

            var fitmentYear = new NameValueListType
            {
                Name = "Year",
                Value = [year]
            };
            var fitmentMake = new NameValueListType
            {
                Name = "Make",
                Value = [make]
            };
            var fitmentModel = new NameValueListType
            {
                Name = "Model",
                Value = [model]
            };

            NameValueListTypeCollection fitmentData =
            [
                fitmentYear,
                fitmentMake,
                fitmentModel
            ];

            var itemCompatibilityType = new ItemCompatibilityType
            {
                NameValueList = fitmentData
            };

            itemCompatibilityTypeCollection.Add(itemCompatibilityType);
        }

        var db = new GWDB.GWDB();
        var invRecord = db.Inventories
            .Where(s => s.SerialNumber == SerialNumber && s.Status == "Auction")
            .Select(x => x)
            .FirstOrDefault();
        if (invRecord == null) return;

        var eBayId = invRecord.eBayID;
        var auction = eBay.eBay.GetItemRequest(eBayId);
        if (auction.Item == null) return;

        auction.Item.ItemCompatibilityList = new ItemCompatibilityListType
        {
            Compatibility = itemCompatibilityTypeCollection
        };

        auction.Item.ConditionID = 4000;

        var response = eBay.eBay.ReviseItem(auction.Item);
        if (response.Ack != AckCodeType.Success) return;

        Logger.Logger.LogInfo(@$"Auction {eBayId} has been updated with fitment info.");
    }
}
    public class eBay
    {
        public static eBayAPIInterfaceService eBayServiceCall(string callName)
        {
            var endpoint = "https://api.ebay.com/wsapi";
            const string siteId = "100";
            var appId = AppSettingsHelper.AppID;     // use your app ID
            var devId = AppSettingsHelper.DevID;     // use your dev ID
            var certId = AppSettingsHelper.CertID;   // use your cert ID
            const string version = "965";
            // Build the request URL
            var requestURL = endpoint
                             + "?callname=" + callName
                             + "&siteid=" + siteId
                             + "&appid=" + appId
                             + "&version=" + version
                             + "&routing=default";

            var service = new eBayAPIInterfaceService();
            // Assign the request URL to the service locator.
            service.Url = requestURL;
            // Set credentials
            service.RequesterCredentials = new CustomSecurityHeaderType
            {
                eBayAuthToken = AppSettingsHelper.Token, // use your token
                Credentials = new UserIdPasswordType
                {
                    AppId = appId,
                    DevId = devId,
                    AuthCert = certId
                }
            };
            return service;
        }

        /// <summary>
        /// Verify whether item is ready to be added to eBay.
        /// </summary>
        public static string AddEbayItem(ItemType item)
        {
            var service = eBayServiceCall("VerifyAddItem");

            var request = new VerifyAddItemRequestType
            {
                Version = "949",
                ErrorLanguage = "en_US",
                WarningLevel = WarningLevelCodeType.High,
                Item = item
            };

            try
            {
                var response = service.VerifyAddItem(request);
                if (response != null)
                {
                    switch (response.Ack)
                    {
                        case AckCodeType.Warning:
                            {
                                for (var i = 0; i < response.Errors.Count; i++)
                                {
                                    Logger.Logger.LogWarning(response.Errors[i].LongMessage);
                                    i++;
                                }
                                break;
                            }
                        case AckCodeType.Failure:
                            {
                                for (var i = 0; i < response.Errors.Count; i++)
                                {
                                    Logger.Logger.LogError(response.Errors[i].LongMessage);
                                    i++;
                                }
                                break;
                            }
                        case AckCodeType.Success:
                            {
                                Logger.Logger.LogInfo((response.Message));
                                break;
                            }
                        case AckCodeType.PartialFailure:
                            break;
                        case AckCodeType.CustomCode:
                            break;
                        default:
                            throw new ArgumentOutOfRangeException();
                    }

                    // If item is verified, the item will be added.
                    if (response.ItemID != "0") return null;
                }

                var ebayID = AddItemRequest(item);
                return ebayID;
            }
            catch (Exception ex)
            {
                Logger.Logger.LogError(@"Exception:");
                Logger.Logger.LogError($@"{ex.Message}");
                return null;
            }
        }

        /// <summary>
        /// Add item to eBay. Once verified.
        /// </summary>
        /// <param name="item">Accepts ItemType object from VerifyAddItem method.</param>
        public static string AddItemRequest(ItemType item)
        {
            try
            {
                var service = eBayServiceCall("AddItem");

                var request = new AddItemRequestType
                {
                    Version = "949",
                    ErrorLanguage = "en_US",
                    WarningLevel = WarningLevelCodeType.High,
                    Item = item
                };

                var response = service.AddItem(request);

                Logger.Logger.LogInfo($@"ItemID: {response.ItemID}");

#if DEBUG
                //Process.Start($@"http://ebay.com/itm/{response.ItemID}");
#else
                //Process.Start($@"http://ebay.com/itm/{response.ItemID}");
#endif
                return response.ItemID;
            }
            catch (Exception ex)
            {
                Logger.Logger.LogError(@"Exception:");
                Logger.Logger.LogError($@"{ex.Message}");
                return null;
            }
        }

        /// <summary>
        /// Retrieve item details.
        /// </summary>
        /// <param name="ItemID">eBay Item ID</param>
        public static GetItemResponseType GetItemRequest(string ItemID)
        {
            var service = eBayServiceCall("GetItem");
            var request = new GetItemRequestType
            {
                Version = "949",
                ItemID = ItemID
            };
            var response = service.GetItem(request);
            return response;


            //MessageBox.Show(@"=====================================");
            //MessageBox.Show(@"Item Iitle - {0}", response.Item.Title);
            //MessageBox.Show(@"=====================================");

            //MessageBox.Show(@"ItemID: {0}", response.Item.ItemID);
            //MessageBox.Show(@"Primary Category: {0}", response.Item.PrimaryCategory.CategoryName);
            //MessageBox.Show(@"Listing Duration: {0}", response.Item.ListingDuration);
            //MessageBox.Show(@"Start Price: {0} {1}", response.Item.StartPrice.Value, response.Item.Currency);
            //MessageBox.Show(@"Payment Type[0]: {0}", response.Item.PaymentMethods[0]);
            //MessageBox.Show(@"PayPal Email Address: {0}", response.Item.PayPalEmailAddress);
            //MessageBox.Show(@"Postal Code: {0}", response.Item.PostalCode);
            // ...Convert response object to JSON to see all
        }

        public static ReviseItemResponseType ReviseItem(ItemType item)
        {
            var service = eBayServiceCall("ReviseItem");
            var request = new ReviseItemRequestType
            {
                Version = "949",
                Item = item
            };
            var response = service.ReviseItem(request);
            return response;
        }

        public static bool EndEbayItem(string itemID)
        {
            try
            {
                var status = false;

                var service = eBayServiceCall("EndItem");

                var request = new EndItemRequestType
                {
                    Version = "949",
                    ErrorLanguage = "en_US",
                    WarningLevel = WarningLevelCodeType.High,
                    EndingReason = EndReasonCodeType.NotAvailable,
                    ItemID = itemID
                };

                var response = service.EndItem(request);
                if (response.Ack == AckCodeType.Success)
                    status = true;

                Logger.Logger.LogInfo($@"Auction ID {itemID} ended: {response.Ack}");
                return status;
            }
            catch (Exception ex)
            {
                Logger.Logger.LogError(@"Exception:");
                Logger.Logger.LogError($@"{ex.Message}");
                return false;
            }
        }
    }
c# winforms ebay-api ebay-sdk
1个回答
0
投票

无视。版本有问题。

© www.soinside.com 2019 - 2024. All rights reserved.