错误发生时,Acumatica基于REST合同的API和PHP出现了卷曲,以创建数据

时间:2018-09-28 06:19:25

标签: php curl acumatica

我一直在尝试按照TIM RODMAN方法和一些代码调整,在基于Acumatica合同的REST API中创建客户 我得到的只是一个错误

  

{“消息”:“发生错误。”}

我尝试获取数据(获取所有数据)已成功,但是当我尝试创建新数据客户,采购订单时,还是出现了上面的错误

注意: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 :(得分:0)

除非您使用OAuth(不是),否则Acumatica需要使用Cookie才能进行身份验证。邮递员自动处理Cookie。据我所知,您不会在登录呼叫和后续呼叫之间转移Cookie,这就是为什么您的设置无法正常工作的原因。

答案 1 :(得分:0)

尝试从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"
),
));