Nerxhan
Nerxhan

Reputation: 311

OneNote API "A syntax or other error was detected in a request your app sent"

I'm writing a library on php to communicate with OneNote API (based on https://github.com/OneNoteDev/OneNoteAPISamplePHP).

I want to create Section and Pages.

The section created fine, but when I try to create pages always get the error:

A syntax or other error was detected in a request your app sent
error :{
       "code":"20011",
       "message":"The multi-part payload was malformed."
}

The body of page (mixed text + image):

--4ba4cdfe92db7bf32a8958dcad26d539951229d6570cfa0626c0adff64bf1ed9
Content-Disposition:form-data; name="Presentation"
Content-Type:text/html

<!DOCTYPE html>
<html>
  <head>
  <title>Page 1</title>
  <meta name="created" content="2015-06-02T04:41:44-07:00" />
  </head>
  <body><img src="name:imageData1" alt="" width="488" height="181" /><p><p>Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent egestas neque eu enim. Suspendisse eu ligula. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi ac felis.</p>
</p></body>
</html>

--4ba4cdfe92db7bf32a8958dcad26d539951229d6570cfa0626c0adff64bf1ed9
Content-Disposition:form-data; name="imageData1"
Content-Type:application/octet-stream

SomeData

--4ba4cdfe92db7bf32a8958dcad26d539951229d6570cfa0626c0adff64bf1ed9--

The body of page (Text):

--5e4b8756b81ac1881459fe7691fb6a3e93e35540ccf71450095f6d5a679e27a5
Content-Disposition:form-data; name="Presentation"
Content-Type:text/html

<!DOCTYPE html>
<html>
  <head>
    <title>Page 1</title>
    <meta name="created" content="2015-06-02T04:45:33-07:00" />
  </head>
  <body><p><p>Nulla facilisi. Etiam vitae tortor. Curabitur suscipit suscipit tellus. Etiam rhoncus. Quisque ut nisi.</p>

<p>Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Cras varius. Morbi mollis tellus ac sapien. Maecenas vestibulum mollis diam.</p>
</p></body>
</html>

--5e4b8756b81ac1881459fe7691fb6a3e93e35540ccf71450095f6d5a679e27a5--

I used this url to create page https://www.onenote.com/api/v1.0/sections/$section_id/pages

I uploaded on a test server and works fine. But when i uploaded on live server(which server has ssl certificated installed) always get this error.

Any idea, Thnx.

Upvotes: 0

Views: 132

Answers (1)

Yaniro
Yaniro

Reputation: 1587

The following is a very simple example of how this can be done. The example shows how two images can be embedded in the new page's content + one additional link to download and embedded image. All you have to do is paste your access token in the call to $oneNoteMultiPartRequest->send() and you're set.

For this example i've used an image which is embedded in the code but you can use any file / image you want (just remember to update the type attribute in the <object> and the Content-Type header for the appropriate request part.

Please note how the various attributes in the HTML (<img src="name:..."> and <object data="name:...">) reference an existing request part by its name.

class OneNoteMultiPartRequest {
    protected $boundary;
    protected $parts = array();
    protected $responseInfo = null;
    protected $errorMessage = null;

    function __construct($presentationPartHtml) {
        $this->boundary = uniqid('', true);
        $this->appendPart("Presentation", "text/html", $presentationPartHtml);
    }

    public function appendPart($partName, $partContentType, $partContent) {
        $this->parts[] = "--{$this->boundary}\r\nContent-Disposition: form-data; name=\"$partName\"\r\nContent-Type: $partContentType\r\n\r\n$partContent\r\n\r\n";
    }

    public function send($url, $accessToken) {
        $cUrl = curl_init();
        curl_setopt($cUrl, CURLOPT_URL, $url);
        curl_setopt($cUrl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($cUrl, CURLOPT_HEADER, false);
        curl_setopt($cUrl, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($cUrl, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($cUrl, CURLOPT_VERBOSE, true);
        curl_setopt($cUrl, CURLOPT_POST, true);
        curl_setopt(
            $cUrl,
            CURLOPT_HTTPHEADER,
            array(
                "Content-Type: multipart/form-data; boundary={$this->boundary}",
                "Authorization: Bearer $accessToken"
            )
        );

        $postData = implode($this->parts) . "--{$this->boundary}--";

        curl_setopt($cUrl, CURLOPT_POSTFIELDS, $postData);        
        $response = curl_exec($cUrl);
        $this->responseInfo = curl_getinfo($cUrl);
        $this->errorMessage = curl_error($cUrl);
        curl_close($cUrl);

        return $response;
    }

    public function getResponseInfo() {
        return $this->responseInfo;
    }

    public function getErrorMessage() {
        return $this->errorMessage;
    }
}

$presentationPartHtml = <<<PRESENTATIONHTML
<!DOCTYPE html>
<html>
    <head>
    <title>Title of the captured OneNote page</title>
    <meta name="created" content="2013-06-11T12:45:00.000-8:00"/>
    </head>
    <body>
        <p>This is a simple multi-part HTML page.</p>
        <img src="name:image1"/><br/>
        <img src="name:image2"/><br/>
        <object data-attachment="Logo.png" data="name:image3" type="image/png"/>
    </body>
</html>
PRESENTATIONHTML;

$imageData = "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";

$oneNoteMultiPartRequest = new OneNoteMultiPartRequest($presentationPartHtml);
$oneNoteMultiPartRequest->appendPart("image1", "image/png", base64_decode($imageData));
$oneNoteMultiPartRequest->appendPart("image2", "image/png", base64_decode($imageData));
$oneNoteMultiPartRequest->appendPart("image3", "image/png", base64_decode($imageData));
$response = $oneNoteMultiPartRequest->send("https://www.onenote.com/api/v1.0/pages", "<YOUR ACCESS TOKEN>");

var_dump($response);
echo '<br/><br/>';

$info = $oneNoteMultiPartRequest->getResponseInfo();
var_dump($info);
echo '<br/><br/>';

$errorMessage = $oneNoteMultiPartRequest->getErrorMessage();
var_dump($errorMessage);

Upvotes: 0

Related Questions