I am using ASP.NET and would like to use my own form, but still send the data into a Marketo form to create a new lead. I have got the field names and values that I would like to submit formatted in JSON as shown in the Marketo documentation for create/update a lead - http://developers.marketo.com/documentation/rest/createupdate-leads/
{
"action":"createOnly",
"input":[
{
"email":"kjashaedd-1@klooblept.com",
"firstName":"Kataldar-1",
"postalCode":"04828"
}
]
}
The form will only ever create one lead per form, I have created the form in Marketo and have the form id and everything that I think I need, I just don't know what I need to do in order to submit the values into the Marketo form.
Ideally I would like to use the SOAP or REST api to achieve my goal from the server side rather than using javascript.
I'm not against the server-side form post method and if anyone could help with the server side code needed with regards to that it would also be appreiciated
With the help of Kenny Elkington from the Marketo dev team I was able to solve the problem!
The first thing that I found out was that to use the REST method I first needed to follow the instructions here -
http://developers.marketo.com/blog/quick-start-guide-for-marketo-rest-api/
In order to be able to generate an authentication token.
Then I could use -
private String getToken()
{
String url = host + "/identity/oauth/token?grant_type=client_credentials&client_id=" + clientId + "&client_secret=" + clientSecret;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/json";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader reader = new StreamReader(resStream);
String json = reader.ReadToEnd();
Dictionary<String, String> dict = JsonConvert.DeserializeObject<Dictionary<String, String>>(json);
return dict["access_token"];
}
Then once I had the access token I was able to authenticate myself which allowed me to create a lead as follows -
private String host = "" //host of your marketo instance, https://AAA-BBB-CCC.mktorest.com
String url = host + "/rest/v1/leads.json?access_token=" + getToken();
String requestBody = "----JSON INPUT----";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
request.Accept = "application/json";
StreamWriter wr = new StreamWriter(request.GetRequestStream());
wr.Write(requestBody);
wr.Flush();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader reader = new StreamReader(resStream);
String responseString = reader.ReadToEnd();
I could then use the response string in order to determine if the lead was successfully create or I could output the error message to the user.