Acumatica REST API на основе контракта и PHP Curl, поскольку произошла ошибка при создании данных - PullRequest
0 голосов
/ 28 сентября 2018

Я пытался создать клиента в REST API на основе контракта Acumatica, следуя методу TIM RODMAN и небольшому изменению кода, и все, что я получаю, это ошибка

{"message": "Произошла ошибка."}

Я попытался получить данные (ПОЛУЧИТЬ все данные) успешно, но когда я пытаюсь создать новые данные клиента, покупкаПорядок, иначе я получил сообщение об ошибке, как указано выше

Примечание. То же самое создание в Postman не сработало, но начало с входа в систему, получения данных и выхода из системы работает нормально.

См. кодниже для моей последней версии упрощенного кода

function login_acumatica($cookie_jar, $curl){
    // Login to Acumatica REST API
    curl_setopt_array($curl, array(
        CURLOPT_URL => "http://111.11.111.11/AcumaticaMMI/entity/auth/login",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_COOKIESESSION => 1,
        CURLOPT_COOKIEJAR => $cookie_jar,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => "{\r\n  \"name\": \"admin\",\r\n  \"password\": \"1112345\",\r\n  \"company\": \"DUMMY USER\"\r\n}",
        CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/json"),
    ));
    $response = curl_exec($curl);
    $err = curl_error($curl);
    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        echo $response;
    }
}

function logout_acumatica($cookie_jar, $curl){
    // Logout of Acumatica REST API
    curl_setopt_array($curl, array(
        CURLOPT_URL => "http://111.11.111.11/AcumaticaMMI/entity/auth/logout",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_COOKIESESSION => 1,
        CURLOPT_COOKIEFILE => $cookie_jar,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/json"),
    ));
    $response = curl_exec($curl);
    $err = curl_error($curl);
    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        echo $response;
    }
    // Close Connection
    curl_close($curl);
    // Remove Cookie Jar
    unlink($cookie_jar) or die("Can't unlink $cookie_jar");
}

 switch ($_GET['query']) {
    case 'create_customer':
        // Add Cookie Jar
        $cookie_jar = tempnam('/tmp','cookie.txt');
        // Initiate Connection
        $curl = curl_init();

    login_acumatica($cookie_jar, $curl);

    curl_setopt_array($curl, array(
      CURLOPT_URL => "http://111.11.111.11/AcumaticaMMI/entity/Default/6.00.001/CUstomer",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "PUT",
      CURLOPT_POSTFIELDS => "{\n\t\"CustomerID\": {\"value\":\"C-00023\"},\n\t\"CustomerName\": {\"value\":\"Cust Test 1\"}\n}",
      CURLOPT_HTTPHEADER => array(
        "cache-control: no-cache",
        "content-type: application/json"
      ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }

    logout_acumatica($cookie_jar, $curl);
    break;

default:
    echo dirname(__FILE__) . '/cookie.txt';
        break;
}

извините за мой плохой английский.заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Попробуйте что-то подобное от Тим Родман

// Add Cookie Jar
$cookie_jar = tempnam('/tmp','cookie');

// Initiate Connection
$curl = curl_init();

// Login to Acumatica REST API
echo "START <br><br>";

curl_setopt_array($curl, array(
CURLOPT_URL => "http://111.11.111.11/AcumaticaIII/entity/auth/login",
CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_COOKIESESSION => 1,
CURLOPT_COOKIEJAR => $cookie_jar,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\r\n  \"name\": \"admin\",\r\n  \"password\": \"123\",\r\n }",
CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: application/json", "postman-token: e0a0ff40-8d46-4c5f-106b-960ad1aafba8"
),
));
0 голосов
/ 01 октября 2018

Если вы не используете OAuth (которым вы не являетесь), Acumatica требует куки для аутентификации для работы.Почтальон обрабатывает куки автоматически.Насколько я вижу, вы не передаете куки между входом в систему и последующими вызовами, поэтому ваша установка не работает.

...