Ascaliko
Ascaliko

Reputation: 76

Acumatica REST Contract-Based API and PHP Curl As ERROR Has Occured to Create Data

I've been trying to create customer in Acumatica contract-based REST API following TIM RODMAN method and a little tweak of code and all I'm getting is an error

{"message":"An error has occurred."}

I have tried to get data (GET all data) has been successful, but when I try to create new data customer, purchase order or else i got an error appears as above

Note: The same create in Postman didn't work, but start from login, get data, and logout work fine.

See the code below for my latest version of simplified code

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;
}

sorry for my bad english. thanks in advance

Upvotes: 0

Views: 739

Answers (2)

Patrick Chen
Patrick Chen

Reputation: 1056

Try something like this from Tim Rodman

// 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"
),
));

Upvotes: 0

Sergei Rogovtcev
Sergei Rogovtcev

Reputation: 5832

Unless you're using OAuth (which you are not), Acumatica requires cookies for the authentication to work. Postman handles cookies autimatically. As far as I can see, you don't transfer cookies between login call and subsequent calls, which is why your setup doesn't work.

Upvotes: 0

Related Questions