Chao
Chao

Reputation: 21

Marketo rest Api create lead

I have a question about this create/Update leads API, http://developers.marketo.com/documentation/rest/createupdate-leads/. There is no sample code for C# or JAVA. Only ruby available. So I have to try it by myself. But I always get null return from the response. Here is my code:

private async Task<CreateLeadResponseResult> CreateLead(string token)
    { 

        string url = String.Format(marketoInstanceAddress+"/rest/v1/leads.json?access_token={0}", token);
        var fullUri = new Uri(url, UriKind.Absolute);
        CreateLeadResponseResult createLeadResponse = new CreateLeadResponseResult();
        CreateLeadInput input = new CreateLeadInput { email = "[email protected]", lastName = "Lee", firstName = "testtesttest", postCode = "00000" };
        CreateLeadInput input2 = new CreateLeadInput { email = "[email protected]", lastName = "Lio", firstName = "ttttttt", postCode = "00000" };
        List<CreateLeadInput> inputList = new List<CreateLeadInput>();
        inputList.Add(input);
        inputList.Add(input2);

        CreateLeadRequest createLeadRequest = new CreateLeadRequest() { input = inputList };
        JavaScriptSerializer createJsonString = new JavaScriptSerializer();
        string inputJsonString = createJsonString.Serialize(createLeadRequest);

       using (var client = new HttpClient())
        {

            HttpResponseMessage response = await client.PostAsJsonAsync(fullUri.OriginalString, inputJsonString).ConfigureAwait(false);
            // I can see the JSON string is in the message body in debugging mode.

            if (response.IsSuccessStatusCode)
            {
                createLeadResponse = await response.Content.ReadAsAsync<CreateLeadResponseResult>();
            }
            else
            {
                if (response.StatusCode == HttpStatusCode.Forbidden)
                    throw new AuthenticationException("Invalid username/password combination.");
                else
                    throw new ApplicationException("Not able to get token");
            }
        }

       return createLeadResponse;}
       //get null here.

Thank you. -C.

Upvotes: 2

Views: 1481

Answers (2)

WimpyProgrammer
WimpyProgrammer

Reputation: 618

Your example code was really helpful in getting my own implementation off the ground. Thanks!

After playing with it for a bit, I realized that the JavaScriptSerializer step is unnecessary since PostAsJsonAsync automatically serializes whatever object you pass to it. The double serialization prevents Marketo's API from processing the input.

Also, I agree with Jep that Postman is super helpful. But in the case of this error, Postman was working fine (using the contents of inputJsonString) but my C# code still didn't work properly. So I temporarily modified the code to return a dynamic object instead of a CreateLeadResponseResult. In debugging mode this allowed me to see fields that were discarded because they didn't fit the CreateLeadResponseResult type, which led me to the solution above.

Upvotes: 0

Jep
Jep

Reputation: 384

The best way to debug this is to capture the exact URL, parameters and JSON that are submitted by your app and try submitting those manually via a tool like Postman (Chrome plug-in) or SOAP UI. Then you see the exact error message, which you can look up here: http://developers.marketo.com/documentation/rest/error-codes/. Based on that you can update your code. I don't know much about Java, but this is how I got my Python code to work.

Upvotes: 1

Related Questions