HTTP POST For Authorize.net
Hello,
We are running cache version 2012.1.4
Is it possible to make an HTTP Post passing in JSON string?
Example:
I want to send this request to Authorize.net. How can I do this in cache object script?
URL: https://apitest.authorize.net/xml/v1/request.api
Body:
{
"createTransactionRequest": {
"merchantAuthentication": {
"name": "gfufet9QVgT5P",
"transactionKey": "8pg6FJjxuekeY62m"
},
"refId": "123456",
"transactionRequest": {
"transactionType": "authCaptureTransaction",
"amount": "5",
"payment": {
"creditCard": {
"cardNumber": "5424000000000015",
"expirationDate": "2020-12",
"cardCode": "999"
}
}
}
}
}
NOTE - I have removed the actual name and transactionKey from the body.
If you get this to work you should get back the message:
User authentication failed due to invalid authentication values.
Comments
Are you unable to POST anything, or are you looking for an easy way to construct JSON in 2012.1.4 ?
The class to POST something is %Net.HttpRequest, you need to send the form as a stream.
In recent (2016.2 upward) versions, you can create a dynamic object and convert it to a JSON string, but 2012.1.4 is lacking this JSON support,.
But you should still be able to send a string in the body part formed (manually) as correct JSON :
Set httprequest.Server="apitest.authorize.net"
Set httprequest.Https=1
Set httprequest.SSLConfiguration = "TEST" ;make sure this SSL is created via mgmt security portal
Do httprequest.EntityBody.Write("{""createTransactionRequest"":{""merchantAuthentication"":{""name"":""gfufet9QVgT5P"",""transactionKey"":""8pg6FJjxuekeY62m""},""refId"":""123456"",""transactionRequest"":{""transactionType"":""authCaptureTransaction"",""amount"":""5"",""payment"":{""creditCard"":{""cardNumber"":""5424000000000015"",""expirationDate"":""2020-12"",""cardCode"":""999""}}}}})")
Do httprequest.Post("/xml/v1/request.api")
Do httprequest.HttpResponse.OutputToDevice()
Thanks!
I did try this but it's not working because Authorize.net requires use of TLS 1.2 and Cache 2012.1.4 doesn't allow this configuration when creating the SSL configuration in the Management portal. I found another way using C# and creating a web service to call from Cache.
Hopefully we will be upgrading soon, I could use the built JSON support.
2012.1.4 has JSON support via %ZEN.proxyObject
set obj = ##class(%ZEN.proxyObject).%New() set obj.createTransactionRequest= ##class(%ZEN.proxyObject).%New() set obj.createTransactionRequest.merchantAuthentication = ##class(%ZEN.proxyObject).%New() set obj.createTransactionRequest.merchantAuthentication.name = "gfufet9QVgT5P" do obj.%ToJSON()
Also you can use %ZEN.Auxiliary.jsonProvider to convert object into JSON.