Marketo休息Api创造领先优势

时间:2015-04-16 00:00:17

标签: api marketo

我对此创建/更新潜在客户API http://developers.marketo.com/documentation/rest/createupdate-leads/有疑问。 没有C#或JAVA的示例代码。只有红宝石可用。所以我必须自己尝试一下。但我总是从响应中得到null返回。 这是我的代码:

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 = "123@123.com", lastName = "Lee", firstName = "testtesttest", postCode = "00000" };
        CreateLeadInput input2 = new CreateLeadInput { email = "321@gagaga.com", 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.

谢谢。 -C。

2 个答案:

答案 0 :(得分:1)

调试此方法的最佳方法是捕获应用提交的确切网址,参数和JSON,并尝试通过Postman(Chrome插件)或SOAP UI等工具手动提交。然后,您会看到确切的错误消息,您可以在此处查看:http://developers.marketo.com/documentation/rest/error-codes/。基于此,您可以更新您的代码。我对Java知之甚少,但这就是我使用Python代码的方法。

答案 1 :(得分:0)

您的示例代码非常有助于实现我自己的实现。谢谢!

在玩了一会儿之后,我意识到JavaScriptSerializer步骤是不必要的,因为PostAsJsonAsync会自动序列化传递给它的任何对象。双序列化可以防止Marketo的API处理输入。

另外,我同意Jep,Postman非常有帮助。但是在这个错误的情况下,Postman工作正常(使用inputJsonString的内容),但我的C#代码仍然无法正常工作。所以我暂时修改了代码以返回dynamic对象而不是CreateLeadResponseResult。在调试模式下,这允许我查看被丢弃的字段,因为它们不适合CreateLeadResponseResult类型,这使我得到了上述解决方案。