Receiving a Webhook JSON POST in Classic ASP
Question:
I need to setup a page in Classic ASP to serve as a webhook endpoint listener in Classic ASP
The form product we are using (Paperform) posts the data to our endpoint as a JSON post payload.
Submission payload
Webhooks POST a JSON payload on submission to the webhook URL. The JSON payload looks like the following:
{
"data": [
{
"title": "question 1", //Title of question as defined
"description": "This is the second question",
"type": "address", //Question type
"key": "xxxxx", //Question pre-fill key (unique to form).
"value": "343 Tester Road, Snohomish, Washington, 98290, United States" //Submitted value for question
"custom_key": "address_1" //Custom pre-fill key (if set).
},
{
"title": "question 2",
"description": "This is the second question",
"type": "text",
"key": "tgp8",
"value": "Test 123",
"custom_key": ""
}
//... each question has its own object.
],
"submission_id": "XXXXXXXXXXXXXXXXXXX", //Unique ID for submission.
"created_at": "2017-06-09 09:51:23", //Submission date
"ip_address": "192.168.10.1", //IP Address of submission
"charge": null //if a payment is made, payment information is given here.
}
Answer:
A typical POST that sends JSON is a POST where the request body contains the JSON document (as opposed to a multipart/form-data POST where the body contains multiple parts, or a application/x-www-form-urlencoded POST where the body is composed of keys and values encoded in key-value tuples separated by ‘&’, with a ‘=’ between the key and the value.
Therefore, you want to get the raw body of the POST, and you do it like this:
If Request.TotalBytes > 0 Then
Dim lngBytesCount
lngBytesCount = Request.TotalBytes
jsonStr = BytesToStr(Request.BinaryRead(lngBytesCount))
End If
However, JSON uses the utf-8 byte representation. I would guess that BytesToStr is expecting the bytes to be in ANSI representation and would mangle non-us-ascii chars. It would be safer to use Chilkat to be explicit about utf-8 encoding:
set bd = Server.CreateObject("Chilkat_9_5_0.BinData")
success = bd.AppendBinary(Request.BinaryRead(lngBytesCount))
set sbJson = Server.CreateObject("Chilkat_9_5_0.StringBuilder")
success = sbJson.AppendBd(bd,"utf-8",0,0)
' now you have the JSON in a Chilkat StringBuilder object.
' you can access it as a string in ASP
strJson = sbJson.GetAsString()
' or you can load it directly into a JsonObject
set json = Server.CreateObject("Chilkat_9_5_0.JsonObject")
success = json.LoadSb(sbJson)
admin
0
Tags :