Отсутствует ошибка в содержимом файла при создании временного документа на Adobe Sign с использованием REST API - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь создать временный документ в Adobe Sign, используя остальные API. После большого количества исследований я смог сделать правильный мультиформный запрос в Salesforce Apex. Но теперь я получаю сообщение об ошибке отсутствия содержимого файла, когда проверяю журнал отладки в Adobe Sign Account. Ниже приведен фрагмент моего кода:

 String boundary = '----------------------------741e90d31eff';
      String header = '--'+boundary+'\nContent-Disposition: form-data; name="file"; filename="testsign.pdf";\nContent-Type: application/octet-stream';

  String footer = '--'+boundary+'--';             
  String headerEncoded = EncodingUtil.base64Encode(Blob.valueOf(header+'\r\n\r\n'));
 while(headerEncoded.endsWith('='))
  {
     header+=' ';
     headerEncoded = EncodingUtil.base64Encode(Blob.valueOf(header+'\r\n\r\n'));
  }
    Blob testFileContent = Blob.valueOf('test file is sdfsdfsfs');
 // Blob testFileContent =[SELECT VersionData FROM ContentVersion WHERE ContentDocumentId = '0690x000001OhAu'][0].VersionData;
  String bodyEncoded = EncodingUtil.base64Encode(testFileContent);
    system.debug('bodyEncoded'+bodyEncoded);

  Blob bodyBlob = null;
  String last4Bytes = bodyEncoded.substring(bodyEncoded.length()-4,bodyEncoded.length());

 if(last4Bytes.endsWith('==')) {
    system.debug('inside first');
    last4Bytes = last4Bytes.substring(0,2) + '0K';
    bodyEncoded = bodyEncoded.substring(0,bodyEncoded.length()-4) + last4Bytes;

    String footerEncoded = EncodingUtil.base64Encode(Blob.valueOf(footer));
    bodyBlob = EncodingUtil.base64Decode(headerEncoded+bodyEncoded+footerEncoded);
  } else if(last4Bytes.endsWith('=')) {
    system.debug('inside second');
    last4Bytes = last4Bytes.substring(0,3) + 'N';
    bodyEncoded = bodyEncoded.substring(0,bodyEncoded.length()-4) + last4Bytes;

    footer = '\n' + footer;
    String footerEncoded = EncodingUtil.base64Encode(Blob.valueOf(footer));
    bodyBlob = EncodingUtil.base64Decode(headerEncoded+bodyEncoded+footerEncoded);              
  } else {
    system.debug('inside third');
    footer = '\r\n' + footer;
    String footerEncoded = EncodingUtil.base64Encode(Blob.valueOf(footer));
    bodyBlob = EncodingUtil.base64Decode(headerEncoded+bodyEncoded+footerEncoded);  
  }
  system.debug('bodyBlob'+bodyBlob);
  HttpRequest req = new HttpRequest();
  String authorizationHeader = 'Bearer ' +acceessToken;
  req.setHeader('Authorization', authorizationHeader);
  req.setHeader('Content-Type','multipart/form-data; boundary='+boundary);
  req.setMethod('POST');
  req.setEndpoint('https://api.in1.echosign.com/api/rest/v6/transientDocuments');
  req.setBodyAsBlob(bodyBlob);
  req.setTimeout(120000);

  Http http = new Http();


    try{
        HTTPResponse res = http.send(req);

И следующий ответ от знака Adobe:

Metadata
x-request-id : ecca058a-02b7-4dfe-8e9a-a64869798407
content-type : application/json
status : 400

Body
{
     "code": "NO_FILE_CONTENT",
     "message": "Must provide file body"
}

Пожалуйста, кто-нибудь, если у меня есть такая же проблема, помогите мне с этим, что я здесь упускаю.

...