2014-11-24 2 views
0

Я пытаюсь интегрировать наше приложение с веб-сайтом Exact Online с помощью OAuth2, или, более конкретно, я пытаюсь создать часовую регистрацию, которая должна включать «Сотрудник», «Проект», «Часы», «Тип часов», ,OAuth2 интеграция с ExactOnline

function registerTime($access_token_for_data) { 

    //$dataToFilterAccounts = array('$filter' => 'IsSales eq true'); 
    $dataToRetrieveFromEmployees = array('$select' => 'ID'); 
    // $queryToFilterAccounts = http_build_query($dataToFilterAccounts); 
    $queryToRetrieveFromEmployees = http_build_query($dataToRetrieveFromEmployees); 

    // $dataToFilterItems = array('$filter' =>'IsSalesItem eq true'); 
    $dataToRetrieveProjects = array('$select' => 'ID'); 
    //$queryToFilterItems = http_build_query($dataToFilterItems); 
    $queryToRetrieveProjects = http_build_query($dataToRetrieveProjects); 

    $urlProjects = 'https://start.exactonline.nl/api/v1/638842/project/Projects'; 
    $urlEmployees = 'https://start.exactonline.nl/api/v1/638842/payroll/Employees'; 

    $curlProjects = curl_init($urlProjects); 
    $curlEmployees = curl_init($urlEmployees); 

    $headers = array(
     'Authorization: Bearer ' . $access_token_for_data, 
     'Accept: application/json', 
     'Content-type: application/json' 
    ); 

    curl_setopt($curlProjects, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curlProjects, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curlProjects, CURLOPT_URL, $urlProjects . '?' . $queryToRetrieveProjects); 
    curl_setopt($curlProjects, CURLOPT_CUSTOMREQUEST, 'GET'); 

    curl_setopt($curlEmployees, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curlEmployees, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curlEmployees, CURLOPT_URL, $urlEmployees . '?' . $queryToRetrieveFromEmployees); 
    curl_setopt($curlEmployees, CURLOPT_CUSTOMREQUEST, 'GET'); 


    $resultProjects = curl_exec($curlProjects); 
    $resultEmployees = curl_exec($curlEmployees); 

    $projectsData = json_decode($resultProjects, true); 
    $projectID = $projectsData["d"]["results"]["0"]["ID"]; 

    $employeesData = json_decode($resultEmployees, true); 
    $employeeID = $employeesData["d"]["results"]["0"]["ID"]; 

    curl_close($curlProjects); 
    curl_close($curlEmployees); 

    $urlTimeTransaction = 'https://start.exactonline.nl/api/v1/638842/project/TimeTransactions'; 

    $curlTimeTransacation = curl_init($urlTimeTransaction); 
    $content = json_encode(array("Project" => $projectID, "Employee" => $employeeI)); 

    curl_setopt($curlTimeTransacation, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curlTimeTransacation, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curlTimeTransacation, CURLOPT_POST, true); 
    curl_setopt($curlTimeTransacation, CURLOPT_POSTFIELDS, $content); 

    $createdTimeTransaction = curl_exec($curlTimeTransacation); 

    $status = curl_getinfo($curlTimeTransacation, CURLINFO_HTTP_CODE); 
    if ($status != 201) { 
     die("Error: call to URL $curlTimeTransacation failed with status $status, response $createdTimeTransaction, curl_error " . curl_error($curlTimeTransacation) . ", curl_errno " . curl_errno($curlTimeTransacation)); 
    } 
    echo "HTTP status $status creating time registartion<br/><br/>"; 
    curl_close($curlTimeTransacation); 
} 

И это ошибка, я получаю

Error: call to URL Resource id #56 failed with status 500, response { "error": { "code": "", "message": { "lang": "", "value": "Mandatory: Employee\r\nMandatory: Hours\r\nMandatory: Hour type" } } }, curl_error , curl_errno 0

Но когда я пытаюсь включить любой из этих mandatroy fileds я получаю:

Error: call to URL Resource id #56 failed with status 400, response { "error": { "code": "", "message": { "lang": "", "value": "Error processing request stream. The property name 'Hours' specified for type 'Exact.Web.Api.Models.TimeTransaction' is not valid." } } }, curl_error , curl_errno 0

+0

Вы когда-нибудь решали это в конце? – Coops

ответ

2

обратите внимание, что/API/v1/638842 содержит идентификатор вашего подразделения. Возможно, вы захотите изменить это на переменную.

Относительно вашей проблемы: обратите внимание, что сообщения об ошибках содержат текст, который должен потреблять человек. Фактические технические имена могут быть разными. Я всегда делаю это наоборот: я запрашиваю существующие данные и просматриваю все поля, а затем я знаю, что отправить. Вы можете использовать Query Tool для Exact Online в центре приложения Exact для выполнения запроса в REST api из Exact Online (но я предвзятый, потому что задействован).

0

Как Guido указал правильно, нет никакого поля имени Hours в TimeTransactionна projects, есть поле с именем Hoursна manufacturingTimeTransaction. Это немного запутанно, тем более, что сообщение об ошибке не очень понятно.

Чтобы уточнить часы на транзакции проекта, необходимо установить Quantity на номер TimeTransactions.

Смежные вопросы