Wywołanie API w PHP za pomocą aplikacji C#

0

Witam.
Mam pewien problem z wywołaniem API w PHP.
BaseLinker - dokumentacja API

var data = new 
{
    token = "**SECRET_TOKEN**",
    method = "getOrders",
    parameters = string.Empty
};

RestClient client = new RestClient("https://api.baselinker.com/connector.php");
var request = new RestRequest(Method.POST);
request.AddJsonBody(data);

var aqq = client.Execute(request).Content;

Odpowiedź z API jest o treści:

{"status":"ERROR","error_code":"ERROR_EMPTY_TOKEN","error_message":"Nie podano tokena u\u017cytkownika."}

Debugowany request w sekcji Parameters pokazuje:

{={ token = **SECRET_TOKEN**, method = getOrders, parameters =  }}

Ktoś jest w stanie mnie nakierować jak wywołać API w PHP z aplikacji w C#?

2

W dokumentacji ja widzę coś takiego:

Przykład: https://api.baselinker.com/connector.php , POST: token=1-23-ASOIM234MFDSK534LDS &method=getOrders &parameters={"date_from": 1407341754}

Więc body żądania nie jest według tego przykładu jako JSON, tylko "zwyczajnie" (natomiast paramters jest obiektem JSON) - czyli prawdopodobnie tak:

var client = new RestClient("https://api.baselinker.com/connector.php");

var request = new RestRequest(Method.POST);
request.AddParameter("token", "TOKEN");
request.AddParameter("method", "getOrders");
request.AddParameter("parameters", string.Empty);

var aqq = client.Execute(request).Content;
0

Te zdanie mnie lekko zmyliło i wyszedłem z założenia, że jak JSON to tylko Body...

Do komunikacji wykorzystywane są dane w formacie JSON. Aby wykonać zapytanie do API, należy wysłać odpowiednie żądanie POST na adres: 
https://api.baselinker.com/connector.php

Dzięki, sam na to nie wpadłem...

0

Po wysłaniu requesta z numerem zamówienia, otrzymuję zwrotkę ze wszystkimi zamówieniami..
w programie mam to tak:

var client = new RestClient("https://api.baselinker.com/connector.php");
var request = new RestRequest(Method.POST);
request.AddParameter("token", "TOKEN");
request.AddParameter("method", "getOrders");
request.AddParameter( "application/json", "{ \"order_id\": 99999999 }",  ParameterType.RequestBody);

Tak samo jest gdy wstawie:
request.AddJsonBody(body);

Odpoowiedż jest taka jakby było :
request.AddParameter("parameters", string.Empty);

Co ja robię nie tak ? Może ktoś podpowiedzieć...

0

Przecież w C# ci taki zapis request.AddParameter( "application/json", "{ "order_id": 99999999 }", ParameterType.RequestBody); nie zadziała, zwłaszcza ta część "{ "order_id": 99999999 }". Polecam skorzystać z NewtosoftJson

Ja mam tak

private RestRequest _createRequest(string method, object parameters)
{
  RestRequest request = new RestRequest();
  request.Method = Method.Post;
  request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
  request.AddHeader("X-BLToken", "token");
  request.AddParameter("method", method);
  if(parameters != null)
    request.AddParameter("parameters", JsonConvert.SerializeObject(parameters));

  return request;
}

A wywołuje tak

RestRequest request = _createRequest("getOrders", new { order_id = id });
0
AdamWox napisał(a):

Przecież w C# ci taki zapis request.AddParameter( "application/json", "{ "order_id": 99999999 }", ParameterType.RequestBody); nie zadziała, zwłaszcza ta część "{ "order_id": 99999999 }". Polecam skorzystać z NewtosoftJson

Ja mam tak

private RestRequest _createRequest(string method, object parameters)
{
  RestRequest request = new RestRequest();
  request.Method = Method.Post;
  request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
  request.AddHeader("X-BLToken", "token");
  request.AddParameter("method", method);
  if(parameters != null)
    request.AddParameter("parameters", JsonConvert.SerializeObject(parameters));

  return request;
}

A wywołuje tak

RestRequest request = _createRequest("getOrders", new { order_id = id });

Tak z głupa spróbowałem czy to zadziała, ale dostaję {"status":"ERROR","error_code":"ERROR_UNKNOWN_METHOD","error_message":"An empty or unknown method has been used"}
Dlaczego?

    static void Main(string[] args)
    {
        var client = new RestClient("https://api.baselinker.com/connector.php");
        RestRequest request = _createRequest("getOrders", new { order_id = 64533165 });
        var response = client.Get(request);

        Console.WriteLine(response.Content.ToString());

        RestRequest _createRequest(string method, object parameters)
        {
            RestRequest request = new RestRequest();
            request.Method = Method.Post;
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddHeader("X-BLToken", "xxxxxxxx");
            request.AddParameter("method", method);
            if (parameters != null)
                request.AddParameter("parameters", JsonConvert.SerializeObject(parameters));

            return request;
        }
    }
1

Nie możesz zrobić var response = client.Get(request);. Zamień na var response = client.Post(request);. Baselinker nie ma get.

1 użytkowników online, w tym zalogowanych: 0, gości: 1