I have been working on this on and off for months and cannot get it to work. I have code to display the hosted payment page and it is working fine on my development machine. As soon as I put it on a server (my dev server or my production server) it does not work. When I run it from my machine All the fields and dropdowns appear properly and everything is aligned properly. But if I run from a server (either my development server or production server) there are no inputs displayed only things like: Description {{orderDescription}}
InvoiceNumber {{orderInvoiceNumber}}
Some of these are in red.
I have created a small sample app that reproduces the same results and here is the code for it:
WebForm1.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>
</body>
</html>WebForm1.aspx.vb:
Imports AuthorizeNet.Api.Contracts.V1
imports AuthorizeNet.Api.Controllers.Bases
imports AuthorizeNet.Api.Controllers
Public Class WebForm1
Inherits System.Web.UI.Page
Private Function PostToURL(strToken As String) As String
Response.Clear()
Dim posturl As String = "https://test.authorize.net/payment/payment"
Dim sb As New StringBuilder
sb.Append("<html>")
sb.AppendFormat("<body onload='document.forms[""form""].submit()'>")
sb.AppendFormat("<form target='payframe' name='form' action='{0}' method='post'>", posturl)
sb.AppendFormat("<input type='hidden' name'token' value='{0}'>", strToken)
sb.Append("</form>")
sb.Append("<iframe style='height: 700px;width:100%;border-style: none;'name='payframe' id='payframe' id='payframe'></iframe>")
sb.Append("</body>")
sb.Append("</html>")
Response.Write(sb.ToString())
Response.End()
Return strToken
End Function
Private Function GetHostedPaymentPageResponse(ApiLoginID As [String], ApiTransactionKey As [String], amount As Decimal) As ANetApiResponse
Dim currentURL As String = HttpContext.Current.Request.Url.AbsoluteUri
Dim postURL As String
ApiOperationBase(Of ANetApiRequest, ANetApiResponse).RunEnvironment = AuthorizeNet.Environment.SANDBOX
postURL = "https://test.authorize.net/payment/payment"
Dim merchantAuthenticationType As New merchantAuthenticationType()
merchantAuthenticationType.name = ApiLoginID
merchantAuthenticationType.ItemElementName = ItemChoiceType.transactionKey
merchantAuthenticationType.Item = ApiTransactionKey
ApiOperationBase(Of ANetApiRequest, ANetApiResponse).MerchantAuthentication = merchantAuthenticationType
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
Dim settings As settingType() = New settingType(1) {}
settings(0) = New settingType()
settings(0).settingName = settingNameEnum.hostedPaymentButtonOptions.ToString()
settings(0).settingValue = "{""text"": ""Pay Now""}"
settings(1) = New settingType()
settings(1).settingName = settingNameEnum.hostedPaymentOrderOptions.ToString()
settings(1).settingValue = "{""show"": true, ""merchantName"":""My Company""}"
Dim MylineItems(0) As AuthorizeNet.Api.Contracts.V1.lineItemType
Dim thisLineItem As New AuthorizeNet.Api.Contracts.V1.lineItemType
thisLineItem.itemId = "a100"
thisLineItem.quantity = 1
thisLineItem.name = "test"
thisLineItem.description = "Software Training"
thisLineItem.unitPrice = 3500.0
MylineItems(0) = thisLineItem
Dim thisCustomerType As New AuthorizeNet.Api.Contracts.V1.customerAddressType
thisCustomerType.address = "123 main"
thisCustomerType.city = "Santa Barbara"
thisCustomerType.state = "CA"
thisCustomerType.country = "USA"
thisCustomerType.zip = "93111"
Dim myorder As New AuthorizeNet.Api.Contracts.V1.orderType
myorder.description = "Software Training"
' authorize capture only
Dim transactionRequest = New transactionRequestType() With { _
.transactionType = transactionTypeEnum.authCaptureTransaction.ToString(), _
.amount = amount, _
.lineItems = MylineItems.ToArray, _
.order = myorder, _
.billTo = thisCustomerType _
}
Dim request = New getHostedPaymentPageRequest()
request.transactionRequest = transactionRequest
request.hostedPaymentSettings = settings
' instantiate the contoller that will call the service
Dim controller = New getHostedPaymentPageController(request)
controller.Execute()
' get the response from the service (errors contained if any)
Dim response1 = controller.GetApiResponse()
Response.Clear()
Dim sb As New StringBuilder
sb.Append("<html>")
sb.AppendFormat("<body onload='document.forms[""form""].submit()'>")
sb.AppendFormat("<form target='payframe' name='form' action='{0}' method='post'>", postURL)
sb.AppendFormat("<input type='hidden' name='token' value='{0}'>", response1.token)
sb.Append("</form>")
sb.Append("<iframe style='height: 700px;width:100%;border-style: none;'name='payframe' id='payframe' id='payframe'></iframe>")
sb.Append("</body>")
sb.Append("</html>")
Response.Write(sb.ToString())
Response.End()
Return response1
End Function
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ThisApiResponse As ANetApiResponse
Dim currentURL As String = HttpContext.Current.Request.Url.AbsoluteUri
ThisApiResponse = GetHostedPaymentPageResponse("4YHwQEj988", "3Z36s3YrJce76L2v",3500)
End Sub
End Class
So pretty simple code. Not sure what is making it fail when put on a server. I have tried it on both Windows Server 2008 and 2016. Anything I should look at regarding IIS?
Thanks for any help you can provide.
05-03-2018 01:38 PM