2015-07-29 2 views
0

Мне нужно интегрировать salesforce & с помощью этого API и протестировать API here. Поскольку мне нужно сделать запрос от salesforce, я мог бы использовать только apex для его реализации. Все, что мне нужно, - это отправить приемлемый запрос на отправку multipart/form-data Post (включая JSON и CSV-файл) для компенсации.Кодирование типа Salesforce HttpPost? (Интеграция salesforce & expensify)

Я искал много, как http://blog.enree.co/2013/01/salesforce-apex-post-mutipartform-data.html и https://developer.salesforce.com/forums/?id=906F000000090JcIAI и мой код выглядит так:

JSONGenerator gen=JSON.createGenerator(true); 
     gen.writeStartObject(); 
      gen.writeStringField('type', 'update'); 
      gen.writeFieldName('credentials'); 
       gen.writeStartObject(); 
       gen.writeStringField('partnerUserID', 'USERID'); 
       gen.writeStringField('partnerUserSecret', 'TOKEN'); 
       gen.writeEndObject(); 
      gen.writeFieldName('inputSettings'); 
       gen.writeStartObject(); 
       gen.writeStringField('type', 'employees'); 
       gen.writeStringField('policyID', 'policyID'); 
       gen.writeStringField('fileType', 'csv'); 
       gen.writeEndObject(); 
     gen.writeEndObject();     
     String requestJobDescription=gen.getAsString(); 
     Blob csv=Blob.valueOf('EmployeeEmail,ManagerEmail,Admin\n'+'[email protected],[email protected],FALSE'); 

     String boundary = '----------------------------wqo12loz741e90d31eff'; 
     String header2 = '--'+boundary+'\n'+ 'Content-Disposition: form-data; name="data"; filename="1.csv"'+'\nContent-Type: application/octet-stream\n\n'; 
     String header1andJSON = '--'+boundary+'\nContent-Disposition: form-data; name="requestJobDescription" \n\r\n\r'+requestJobDescription+'\n'; 

     String footer = '--'+boundary+'--';    
     String body=header1andJSON+header2+csv.toString()+footer; 
     HttpRequest req = new HttpRequest(); 
     req.setHeader('Content-Type','multipart/form-data; boundary='+boundary); 
     req.setMethod('POST'); 
     req.setEndpoint('https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations'); 
     req.setBody(body); 
     req.setTimeout(120000); 

     Http http = new Http(); 
     HTTPResponse res = http.send(req); 

Проблема После отправки запроса, я получаю ответ, как

{"responseMessage":"Error in multipart initialization","responseCode":500} 

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

Я был очень смущен, может ли кто-нибудь помочь? Если вам нужна дополнительная информация, пожалуйста, скажите мне!

ответ

0

Наконец-то я решил это сам, вдохновленный некоторым демо-кодом javascript. Проблема моего вышеописанного кода заключается в том, что он не полностью соответствует стандарту Http, и он был вызван «\ n \ r» вещами в HTTP-запросе. Код работает так:

//Create a Json and convert it to String 
    JSONGenerator gen=JSON.createGenerator(true); 
    gen.writeStartObject(); 
     gen.writeStringField('type', 'update'); 
     gen.writeFieldName('credentials'); 
      gen.writeStartObject(); 
      gen.writeStringField('partnerUserID', 'userID');//Should be changed 
      gen.writeStringField('partnerUserSecret', 'token');//Should be changed 
      gen.writeEndObject(); 
     gen.writeFieldName('inputSettings'); 
      gen.writeStartObject(); 
      gen.writeStringField('type', 'employees'); 
      gen.writeStringField('policyID', 'ID');//the policyID corresponding to the policy which the employees will be added to; 
      gen.writeStringField('fileType', 'csv'); 
      gen.writeEndObject(); 
    gen.writeEndObject(); 
    String requestJobDescription=gen.getAsString(); 

    String boundary = '-----------------------------BoundaryjQjTqoyRD07HQCVD'; 
    String header2 = '--'+boundary+'\n'+ 'Content-Disposition: form-data; name="data"; filename="1.csv"'+'\r\nContent-Type: application/octet-stream\r\n\r\n'; 
    String header1 = '--'+boundary+'\n Content-Disposition: form-data; name="requestJobDescription" \r\n\r\n'+requestJobDescription+'\r\n'; 

    String footer = '--'+boundary+'--';    
    String body=header1+header2+CSVString+'\r\n'+footer;//the CSVString is like 'EmployeeEmail,ManagerEmail,Admin\n'+'[email protected],[email protected],FALSE' 

    HttpRequest req = new HttpRequest(); 
    req.setHeader('Content-Type','multipart/form-data; boundary='+boundary); 
    req.setMethod('POST'); 
    req.setEndpoint('https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations'); 
    req.setBody(body); 
    req.setTimeout(120000); 

    Http http = new Http(); 
    HTTPResponse res = http.send(req); 
Смежные вопросы