Forum Discussion

DeanFX's avatar
DeanFX
Member
5 years ago

Attaching a pdf to an existing Bill in MYOB using API

Hello all,

 

I am attempting to follow the directions listed here: https://apisupport.myob.com/hc/en-us/articles/360001652376-Base64-Encoded-Bill-Attachement to upload a pdf of an invoice to a bill.

 

I am testing with Postman and am able to successfully connect to the CompanyFile just fine and access any of the required URI's with no issues. Just when i try to upload a file.

 

If i se the BODY value in Postman to 'form-data' i get the below error every time:

{
"Errors": [
{
"Name": "SerializationError",
"Message": null,
"AdditionalDetails": "Unexpected character encountered while parsing number: W. Path '', line 1, position 6.",
"ErrorCode": 50,
"Severity": "Error",
"LearnMore": null
}
],
"Information": "Warning, error messages have not been finalised in this release and may change"
}

 

Is there any further information or sample code to show HOW the body syntax should look??

 

Hoping someone can help point me in the right direction.

6 Replies

Replies have been turned off for this discussion
  • DeanFX's avatar
    DeanFX
    Member
    5 years ago

    Followup for anybody looking, i worked out the correct syntax for attaching a pdf file to a bill.

     

    The JSON Body should be:

     

    {

    "Attachment":

    {

    "OriginalFileName": "{{filename_required}}",

    "FileBase64Content": "{{base64_encoded_file_string}}"

    }

    }

  • Emile's avatar
    Emile
    Former Staff
    5 years ago

    Hey DeanFX 

     

    Welcome to the forum.

     

    I believe it's just a JSON body instead of using form-data.

    eg.

    {

      "OriginalFileName": "Name",

      "FileBase64Content": "Content"

    }

  • DeanFX's avatar
    DeanFX
    Member
    5 years ago

    Thank you Emile,

     

    I had tried that, just forgot to put it in the original post, but i get the following error when doing it that way:

    {
    "Errors": [
    {
    "Name": "InternalError",
    "Message": "An exception was thrown that was not handled correctly. If this situation persists please contact developers@myob.com for further assistance.",
    "AdditionalDetails": null,
    "ErrorCode": 20,
    "Severity": "Error",
    "LearnMore": null
    }
    ],
    "Information": "Warning, error messages have not been finalised in this release and may change"

     

    I do get different messages if i play with the JSON layout, but still no joy getting it to work.

     

    EDIT:

    Sorry, thought i had better put all my workings in here as well.

     

    If i set the BODY to be JSON like:

    {

    "OriginalFileName": "Invoice.pdf",

    "FileBase64Content": "JVBERi0{{truncated for ease}}YNCg++"

    }

     

    I always get the InternalError as shown above.

     

    I thought about playing with the JSON layout and tried:

    {

    "Attachment": [

    {

    "OriginalFileName": "Invoice.pdf",

    "FileBase64Content": "JVBERi0{{truncated for ease}}YNCg++"

    }

    ]

    }

     

    But then i get the below error (which may be a valid error as i dont know how MYOB wants the BODY laid out)

    {
    "Errors": [
    {
    "Name": "SerializationError",
    "Message": null,
    "AdditionalDetails": "Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'MYOB.AccountRight.API.Version2.Contracts.BillAttachmentData' because the type requires a JSON object (e.g. {\"name\":\"value\"}) to deserialize correctly.\r\nTo fix this error either change the JSON to a JSON object (e.g. {\"name\":\"value\"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.\r\nPath 'Attachment', line 2, position 16.",
    "ErrorCode": 50,
    "Severity": "Error",
    "LearnMore": null
    }
    ],
    "Information": "Warning, error messages have not been finalised in this release and may change"
    }

     

    Hoping the above helps.

  • Viital's avatar
    Viital
    Contributing User
    5 years ago

    Sorry to hijack this thread but I am receiving the error below and the link posted below is now broken.

     

    { "Errors": [ { "Name": "FileExtensionRequired", "Message": "Original file type must be .pdf .tiff .jpg .jpeg .x-ms-png or .png and must be consistent in decoded file base64 content", "AdditionalDetails": "", "ErrorCode": 80000, "Severity": "Error", "LearnMore": null } ], "Information": "Warning, error messages have not been finalised in this release and may change" }

     

    My Code Snippet

     

    	$curl = curl_init();
    
    		curl_setopt_array($curl, array(
    		  CURLOPT_URL => $url,
    		  CURLOPT_RETURNTRANSFER => true,
    		  CURLOPT_ENCODING => "",
    		  CURLOPT_MAXREDIRS => 10,
    		  CURLOPT_TIMEOUT => 0,
    		  CURLOPT_FOLLOWLOCATION => true,
    		  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    		  CURLOPT_CUSTOMREQUEST => "POST",
    		  CURLOPT_POSTFIELDS =>'{
    		  						"Attachment":
    								{
    								"OriginalFileName": "{{test.jpg}}",
    								"FileBase64Content": "{{.$postdata.}}"
    								}
    								}',
    		  CURLOPT_HTTPHEADER => $this->header,
    		));
    
    		$response = curl_exec($curl);
    
    		curl_close($curl);
    		echo $response;

    thank you for any help..

     

    Ben

  • DeanFX's avatar
    DeanFX
    Member
    5 years ago

    Hi Ben,

     

    I just noticed my synatx may be a bit misleading in the sample i showed. I wrapped the fields with {{ & }} as they appear as a placeholder in the MYOB dev documentation.

    However, the actual syntax should be:

    {
    	"Attachment":
    	{
    	"OriginalFileName": "test.jpg",
    	"FileBase64Content": "base64.encoded_file_string"
    	}
    }

    I'm by no means a CURL programmer, but the above is the syntax i use with no issues.

     

    Hope this helps.

  • Viital's avatar
    Viital
    Contributing User
    5 years ago

    Thanks Dean. I really appreciated.

     

    I have managed to get the upload working perfectly.

     

     

Looking for something else?

Search the Community Forum for answers or find your topic and get the conversation started!

Community home

Level up your skills using MYOB software.

 

Find help guides and technical solutions for all MYOB products here

Explore video tutorials for our software at the MYOB Academy here

 

Dig into MYOB Academy for free courses, learning paths and live events to help build your business with MYOB.