как использовать WooCommerce из С# для публикации записи

avatar
bilpor
1 июля 2021 в 17:39
62
0
1

Итак, у меня есть сайт woopress с woo commerce. Я нахожусь в процессе написания приложения для отдыха С# WebApi для взаимодействия с сайтом WordPress. На данный момент я могу поймать такие вещи, как создание нового продукта, создание заказа из woo с помощью веб-хуков.

Теперь я пытаюсь пойти другим путем и в этом случае опубликовать новый продукт в wordpress из моего API.

Я установил последнюю версию WooCommerce.Net из Nuget (V4.0.30319).

Для тестирования я создал продукт:

var wooProduct = new WooCommerceNET.WooCommerce.v3.Product
            {
                name = "test product",
                type = "simple",
                regular_price = 23.99m,
                description = "test product to see if I can create a product using rest APi",
                short_description = "this is a short desc",
                shipping_required = true,
                stock_quantity = 20
            };
            wooProduct.categories = new List<ProductCategoryLine>();
            wooProduct.categories.Add(new ProductCategoryLine { id = 1 });

Тогда для отправки у меня есть:

 var fullEndPoint = string.Concat(site, "/wp-json/wc/v3/", endpoint);

                var serializedData = JsonConvert.SerializeObject(postdata);

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullEndPoint);
                request.Method = "POST";
                request.ContentType = "application/json";
                request.Headers.Add("consumer_key", woosecret);
                string encoded = System.Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1")
                                           .GetBytes(username + ":" + password));
                request.Headers.Add("Authorization", "Basic " + encoded);
                using (StreamWriter swJSONPayload = new StreamWriter(request.GetRequestStream()))
                {
                    swJSONPayload.Write(serializedData);
                    swJSONPayload.Close();
                }

но ничего не происходит, и я не получаю никаких сообщений об ошибках. В документации сказано, что

WooCommerceNET.RestAPI

устарел, и все примеры не показывают, как отправлять из C#. Если кто-нибудь может указать мне правильное направление, я был бы очень признателен.

Обновление: я добавил базовую авторизацию, где имя пользователя и пароль являются действительными настройками пользователя на wordpress/woo. Теперь я получаю несанкционированную ошибку 401, но не знаю, что еще мне нужно указать, чтобы разрешить это.

Обновление 2: у меня не включена обычная проверка подлинности в IIS. Теперь, когда я это сделал, я получаю сообщение об ошибке, предполагающее, что IIS не может проверить подлинность предоставленного имени пользователя и пароля. Эти детали настраиваются в wordpress и не являются общесистемными. В данный момент я запускаю все это на машине разработчика с Windows 10, поэтому Active Directory тоже нет.

Источник
JohnPete22
1 июля 2021 в 17:59
0

Вы пытались отправить запрос через что-то вроде PostMan? Мне нравится тестировать там, так как он дает более полезную информацию об ошибках.

bilpor
1 июля 2021 в 18:32
0

@JohnPete22, используя почтальон, я все еще получаю 401, но он дает "Sorry, you are not allowed to create resources." Пользователь, которого я передаю в авторизации, настроен на woo как администратор и имеет доступ для чтения/записи.

JohnPete22
1 июля 2021 в 19:08
0

Что касается специфики WooCommerce, я не совсем уверен, хотя, возможно, у них есть какая-то документация по этой ошибке, или вам, возможно, придется обратиться в службу поддержки. По крайней мере, у вас есть общее представление о том, что сейчас связано с разрешениями/авторизацией, и ваш код должен работать после разрешения.

Ответы (0)