Search code examples
asp.netpayment-gatewayfirstdata

first data global gateway API Integration gives error


I have compiled a simple ASP.NET project to test first data global gateway API Integration.

Someone tell me what to do because I have tried everything.

It throws the ERROR if I use ASP.NET Development server:
<r_error> Unable to load certificate   ERRs: wsa=33558530 err=33558530 ssl=537317504 sys=33558530.  INFO: ACE_SSL (5260|6284) error code: 33558530 - error:02001002:lib(2):func(1):reason(2)
</r_error>

ERROR if I use Virtual Directory: This is generated when

//Call LPTxn
string resp = LPTxn.send(keyfile, host, port, outXml);

is done

ERROR: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

Testing On:

Windows 7 ultimate 64 bit

Project at the root have:

default.aspx 
status.aspx
111222333.pem

Bin:

LinkPointTransaction.dll
lpssl.dll
libeay32.lib
libssl32.dll
ssleay32.lib

Web.Config just showing this to make sure:

<client>
      <!-- Change this to your store number -->
      <add key="Configfile" value="xxxxx"/>
      <!-- Change this to the name and location of your certificate file -->
      <add key="Keyfile" value="111222333.pem"/>
      <add key="Host" value="xxx.xxx.net"/>
      <add key="Port" value="1129"/>
</client>

