Как бы я общался с TextBroker, поскольку им требуется объект в SOAP-клиенте? - PullRequest
0 голосов
/ 26 июня 2019

Выдержка со страницы 13 внизу:

https://www.textbroker.com/wp-content/uploads/2018/10/API_Documentation_EN_V1.3.7.pdf

Структура API

В основном функции в этом API расположены в четырех разных местах.

• LoginService • budgetOrderService • budgetOrderChangeService • BudgetProofreadingService

Для вызова каждой функции нам сначала нужно создать объект API который состоит из URL-адреса API и расположения функции, которую мы будем звонить.

$apiUrl = 'https://api.textbroker.com/Budget/';
$location = 'https://api.textbroker.de/Budget/loginService.php';
$options = array(
 'location' => $location,
 'uri' => $apiUrl
);
$client = new SoapClient(null, $options);

Я построил клиенты SOAP, чтобы попытаться вызвать budgetOrderService напрямую, и он работает с кодом следующим образом, но ответ показывает, что мои логины неверны (они не являются), поэтому я предполагаю, что мне нужно выполнить doLogin каждый раз. Когда я пытаюсь вызвать WSDL LoginService, создается впечатление, что его не существует.

    // exports for routes
    exports.getPendingOrders = (req, res) => {
      let args = {};
      bcrypt.genSalt(6, (error, salt) => {
        if (error) console.error(error);
        args["salt"] = "1234AA"; // left this un-random for testing
        bcrypt.hash(config.password, salt, null, (error, encrypted) => {
          if (error) console.error(error);
          args["token"] = encrypted;
          args["budgetKey"] = config.budgetKey;
          args["status-ID"] = 4;
          soap.createClient(TEXTBROKER_BUDGET_LOGIN_WSDL, function(err, client) {
            if (err) {
              console.error(err);
            }
            res.send(client.describe()); // This fails, can't describe undefined.

            // Below does not fail with the WSDL Digest, but responds not logged in.
            // client.budgetOrderServiceService.budgetOrderServicePort.getOrdersByStatus(
            //   args,
            //   function(error, response) {
            //     res.send(response);
            //   }
            // );
          });
        });
      });
    };

Из всего, что я тестировал, мыло.createClient ожидает String, а не Array, Object или Array of Objects, поэтому я немного застрял. Что я могу сделать, чтобы обойти это?

1 Ответ

0 голосов
/ 28 июня 2019

Правильно!Услуги распределяются в нескольких местах, как на странице 13. Для вызова каждой службы вам необходимо каждый раз передавать свои учетные данные, doLogin выполняется путем вызова службы, вам не нужно вызывать ее отдельно.Итак, позвольте сказать, что вы хотите создать заказ.Сначала вы создаете свой клиент Soap, как показано ниже:

  $apiUrl     = 'https://api.textbroker.com/Budget/';
  $location   = 'https://api.textbroker.de/Budget/loginService.php';
  $options    = array(
    'location'  => $location,
    'uri'       => $apiUrl
  );
  $client     = new SoapClient(null, $options);

Установите свои учетные данные:

    $salt       =  rand(0, 10000);
    $password   = '0123456';
    $token      =  md5($salt . $password);
    $budgetKey  = 'abc12f6548930fe6ae53b';

А затем позвоните в службу и передайте учетные данные

        $category   = 1053;//can be researched with getCategories
        $title      = "Siemens Cell Phone";
        $desc       = "Which would you choose and why?";
        $min        = 100;
        $max        = 200;
        $stars      = 3;
        $deadline   = 2; //has to be completed in 2 days after the author started writing
        $response   = $client->create($salt, $token, $budgetKey, $category, $title, $desc, $min, $max, $stars, $deadline);
        if ($response['error'] == null) {
            echo "Order created with the following ID: " . $response['budget_order_id'];
            $response2 = $client->getStatus( $salt, $token, $budgetKey, $response['budget_order_id']);
            echo "\nType: ".$response2['budget_order_type']. ", Status: " . $response2['budget_order_status'];
        } else {
            echo $response['error'];
        }

Сейчаспозвоните в другую службу:

$response = $client->getOrdersByStatus($salt, $token, $budgetKey, 4);
echo "Order List: " . implode(',', $response);

Если вы звоните в службу из другого места, обязательно измените местоположение вашего клиента.

...