Solution

  • Sorry for the delay in getting back to you. Below is the code I used. In particular take a look at how BuildOrderService sets up the certificate.

    Response

    Public Class CLinkTransResponse
        Public ApprovalCode As String
        Public ErrorMessage As String
        Public OrderId As String
        Public TransactionID As String
        Public TransactionResult As String
    
    
        Public Sub New()
            ApprovalCode = ""
            ErrorMessage = ""
            OrderId = ""
            TransactionID = ""
            TransactionResult = ""
        End Sub
    End Class
    

    Settings

    --XML File--

    <?xml version="1.0" encoding="utf-8"?>
    <LinkPointSettings>
      <OrderServiceUrl>https://ws.merchanttest.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl</OrderServiceUrl>
      <P12File>WS{texthere}._.1.p12</P12File>
      <!-- From .auth.txt-->
      <username>WS{texthere}._.1</username>
      <password>{texthere}</password>
      <!-- From .p12.pw.txt-->
      <P12Pw>{texthere}</P12Pw>  
    </LinkPointSettings>
    

    --Code--

    Imports System.IO
    Imports System.Web
    
    Friend Class CLinkPointSettings
        Private sOrderServiceUrl As String
        Private sP12File As String
        Private sP12Pw As String
        Private susername As String
        Private spassword As String
    
        Public Sub New()
            ' Read XML Link Point Settings File
            Dim sXMLFile As String
            sXMLFile = HttpContext.Current.Server.MapPath("~/bin/xLinkPointSettings.xml")
    
            If Not File.Exists(sXMLFile) Then
                Return
            End If
    
            ' Read XML File
            Dim oXmlDoc As New System.Xml.XmlDocument
            oXmlDoc.Load(sXMLFile)
    
            sOrderServiceUrl = oXmlDoc.GetElementsByTagName("OrderServiceUrl")(0).InnerText
            sP12File = oXmlDoc.GetElementsByTagName("P12File")(0).InnerText
            sP12Pw = oXmlDoc.GetElementsByTagName("P12Pw")(0).InnerText
            susername = oXmlDoc.GetElementsByTagName("username")(0).InnerText
            spassword = oXmlDoc.GetElementsByTagName("password")(0).InnerText
        End Sub
    
        Public ReadOnly Property OrderServiceUrl() As String
            Get
                Return sOrderServiceUrl
            End Get
        End Property
    
        Public ReadOnly Property P12File() As String
            Get
                Return sP12File
            End Get
        End Property
    
        Public ReadOnly Property P12Pw() As String
            Get
                Return sP12Pw
            End Get
        End Property
    
        Public ReadOnly Property Username() As String
            Get
                Return susername
            End Get
        End Property
    
        Public ReadOnly Property Password As String
            Get
                Return spassword
            End Get
        End Property
    End Class
    

    Transaction

    Imports FirstDataGlobalGateway.WebReference
    Imports System.Security.Cryptography.X509Certificates
    Imports System.Net
    Imports System.IO
    Imports System.Web
    
    Public Class CLinkTransaction
        Public Sub New()
            ServicePointManager.Expect100Continue = False
        End Sub
    
        ''' <summary>
        ''' charge credit card
        ''' </summary>
        ''' <param name="cardNumber">Credit Card Number</param>
        ''' <param name="expMonth">expiry month</param>
        ''' <param name="expYear">expiry year</param>
        ''' <param name="chargeTotal">charge total(including tax,vat etc)</param>
        ''' <param name="billingInfo">Client Billing Information</param>
        ''' <returns>Returns True/False Transaction result</returns>
        ''' <remarks></remarks>    
        Public Function ChargeCreditCard(ByVal cardNumber As String, ByVal expMonth As String, _
                                         ByVal expYear As String, _
                                         ByVal ccv As String, _
                                         ByVal chargeTotal As Decimal, _
                                         ByVal billingInfo As Billing, ByRef transResponse As CLinkTransResponse) As Boolean
    
            Dim oFDGGWSApiOrderService As FDGGWSApiOrderService = BuildOrderService()
    
            ' Create sale transaction request
            Dim oFDGGWSApiOrderRequest As New FDGGWSApiOrderRequest()
    
            Dim oTransaction As New Transaction()
    
            Dim oCreditCardTxType As New CreditCardTxType()
    
            oCreditCardTxType.Type = CreditCardTxTypeType.sale
    
            Dim oCreditCardData As New CreditCardData()
    
            oCreditCardData.ItemsElementName = New ItemsChoiceType() {ItemsChoiceType.CardNumber, ItemsChoiceType.ExpMonth, ItemsChoiceType.ExpYear}
    
            oCreditCardData.Items = New String() {cardNumber, expMonth, expYear}
    
            oTransaction.Items = New Object() {oCreditCardTxType, oCreditCardData}
    
            Dim oPayment As New Payment() With {.ChargeTotal = chargeTotal}
    
            '' Set Billing Information
            'Dim oBilling As New Billing()
    
            'oBilling.Address1 = billingInfo.Address1
            'oBilling.Address2 = billingInfo.Address2
            'oBilling.City = billingInfo.City
            'oBilling.Company = billingInfo.Company
            'oBilling.Country = billingInfo.Country
            'oBilling.CustomerID = billingInfo.CustomerID
            'oBilling.Email = billingInfo.Email
            'oBilling.Fax = billingInfo.Fax
            'oBilling.Name = billingInfo.Name
            'oBilling.Phone = billingInfo.Phone
            'oBilling.State = billingInfo.State
            'oBilling.Zip = billingInfo.Zip
    
            oTransaction.Billing = billingInfo
    
            oFDGGWSApiOrderRequest.Item = oTransaction
    
            Try
                ' Get Response
                Dim oFDGGWSApiOrderResponse As FDGGWSApiOrderResponse
    
                oFDGGWSApiOrderResponse = Nothing
    
                oFDGGWSApiOrderResponse = oFDGGWSApiOrderService.FDGGWSApiOrder(oFDGGWSApiOrderRequest)
    
                transResponse.ApprovalCode = oFDGGWSApiOrderResponse.ApprovalCode
                transResponse.TransactionResult = oFDGGWSApiOrderResponse.TransactionResult
                transResponse.ErrorMessage = oFDGGWSApiOrderResponse.ErrorMessage
                transResponse.OrderId = oFDGGWSApiOrderResponse.OrderId
                transResponse.TransactionID = oFDGGWSApiOrderResponse.TransactionID
    
                If (transResponse.TransactionResult.ToLower() <> "approved") Then
                    Return False
                End If
    
                Return True
    
            Catch ex As System.Web.Services.Protocols.SoapException
                transResponse.ErrorMessage = ex.Message
                Return False
            End Try
        End Function
    
        ''' <summary>
        ''' Perfrom Refund
        ''' </summary>
        ''' <param name="orderID">Order ID</param>
        ''' <param name="chargeTotal">Charge Total (Including Taxes)</param>
        ''' <param name="transResponse">Transaction Response</param>
        ''' <returns>Returns True/False</returns>
        ''' <remarks></remarks>
        Public Function PerformRefund(ByVal orderID As String, ByVal chargeTotal As Decimal, ByRef transResponse As CLinkTransResponse) As Boolean
            Dim oFDGGWSApiOrderService As FDGGWSApiOrderService = BuildOrderService()
    
            ' Create sale transaction request
            Dim oFDGGWSApiOrderRequest As New FDGGWSApiOrderRequest()
    
            Dim oTransaction As New Transaction()
    
            Dim oCreditCardTxType As New CreditCardTxType()
    
            oCreditCardTxType.Type = CreditCardTxTypeType.return
    
            oTransaction.Items = New Object() {oCreditCardTxType}
    
            Dim oPayment As New Payment()
    
            oPayment.ChargeTotal = chargeTotal
    
            oTransaction.Payment = oPayment
    
            Dim oTransactionDetails As New TransactionDetails()
    
            oTransactionDetails.OrderId = orderID
    
            oTransaction.TransactionDetails = oTransactionDetails
    
            oFDGGWSApiOrderRequest.Item = oTransaction
    
            Try
                ' Get Response
                Dim oFDGGWSApiOrderResponse As FDGGWSApiOrderResponse
    
                oFDGGWSApiOrderResponse = Nothing
    
                oFDGGWSApiOrderResponse = oFDGGWSApiOrderService.FDGGWSApiOrder(oFDGGWSApiOrderRequest)
    
                transResponse.ApprovalCode = oFDGGWSApiOrderResponse.ApprovalCode
                transResponse.TransactionResult = oFDGGWSApiOrderResponse.TransactionResult
                transResponse.ErrorMessage = oFDGGWSApiOrderResponse.ErrorMessage
                transResponse.OrderId = oFDGGWSApiOrderResponse.OrderId
                transResponse.TransactionID = oFDGGWSApiOrderResponse.TransactionID
    
                If (transResponse.TransactionResult.ToLower() <> "approved") Then
                    Return False
                End If
    
                Return True
    
            Catch ex As System.Web.Services.Protocols.SoapException
                transResponse.ErrorMessage = ex.Message
                Return False
            End Try
        End Function
        ''' <summary>
        ''' Check Sale Transaction
        ''' </summary>
        ''' <param name="teleCheckData">TeleCheckData</param>
        ''' <param name="chargeTotal">Charge Total</param>
        ''' <param name="transResponse">Transaction Response</param>
        ''' <returns>Returns True/False</returns>
        ''' <remarks></remarks>
        Public Function CheckSaleTransaction(ByVal teleCheckData As TeleCheckData, ByVal chargeTotal As Decimal, ByRef transResponse As CLinkTransResponse) As Boolean
            Dim oFDGGWSApiOrderService As FDGGWSApiOrderService = BuildOrderService()
    
            ' Create sale transaction request
            Dim oFDGGWSApiOrderRequest As New FDGGWSApiOrderRequest()
    
            Dim oTransaction As New Transaction()
    
            Dim oTeleCheckTxType As New TeleCheckTxType()
    
            oTeleCheckTxType.Type = CreditCardTxTypeType.sale
    
            oTransaction.Items = New Object() {oTeleCheckTxType, teleCheckData}
    
            Dim oPayment As New Payment()
    
            oPayment.ChargeTotal = chargeTotal
    
            oTransaction.Payment = oPayment
    
            oFDGGWSApiOrderRequest.Item = oTransaction
    
            Try
                ' Get Response
                Dim oFDGGWSApiOrderResponse As FDGGWSApiOrderResponse
    
                oFDGGWSApiOrderResponse = Nothing
    
                oFDGGWSApiOrderResponse = oFDGGWSApiOrderService.FDGGWSApiOrder(oFDGGWSApiOrderRequest)
    
                transResponse.ApprovalCode = oFDGGWSApiOrderResponse.ApprovalCode
                transResponse.TransactionResult = oFDGGWSApiOrderResponse.TransactionResult
                transResponse.ErrorMessage = oFDGGWSApiOrderResponse.ErrorMessage
                transResponse.OrderId = oFDGGWSApiOrderResponse.OrderId
                transResponse.TransactionID = oFDGGWSApiOrderResponse.TransactionID
    
                If (transResponse.TransactionResult.ToLower() <> "approved") Then
                    Return False
                End If
    
                Return True
    
            Catch ex As System.Web.Services.Protocols.SoapException
                transResponse.ErrorMessage = ex.Message
                Return False
            End Try
        End Function
    
        ''' <summary>
        ''' Void Transaction
        ''' </summary>
        ''' <param name="orderID">Order ID</param>
        ''' <param name="chargeTotal">Charge Total (Including Taxes)</param>
        ''' <param name="transResponse">Transaction Response</param>
        ''' <returns>Returns True/False</returns>
        ''' <remarks></remarks>
        Public Function VoidTransaction(ByVal orderID As String, ByVal chargeTotal As Decimal, ByRef transResponse As CLinkTransResponse) As Boolean
            Dim oFDGGWSApiOrderService As FDGGWSApiOrderService = BuildOrderService()
    
            ' Create sale transaction request
            Dim oFDGGWSApiOrderRequest As New FDGGWSApiOrderRequest()
    
            Dim oTransaction As New Transaction()
    
            Dim oTeleCheckTxType As New TeleCheckTxType()
    
            oTeleCheckTxType.Type = CreditCardTxTypeType.void
    
            oTransaction.Items = New Object() {oTeleCheckTxType}
    
            Dim oPayment As New Payment()
    
            oPayment.ChargeTotal = chargeTotal
    
            oTransaction.Payment = oPayment
    
            Dim oTransactionDetails As New TransactionDetails()
    
            oTransactionDetails.OrderId = orderID
    
            oTransaction.TransactionDetails = oTransactionDetails
    
            oFDGGWSApiOrderRequest.Item = oTransaction
    
            Try
                ' Get Response
                Dim oFDGGWSApiOrderResponse As FDGGWSApiOrderResponse
    
                oFDGGWSApiOrderResponse = Nothing
    
                oFDGGWSApiOrderResponse = oFDGGWSApiOrderService.FDGGWSApiOrder(oFDGGWSApiOrderRequest)
    
                transResponse.ApprovalCode = oFDGGWSApiOrderResponse.ApprovalCode
                transResponse.TransactionResult = oFDGGWSApiOrderResponse.TransactionResult
                transResponse.ErrorMessage = oFDGGWSApiOrderResponse.ErrorMessage
                transResponse.OrderId = oFDGGWSApiOrderResponse.OrderId
                transResponse.TransactionID = oFDGGWSApiOrderResponse.TransactionID
    
                If (transResponse.TransactionResult.ToLower() <> "approved") Then
                    Return False
                End If
    
                Return True
    
            Catch ex As System.Web.Services.Protocols.SoapException
                transResponse.ErrorMessage = ex.Message
                Return False
            End Try
        End Function
    
        Private Function BuildOrderService() As FDGGWSApiOrderService
    
            Dim olinkpoint As New CLinkPointSettings()
    
            ServicePointManager.Expect100Continue = False
    
            Dim oFDGGWSApiOrderService As New FDGGWSApiOrderService()
    
            ' Set WSDL URL
            oFDGGWSApiOrderService.Url = olinkpoint.OrderServiceUrl
    
            ' Configure Client Certificate
            oFDGGWSApiOrderService.ClientCertificates.Add(
                    New X509Certificate(HttpContext.Current.Server.MapPath("~/bin/" + olinkpoint.P12File), olinkpoint.P12Pw))
    
    
            ' Initialize Netwokr Credentials
            Dim oNetworkCredentials As New NetworkCredential(olinkpoint.Username, olinkpoint.Password)
    
            ' Assign network creditials
            oFDGGWSApiOrderService.Credentials = oNetworkCredentials
    
            Return oFDGGWSApiOrderService
        End Function
    End Class