Rick Strahl's Weblog  

Wind, waves, code and everything in between...
.NET • C# • Markdown • WPF • All Things Web
Contact   •   Articles   •   Products   •   Support   •   Advertise
Sponsored by:
West Wind WebSurge - Rest Client and Http Load Testing for Windows

LinkPoint Integration with .NET


:P
On this page:

I was spending some time today integrating LinkPoint into my Credit Card Processing classes into my West Wind Web Store for both the .NET and Fox versions. I’ve integrated a number of providers over the years and working with these Credit Card APIs is always a chore mainly because the documentation for these services is always bad.

 

LinkPoint has to be among the worst if not the worst I’ve seen.

 

I used LinkPoint about 10 years ago as my first online Merchant gateway and the configuration and setup and documentation was horrible then and it doesn’t seem like it has improved much since then. The API doesn’t look much different – the same concepts are used except that Linkpoint has add some ‘XML features’ to the interface. Note the quotes.

 

I find this an interesting business proposition. If you are a provider for an Internet based service, wouldn’t you try to make your product as easy as possible to use for your customers? To attract customers (meaning attracting developers who will have to implement this interface)? To keep support calls down with stupid questions like – ‘what do I need to install platform X?’.

 

Instead, LinkPoint seems to go out of their way to make their documentation as scattered as possible, not providing you clear documentation on how to install each of the different platform APIs (they support, COM, .NET, C++, PHP, Java and more, but don’t provide clear installation instructions for at least the COM and .NET ones). I downloaded the .NET version of the SDK, but other than the examples, there’s nothing .NET specific in this SDK. Not a word about how to set it up. Yes, I can figure it out, but there are dependencies that you won’t know about until you run your code and get errors!

 

No – it’s not rocket science and the API itself is not difficult to work with at all, but even so, it took the better part of a day to hook up a generic class front end to their API for both COM (for my VFP framework) and .NET (for the .NET version).

 

One of the really odd features of this API is the fact that they make you install a third party SSL driver (not for COM, but for .NET and C++).  This is not part of an installation but something you must download separately from the Open Source site somewhere. To find these links from the docs you first have to go to the installation page, decipher the meaning of that text to figure out which product needs this and which doesn’t. The COM interface which I did first didn’t need it, but the .NET interface did even though the docs don’t differentiate. The .NET interface failed with DLL errors which I didn’t catch.

 

A third party SSL interface. Interesting concept. Isn’t SSL built into every operating system or platform? Certainly if you were building a .NET component for distribution you could use the built in .NET SSL/HTTP support to do this and give out a component that doesn’t have any dependencies? Nope, we have to install the assembly, plus a wrapper DLL into the execution directory, then copy the SSL drivers into the System32 directory. That’s intuitive. Of course, no installer so you get to repeat and more importantly remember this exercise when you deploy your app to a live server.

 

I’m always amazed at companies that still have an API to do this. Why not go the route of direct HTTP access like Authorize.NET or AccessPoint, which eliminates the need for any additional components? Posting data via HTTPS/SSL is built into any development platform and what could be easier than posting individual values, or as would probably be the case with LinkPoint, a hierarchical XML document. Or if you do provide an API provide it optionally to create this XML document (which is what LinkPoint apparently does), but do it in a platform specific way so it’s easy to integrate without (unmentioned) dependencies.

 

LinkPoint uses XML to handle its message – all the value you set get generated into an XML document that you then feed to a transaction object which basically is the HTTP transfer mechanism. The data comes back from Linkpoint as – pseudo XML! Nope not real XML, but a string of an XML fragment. No root node. Hmmm… how hard would it have been to add the root node and XML header? Most people including myself probably will just use string extraction to retrieve the content out of this string, but if you did want to stick it into an XML document/reader you would have to add the doc root at least. Silly.

 

The point of this isn’t to rag on LinkPoint, but it seems it’s a prime example of misguided development interfaces. To be sure the LinkPoint API does its job once you have it set up, so functionally there’s no problem. But documentation and making integration easy is a key point to a developer tool. This is often forgotten by providers and especially credit card providers. I’ve worked with at least 10 providers over the last 10 years and other than Authorize.NET I’ve never seen documentation that is even close to acceptable. With Authorize.NET I was up and running with a new implementation and class wrapper in 30 minutes. Not that the Authorize.NET docs were spectacular, but accessing an HTTP POST interface that has no installation requirements gets you on your way a lot quicker than spending an hour just trying to figure out exactly which SDK you need to install and what files you need.

 

It seems doubly strange when you think that these company’s primary business comes from selling these services. They have tons of staff for tech support, but a technical writer or a developer responsible for creating useful and viewable samples is apparently too much to ask. The samples that come with LinkPoint are workable, but abstracted documentation that shows the concise requirements rather than a huge ASP.NET page, that has 250 lines of text and 20 that relate to the actual CC interface is a waste of space.

 

The CC interfaces for all these providers are also different for each of the providers. Maybe I should say thankfully so, since some provider interfaces are much easier to implement and use than others. But if a common format was used it would at least be easier to implement in generic solutions like store front software, which is bascically what I'm doing here.

 

And then there’s documentation in PDF format. PDF has to be the worst format for any technical documentation. PDFs are horrible to read, cross linking works awkwardly and you can’t easily copy text out of the document. Never mind the horrible view options in the Acrobat Reader. Anything is better than a PDF document – HTML, RTF, Word… heck even a Text file would better. Unless you print the PDF document PDF is not the right choice for documentation. And who prints things these days? And LinkPoints samples would look horrible printed since nobody bothered to try to fit the samples into the line lenghts of the document.

 

.NET Configuration

To give you a heads up here’s what I put into my documentation for the West Wind Web Store for the .NET version:

 

 

The ccLinkPoint class interfaces with the LinkPoint API via a managed DLL that interfaces with a couple of unmanaged DLLs (the SSL interfaces). The process of using LinkPoint involves:

·   Signing up with LinkPoint and getting a test account

·   Downloading and installing the .NET API

·   Using the ccLinkPoint class from within .NET

·   Enabling the class by setting a #define EnableLinkPoint

Getting and Installing the LinkPoint API


The LinkPoint API provides a variety of components for different languages and development environments. The API basically handles setting up transactions and sending the transactions via HTTPS to the LinkPoint Gateway server. To work with the API you only the appropriate component plus a little code to drive the component which is provided by the wwLinkPoint class.

 

You can download the LinkPoint API from:
https://www.linkpoint.com/viewcart/

 

You'll want to use the LinkPoint API .NET (C# or VB) download for Windows. This download includes a couple of DLLs (linkpointTransaction.dll and lpssl.dll) which you should copy in your bin or executable directory so your application can find it.

OpenSSL is a separate, required download
For .NET you will also need to download the OpenSSL DLLs which Linkpoint uses. You can go to http://www.linkpoint.com/support/ and follow the links from there to download and drop libeay.dll and ssleay.dll into your System32 directory.

 

Using the wwLinkPoint Class


Once the LinkPoint API is installed you'll need the following information from your confirmation email(s):

·   The path to the filename to which you copied your Certificate (a .PEM file)

·   Your Store Number

·   Your Store Password

·   The domain name and port number of the live or test server

 

Enabling the ccLinkPoint class

Because the LinkPoint API has a dependency on the external LinkPoint assemblies the ccLinkPoint class by default disables the class. At the top of the ccLinkPoint class there's a #define EnableLinkPoint directive, which is commented out by default. When commented the body of the class is included and any attempt to instantiate the class fails with an exception.

 

To enable the class uncomment the #define EnableLinkPoint directive. Then copy the LinkpointTransaction.dll and lpssl.dll into the bin/executable directory of your application and add a reference in your project to LinkPointTransaction.dll.

 

Although a factory pattern might have isolated this interface more cleanly it would have also required a separate assembly. Since LinkPoint is a specialty install and you will need to copy the LinkPoint DLLs explicitly anyway we opted for this simpler more integrated approach.

 

Special Properties you need to set

CC = new ccLinkPoint();

CC.MerchantPassword = App.Configuration.CCMerchantId;   // "123412314"

CC.CertificatePath = App.Configuration.CCCertificatePath;      // "d:\app\MyCert.pem"

 

// *** HTTP Link can be server name plus port

CC.HTTPLink = "staging.linkpt.net:1229";

// CC.Port = 1229;    // or specify port separately

 

 

Here’s the processing class. This relies on the parent classes properties, but it should be pretty obvious what these properties mean.

 

#define EnableLinkPoint    // Make sure to add LinkPointTransaction.dll and lpSSL.dll from the LinkPoint SDK

 

using System;

using System.Globalization;

using Westwind.Tools;

 

using LinkPointTransaction;

 

namespace Westwind.WebStore

{

      /// <summary>

      ///

      /// </summary>

      public class ccLinkPoint : ccProcessing

      {

            /// <summary>

            /// The Port used by the LinkPoint API to communicate with the server.

            /// This port will be provided to you by LinkPoint.

            /// </summary>

            public int Port = 1129;

 

            public ccLinkPoint()

            {

                  this.HttpLink = "staging.linkpt.net:1129";  // override

            }

 

            #if EnableLinkPoint

 

            /// <summary>

           /// Validates the credit card. Supported transactions include only Sale or Credit.

            /// Credits should have a negative sales amount.

            /// </summary>

            /// <returns></returns>

            public override bool ValidateCard()

            {

                  if (!base.ValidateCard())

                        return false;

                 

                  this.Error = false;

                  this.ErrorMessage = "";

 

                  // *** Parse the HttpLink for domain + port number

                  int At = this.HttpLink.IndexOf(":");

                  if (At > 0)

                  {

                        string t = this.HttpLink.Substring(At+1);

                        this.Port = int.Parse( t );

                        this.HttpLink = this.HttpLink.Substring(0,At);

                  }

 

                  // create order

                  LPOrderPart order = LPOrderFactory.createOrderPart("order");

 

                  // create a part we will use to build the order

                  LPOrderPart op = LPOrderFactory.createOrderPart();

                       

                  // Figure out what type of order we are processing

                  if (this.OrderAmount < 0 )

                  {

                        op.put("ordertype","CREDIT");

                        this.OrderAmount = this.OrderAmount * -1;

                  }

                  else if (this.ProcessType == ccProcessTypes.Credit )

                        op.put("ordertype","CREDIT");

                  else if (this.ProcessType == ccProcessTypes.Sale )

                        op.put("ordertype","SALE");

                  else if (this.ProcessType == ccProcessTypes.PreAuth )

                        op.put("ordertype","PREAUTH");

                                   

                  // add 'orderoptions to order

                  order.addPart("orderoptions", op );

     

                  // Build 'merchantinfo'

                  op.clear();

                  op.put("configfile",this.MerchantId);

 

                  // add 'merchantinfo to order

                  order.addPart("merchantinfo", op );

 

                  // Build 'billing'

                  // Required for AVS. If not provided,

                  // transactions will downgrade.

                  op.clear();

                  op.put("name",this.Name);

                  op.put("address1",this.Address);

                  op.put("city",this.City);

                  op.put("state",this.State);

                  op.put("zip",this.Zip);

                  op.put("country",this.Country);  // 2 letter ID

                  op.put("email",this.Email);

                  op.put("phone",this.Phone);

                 

                  int  AddrNum = 0;

                  try

                  {

                        string T = this.Address.Substring( 0 , this.Address.IndexOf(" ") ).Trim();

                        AddrNum = int.Parse(T);

                  }

                  catch { ; }

                 

                  if (AddrNum != 0) 

                  {

                        op.put("addrnum",  AddrNum.ToString( System.Globalization.CultureInfo.InvariantCulture.NumberFormat) );

                  }

                  order.addPart("billing", op );

 

                  // Build 'creditcard'

                  op.clear();

                  op.put("cardnumber",this.CreditCardNumber );

                  op.put("cardexpmonth",this.CreditCardExpirationMonth);

                  op.put("cardexpyear",this.CreditCardExpirationYear);

 

                  order.addPart("creditcard", op );

 

                  // Build 'payment'

                  op.clear();

                  op.put("chargetotal",this.OrderAmount.ToString( System.Globalization.CultureInfo.InvariantCulture.NumberFormat ) );

 

                  order.addPart("payment", op );     

 

                  // *** Trasnaction Details

                  op.clear();

                  if (this.OrderId != null && this.OrderId != "" )

                        op.put("oid",this.OrderId );

 

                  order.addPart("transactiondetails",op);

 

                  if (this.Comment != "" )

                  {

                        // *** Notes

                        op.clear();

                        op.put("comments",this.Comment );

                        order.addPart("notes",op);

                  }

 

                  // create transaction object 

                  LinkPointTxn LPTxn = new LinkPointTxn();

 

                  // get outgoing XML from the 'order' object

                  this.RawProcessorRequest = order.toXML();

 

                  // Call LPTxn

                  try

                  {

                        this.RawProcessorResult = LPTxn.send(this.CertificatePath,this.HttpLink,this.Port, this.RawProcessorRequest );

                  }

                  catch(Exception ex)

                  {

                        if (this.RawProcessorResult != "")

                        {

                              string Msg = wwUtils.ExtractString(this.RawProcessorResult,"<r_error>","</r_error>") ;

                              if (Msg == "")

                                    this.SetError(ex.Message);

                              else

                                    this.SetError(Msg);

                        }

                        else

                        {    

                              this.SetError(ex.Message);

                        }

 

                        this.ValidatedMessage = this.ErrorMessage;

                        this.ValidatedResult = "FAILED";

                        return false;

                  }

                 

                  this.ValidatedResult = wwUtils.ExtractString(this.RawProcessorResult,"<r_approved>","</r_approved>");

                  if (this.ValidatedResult == "")

                        this.ValidatedResult = "FAILED";

                  this.ValidatedMessage = wwUtils.ExtractString(this.RawProcessorResult,"<r_message>","</r_message>");

 

                  if (this.ValidatedResult == "APPROVED")

                  {

                        this.SetError(null);

                  }

                  else

                  {

                        this.SetError( wwUtils.ExtractString(this.RawProcessorResult,"<r_error>","</r_error>") );

                        this.ValidatedMessage = this.ErrorMessage;

                  }

                 

                  this.LogTransaction();

 

                  return !this.Error;

            }

            #else

            public override bool ValidateCard()

            {

                  throw new Exception("ccLinkPoint Class is not enabled. Set the EnableLinkPoint #define in the source file.");

            }

            #endif

      }

}

 

When I get some time I will write up this whole Credit Card Processing hierarchy business into an article. Until then hopefully this linkpoint sample will help someone out.


The Voices of Reason


 

Michael Giagnocavo
January 15, 2005

# re: LinkPoint Integration with .NET -

Yea, I ran into the same thing. I just did xml = "<root>" + xml + "</root>" :).

http://www.atrevido.net/blog/PermaLink.aspx?guid=60cdc849-099b-47f4-9fb8-54b07b5368f2

Shawn
April 06, 2005

# re: LinkPoint Integration with .NET -

Linkpoint is a joke. I have had nothing but problems and resistance from them. I have come across many forum posts and blogs ranting about the poor quality of their support. I would recommend anyone to say away from them.

Per the OpenSSL dependency; they offer an assembly with the openssl protocal built in which will allow you to install their api on a server lacking the dll, but you will need to call their support line to gain access too it, its not availble off their web site.

Rick Strahl
April 06, 2005

# re: LinkPoint Integration with .NET -

Hi Shawn, basically that's the experience I had with them about 10 years ago or so and looking over the APIs etc. I figured not much had changed.

Now, why would any company hold back something useful like this assembly? And worse why would they be using this in the first place if SSL is part of the platform <g> and they could probably talk to their own API with that.

jim b
April 15, 2005

# re: LinkPoint Integration with .NET -

linkpoint 5 years ago was crap, it still is. how can 2 api's be so different- authorize.net and linkpoint that is.

Mansoor
June 11, 2005

# re: LinkPoint Integration with .NET -

Recently linkpoint upgraded their API and moved their DataCenter from Burbank, CA to Denver, CO and this migration was nothing but a nightmare for their customers. Transactions were getting lost, they were issuing PRE AUTH codes and losing the data for that. The support line were clogged for a whole weak with wait times exceeding two hours to talk to a rep. They stopped responding to all support emails. To make things worst, if you opened a support issue using their online form, they stopped issuing out automatic case #, instead they required that you wait 24 hours to get the case #. Of course even after 72 hours, no case #'s were issued.

I personally cannot believe a company like this is in business and people are using it.

My clients are now in the process of signing up with alternate vendors.

http://linkpointcentralsucks.blogspot.com/2005/05/linkpoint-central-truly-sucks.html

Jim R
January 12, 2006

# no response from Linkpoint server?

fellow Linkpoint sufferers,
I'm using it for a website, and sometimes the API doesn't get a response back--even though the transaction occured.
Any leads on what is going on, and what to do about it? I'm thinking it's a timeout thing, but I don't see a way to set the timeout.
This is my first use of Linkpoint.
Thanks for any help you can offer.

Nay
February 02, 2006

# re: LinkPoint Integration with .NET -

Updated location of the OpenSSL download info (which of course they dont update in their documentation unless you dig tons):

http://www.linkpoint.com/support/openssl_version.htm

LPT usr
March 14, 2006

# re: LinkPoint Integration with .NET -

For Some transactions response not coming properly,but card is charged,it happens regularly.

Nathan
April 25, 2006

# re: LinkPoint Integration with .NET -

I am integrating linkpoint into our e-commerce strore. Even though this was brief it helped alot. Thanks

Chris
June 09, 2006

# re: LinkPoint Integration with .NET -

Does anyone have the API definition for the setDbgOpts() method on the LinkPointTransaction object? Thanks!

Phil
August 24, 2006

# re: LinkPoint Integration with .NET -

I'm most of the way down the road of getting up on LinkPointAPI setup, when I found blog while searching for "this Unable to load DLL (lpssl.dll)."

Has LinkPoint improved any? Bad doc I can stand, but no response to transactions and spt issues would be a deal killer!

Rob Taylor
September 07, 2006

# re: LinkPoint Integration with .NET -

I signed up for LinkPoint last Friday and I just posted this message to their support and the MA - marchantlane.com

----------------------------------------
Please cancel my linkpoint account immediately. Your API documentation is a joke and so is the process. You should do some Googling to see what others are saying about your service especially in .NET circles. Your docs are not current, lack information, and are scattered all over the place.
------------------------------------------

LinkPoint truly does suck ass!

Mike Wills
December 05, 2006

# re: LinkPoint Integration with .NET -

Well, I have this working thanks to this article. But was wondering if anyone knows how to fill in the invoice number? I can't seem to find or figure out if it is possible.

Justin
December 14, 2006

# re: LinkPoint Integration with .NET -

Apparently support for .net 2.0 is not there. After 40 minutes on the phone I was told it may or may not work with 2.0. How nice! It has been out for over a year now. Get on the ball.

eric
January 01, 2007

# re: LinkPoint Integration with .NET -

I have used them for more than 4 years. I have to tell that
Everybody who uses Linkpoint should say byebye to this garbage gateway. I cannot believe there is another gateway that could be worse than Linkpoint.

Some comments about their API code, the API dll product and so on. I even do not want to comment. they are just garbage.

M-ACE
March 26, 2007

# re: LinkPoint Integration with .NET -

For the people getting the 'Unable to load DLL (lpssl.dll)' error.

Make sure you copy the files:

libeay32.dll
ssleay32.dll

...into your %SystemRoot%\system32 directory. Usually C:\windows\system32


You can download the files at:

http://www.linkpoint.com/support/openssl_version.htm

James M. Allen
May 02, 2007

# re: LinkPoint Integration with .NET -

Well, thank you for this post and all of the comments about the situation! I was going crazy dealing with integrating a client's Linkpoint API account and a .net application. Thanks for the updated links to the DLLs and all the useful code. Now I know to recommend against LinkPoint in the future...

David Hoyt
May 21, 2007

# re: LinkPoint Integration with .NET -

Yes, yes, I agree that linkpoint royally stinks. But I had to use it for a business that I partly own. I didn't make the decision to use LinkPoint so we have been unfortunately stuck with it.

That said, I thought I'd let everyone know that there's a way around the open ssl dependencies entirely. But first you have to make a PKCS#12 version of your PEM-format certificate. Just follow the instructions at http://www.linkpoint.com/support/lpintguide/helpfiles/requirements_integration_java.htm to do so.

After you've done that, use code similar to the following to post your generated XML:

protected static bool ValidateCertificateAllowAll(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) {
    return true;
}

public static string RawSSLRequest(Uri RequestURI, byte[] PostData, X509Certificate[] Certificates) {
    TcpClient client = null;
    SslStream sslStream = null;
    try {
        client = new TcpClient(RequestURI.Host, RequestURI.Port);
        
        //Create an SSL stream that will close the client's stream.
        sslStream = new SslStream(
            client.GetStream(),
            false,
            new RemoteCertificateValidationCallback(ValidateCertificateAllowAll),
            null
        );

        //Do the magic...
        sslStream.AuthenticateAsClient(RequestURI.Host, new X509CertificateCollection(Certificates), System.Security.Authentication.SslProtocols.Tls, false);
        if (PostData != null && PostData.Length > 0) {
            sslStream.Write(PostData);
        }
        sslStream.Flush();

        //Get response...
        byte[] buffer = new byte[2048];
        StringBuilder response = new StringBuilder();
        int bytes = -1;
        while ((bytes = sslStream.Read(buffer, 0, buffer.Length)) > 0)
            response.Append(Encoding.UTF8.GetString(buffer, 0, bytes));
        return response.ToString();

    } catch (Exception ex) {
        return null;
    } finally {
        if (client != null) client.Close();
        if (sslStream != null) sslStream.Close();
        if (sslStream != null) sslStream.Dispose();
    }
}


Create your X509Certificate object like so:

new X509Certificate2("C:\MyCert.p12", "MyPassword", X509KeyStorageFlags.PersistKeySet);


Then call RawSSLRequest() and voila!

I've spent a few days and created a complete (as far as I know) wrapper around the linkpoint API. Linkpoint is almost usable now! If anyone's interested just drop me a line: david@hoytsoft.org - I'd be glad to send you the code. (c:

David Hoyt
May 22, 2007

# re: LinkPoint Integration with .NET -

You can download the code at: http://www.hoytsoft.org/linkPointAPI.aspx

I added some example code, but look at the zip file's example project to see how it works. It's pretty straightforward.

J Searles
August 04, 2007

# re: LinkPoint Integration with .NET -

It is unfathomable to comprehend how something so relatively simple could be made so complex by a company who wants to sell a product. I am in my 10th hour of fighting with this Linkpoint API garbage. Thanks to high Heavens for this blog. I thought maybe it was me, but to see that LinkPoint is ignoring many more coders is my reassurance that I need to look elsewhere. Calling Authorize.net right now.

JS

Larry Aultman
August 24, 2007

# re: LinkPoint Integration with .NET -

I echo the sentiments of most of you and lament the decision to use LinkPoint. They clearly have issues with the latest versions of .NET, Vista, and Server 2008 beta 3 (.NET 3.5). They don't seem to have any plan to provide support for the changing platforms. Their code is stuck in 2004 .NET 1.1 they don't support a the XML standard and unlike most their competitors don't have a web service version of their gateway.

The parent company reported that they processed in excess of $1 trillion USD. In my humble opinion they need to either provide services or get out of the business.

My deepest gratitude to David Hoyt of Hoytsoft. His gracious posting of his solution gave me just the insight and clues that I needed to get our application to work with LinkPoint. Thank you David for making that available. For those who might be reading this post Mr. Hoyt has a very good solution. I was able to compile and run without any changes his sample application in Visual Studio 2008 beta 2 on a Vista machine. While I didn't use his code directly, his gave me the necessary functionality to make our application work with a very minor modification.

Larry Aultman

Anand kumar
October 29, 2007

# re: LinkPoint Integration with .NET -

Hi,

I was Not able to add the lpssl.Dll to my project and i am having the following Dll's in the windows directory(libeay32.dll, ssleay32.dll)then also iam getting the error of Dll is is not accessable or not of the teh tyrp .DLL or not a component like.

Please hepl me out form this

Thanks you.

John H
January 15, 2008

# re: LinkPoint Integration with .NET -

Adding to the posts from David Hoyt and Larry A. Thanks for the code David. I had to change the creation of the X509Certificate2 object when I went to the production server. Before the change I received a "the system cannot find the specified file" exception.
X509Certificate cert = new X509Certificate2(File.ReadAllBytes(certPath), certPwd, X509KeyStorageFlags.MachineKeySet);

Kokkos
February 27, 2008

# Win32 OpenSSl Installer

These posts echo my experiences for the past week with Linkpoint API.

A linkpoint customer sevice rep gave me this 3rd party download link of the OpenSSL installer - Linkpoint specific.

http://www.slproweb.com/products/Win32OpenSSL.html

I verified the installer compiles the correct machine name and copies these files to the c\windows\system32 directory:

libeay32.dll
ssleay32.dll


Kokkos

Deep
March 17, 2008

# re: LinkPoint Integration with .NET -

Hello!
Thanks for you wonderful post.After that i am getting this error -

Unable to load certificate ERRs: wsa=33558530 err=33558530 ssl=537317504 sys=33558530. INFO: ACE_SSL (2324|2904) error code: 33558530 - error:02001002:system library:fopen:No such file or directory

Could you please help me to solve this error.

Thanks in advance.
Deep

Sreeraj
August 06, 2008

# Error on live server

Hi what an excellent article

But I got one error when I implemented LinkPoint Transaction in live server(using windows 2003 server)

Unable to connect to server. ERRs: wsa=0 err=604389476 ssl=0 sys=0. INFO: ACE_SSL (2280|4064) error code: 604389476 - error:24064064:random number generator:SSLEAY_RAND_BYTES:PRNG not seeded

Everything is working in my local system using windows xp. What happened to live server....

Any solution? pls help me.

Rick Strahl
August 06, 2008

# re: LinkPoint Integration with .NET -

Make sure you have installed all the required support assemblies on the live server - specifically the SSL Dlls which are not delivered by Linkpoint. Additionally realize that LinkPoint must run in full trust because it's accessing these native dlls. Most likely the problem you have is related to this.

Sreeraj
August 07, 2008

# re: LinkPoint Integration with .NET -

Hi

Thank you for your reply.

All assemblies are installed. but still the error is coming. I found the description of this error in http://www.error1002.com/api/api_errors.php
And the decription is:
"This error is a problem with the COM Object that seems to affect Windows 2003 server.
There is no work around currently available."

Do I want to buy COM Object? Is this a solution?
Any solution to solve this? Help me.

dale
August 21, 2008

# Project: Integrate LinkPointAPI

We have a project and seek people to complete it.

The candidate should have experience with integrating http://linkpoint.com/


for charging customers credit card. we need to send the credit card info to
third party (the web credit card company), like YouPay.com. I have some
sample code, need help who has the experience to finish the job.

Interested parties reply me here.

Thanks.

S Sreedhar
August 27, 2008

# re: Project: Integrate LinkPointAPI

pls contact...

S Sreedhar
August 27, 2008

# re: Project: Integrate LinkPointAPI

pls contact sree8485@yahoo.co.in

muhammad arfan
September 10, 2008

# re: LinkPoint Integration with .NET -

I m facing this problem. please help me.

Unable to load certificate ERRs: wsa=33558530 err=33558530 ssl=537317504 sys=33558530. INFO: ACE_SSL (3536|4036) error code: 33558530 - error:02001002:lib(2):func(1):reason(2)

S Sreedhar
September 16, 2008

# re: LinkPoint Integration with .NET -

Hi Muhammad,

Make sure you have the .pem file and set the correct path to that file. This error is due to the path or the pem file is not correct.

Samantha
October 06, 2008

# re: LinkPoint Integration with .NET -

Hi Rick,

I've got the most bizarre error message back from using the LinkPointTransaction.dll and haven't been able to find a solution anywhere. Essentially, sometimes when I make the call:

this.RawProcessorResult = LPTxn.send(this.CertificatePath,this.HttpLink,this.Port, this.RawProcessorRequest );

I end up getting the following exception:

Exception Type: System.AccessViolationException
Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Data: System.Collections.ListDictionaryInternal
TargetSite: System.String lp_send(System.String, System.String, System.String, Int32, System.String, Int32, System.String, Int32)
HelpLink: NULL
Source: LinkPointTransaction

Also, this is the stack trace:

at LinkPointTransaction.LPSSL_Wrapper.lp_send(String inXml, String clientCertPath, String host, Int32 port, String outXml, Int32 outLen, String logFile, Int32 logOpts)
at LinkPointTransaction.LinkPointTxn.send(String sXml)
at LinkPointTransaction.LinkPointTxn.send(String sClientCertPath, String sHost, Int32 iPort, String sXml)

I'm not sure what's going on because most of the time it works; only occassionally do I get this error.

Do you have any suggestions about what could be going on here or how I should proceed?

Geoff
November 05, 2008

# re: LinkPoint Integration with .NET -

We are also getting the memory fault, but it's been so long since Rick posted this article that I'm sure he's moved onto bigger and better things. Message we get is:

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.:
at LinkPointTransaction.LPSSL_Wrapper.lp_send(String inXml, String clientCertPath, String host, Int32 port, String outXml, Int32 outLen, String logFile, Int32 logOpts)
at LinkPointTransaction.LinkPointTxn.send(String sXml)
at LinkPointTransaction.LinkPointTxn.send(String sClientCertPath, String sHost, Int32 iPort, String sXml)

Chris
January 16, 2009

# re: LinkPoint Integration with .NET -

We have gotten the memory fault error as well. We successfully narrowed it down to the dll linkpoint had given us to process the transactions. The problem occurs when two or more transactions tried to use the dll to process a transaction at the same time. If a transaction was in the process of validating and an attempt was made to invoke the same dll for a new transaction this error may occur.

Reetesh
January 20, 2009

# re: LinkPoint Integration with .NET -

Hi

I am gettigns same error

Unable to connect to server. ERRs: wsa=0 err=604389476 ssl=0 sys=0. INFO: ACE_SSL (2280|4064) error code: 604389476 - error:24064064:random number generator:SSLEAY_RAND_BYTES:PRNG not seeded

Please help me what I do to solve this. it is working in local machine fine but not on server.

reply ASAP

Thanks

Shadi Jawhar
March 08, 2009

# re: LinkPoint Integration with .NET -

PRNG not seeded
This is the error that is responded
<r_error> Unable to connect to server. ERRs: wsa=0 err=604389476 ssl=0 sys=0. INFO: ACE_SSL (97168|97448) error code: 604389476 - error:24064064:random number generator:SSLEAY_RAND_BYTES:PRNG not seeded
</r_error>

That was moving on one of servers, but when we moved to a new server, same enviroment, it did not work

Thanks for help

Dean Hallman
March 12, 2009

# re: LinkPoint Integration with .NET -

I'm interested in David Hoyt's LinkPoint wrapper, but the link (http://www.hoytsoft.org/linkPointAPI.aspx) no longer works. If someone has this code or an updated link, please post it.

Thanks,
Dean

Josh Wever
March 16, 2009

# re: LinkPoint Integration with .NET -

I don't know if this will help anyone but I figured I would throw it out there:

I had everything working great using LinkPoint's test accounts but, when I move everything over to the live account I get the following:

Unable to load certificate ERRs: wsa=33558530 err=33558530 ssl=537317504 sys=33558530. INFO: ACE_SSL (740|328) error code: 33558530 - error:02001002:lib(2):func(1):reason(2)

After checking what should be the cause(s); wrong path, permission problem, corrupted file, below ended up being the fix.

What I ended up having to do is make a copy of the live store .pem file/rename it/copy contents of original file to copy of original file/update web.config file. Do a test order and viola appropriate SGS error was received.

How anyone in their right mind would expect this to be the fix I don't know.

Note to LinkPoint: Please get rid of OpenSSL as a requirement, as it complicates an already needlessly complicated process.

Matthew Firth
April 13, 2009

# re: LinkPoint Integration with .NET -

I really wish someone had a solution to this problem:

Unable to connect to server. ERRs: wsa=0 err=604389476 ssl=0 sys=0. INFO: ACE_SSL (97168|97448) error code: 604389476 - error:24064064:random number generator:SSLEAY_RAND_BYTES:PRNG not seeded

It works fine on my development box: Windows Vista + .net 2.0

But on 2003 server it flat out doesn't work.

I have contacted LinkPoint but they are completely clueless about this problem, and suggested that I use Linux instead.

I have spent days trying to solve this problem, I hope someone can tell me how to fix it otherwise I will have to switch to authorize.net.

Thanks

GT
April 21, 2009

# re: LinkPoint Integration with .NET -

Funny thing, worked great when I was using IIS and moved to plesk (vhost) on IIS and everythhing broke.

Move the 3 OpenSLL file to bin. It worked great after that.


libeay32
libssl32
ssleay32

Haresh
May 05, 2009

# re: LinkPoint Integration with .NET -

Hi,
I have use LinkPointTransaction.dll in my site and its working well in local. The problem arise when I uploaded on godaddy server. Here I echo that error message
"Security Exception
Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file."

Exception Details: System.Security.SecurityException: System.Security.Permissions.SecurityPermission "

I have also read lots of article reg it to slove problem but still not solve my problem.

If you have any idea then please help me.
Thanks in advance.

Regards,
Haresh

Burton Newman
May 21, 2009

# re: LinkPoint Integration with .NET -

I am been having the same issue as Haresh, I have nothing but headaches with this stupid gateway accept my client is stuck with this junk.

I found out that Godaddy specifically blocks port 1129 only on their shared hosting packages not full server areas. So LinkPoint will not work on Godaddy. So I moved to Aplus.net and found that Linkpoint doesn't like IIS7. So I have moved to another hosting provider now and I think I back to square one with same issue which I believe is the port being blocked. I have checked my code and it works fine on my Windows Vista & Visual Studios 2005 system just fine, LinkPoint just hates Sharing a Host.

So if anyone has got some time I need help :-)

vadimas
May 29, 2009

# re: LinkPoint Integration with .NET -

The same error mentioned here before after moving to GoDaddy virtual dedicated server:

connect to server. ERRs: wsa=0 err=604389476 ssl=0 sys=0. INFO: ACE_SSL (48120|28012) error code: 604389476 - error:24064064:random number generator:SSLEAY_RAND_BYTES:PRNG not seeded

HappyGoLucky
June 11, 2009

# re: LinkPoint Integration with .NET -

Without question LinkPoint is the worst processor I've found. Don't waste your time with them. Aside from the technical glitches, they randomly started charging us fees that were never a part of our original agreements. Better off going with Google, PayPal, Authorize.Net, or Website Payments Pro.

John Burrows
June 11, 2009

# re: LinkPoint Integration with .NET -

If anyone needs it i have worked out how to get LinkPoint software to work on a Windows 2008 64 Bit server running IIS7. I will post more later but in case i don't get to it just contact me

Thanks

Matthew Firth
June 17, 2009

# re: LinkPoint Integration with .NET -

I have the libraries to get aorund this if anybody wants just ask

Jeff reif
July 06, 2009

# re: LinkPoint Integration with .NET -

John, I am trying to get the LinkPoint integration to work on windows 2008 standard edition (64 Bit) running IIS7. Just wondering if you have some instructions that may help me out. Thanks

David Hoyt
July 11, 2009

# re: LinkPoint Integration with .NET -

The link to my site should be working again. I happened to be switching servers at the time Dean made his post. But they're also a part of my asp.net enterprise suite:

http://www.codeplex.com/aspnetSuite

Just download that and pull out the gateway stuff and you're set.

Mark
July 30, 2009

# re: LinkPoint Integration with .NET -

@John Burrows, @Mathew Firth, Hey guys I am trying to figure this out too... please send any instructions or libraries on how to get this to work on Windows 2008 64bit platform.

Matthew Firth
July 30, 2009

# re: LinkPoint Integration with .NET -


Nick Warren
August 03, 2009

# re: LinkPoint Integration with .NET -

Is there a way someone can post detailed instructions on how to get this work with Windows Server 2008 - I guess that might help many of us which are not stuck in the past like LinkPoint!

Any help would be greatly appreciated!

Nick
August 04, 2009

# re: LinkPoint Integration with .NET -

Since nobody bother to do it, I guess it's my turn to give something back to the community!

I went through hell to try and fix this issue so I decided it's worth my time to sum everything up for future victims!

My current system is Windows SBS 2008 with IIS 7.

You can dowload the alternative DLL files from here: http://www.dragonlights.net/DragonLights/phpbb/viewtopic.php?f=4&t=233&p=233

Follow the instructions at the link - You would need to use regsvr32 to register the DLL - Just open CMD with "Run as Administrator". Please make sure you run the regsvr32 from the WOW64 directory to allow the 32 BIT dll to register properly. Everything else will just return an error, so make sure you do it right.

If you are using the .NET solution like I was, you would need to adjust your code to fit the COM Object. It is VERY similar and only requires 2-3 adjustmants inside the code file of asp (.vb or .c, whatever you are using). Check their documantation for the exact changes.

After you're done, make sure to use the Aspcomp="true" at the header of your file. T

hat wasn't the end of it on my end. I had to reconfigure the IIS7 to work with the 32 BIT application.

1) Change the application pool to support the 32 bit.

2) You will also have to change the application.config.

Detailed instructions here: http://blogs.msdn.com/carloc/archive/2009/02/04/service-unavailable-in-iis7-with-32-bit-application-pool.aspx

You will face one last error which you will solve by running: %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-[name='xpress'] This needs to be done using "Run As Admin" CMD.

Hopefully this will help all of you who wasted A LOT OF TIME figuring this out.

Nick.

Matthew Firth
August 04, 2009

# re: LinkPoint Integration with .NET -

One more gotcha...

In your web.config make sure you specify a full path to your cert files partials will not work

Darrin
November 01, 2009

# re: LinkPoint Integration with .NET -

When creating the X509 Certificate based off of the .pem file sent from LinkPoint, what do you use for the password? I created a separate file with just the certificate portion of the .pem file and used that as the certificate file for the X509Certificate2 object which seems to work, but I don't have a password?

Thank you.

John Hennesey
November 19, 2009

# re: LinkPoint Integration with .NET -

If it helps anyone - in the sample solution they give, there are two dll's - the wrapper (LinkPointTransaction.dll) and the SSL (lpssl.dll). I got my solution to work just fine with only these two items. I did not have to install cURL or OpenSSL. After 7 phone calls, and 7 different answers, I finally got someone on the phone who knew what he was talking about. He stated that if you use the two dll's, the lpssl.dll will handle encryption, and it isn't necessary to install openSSL. and his words about cURL "You DEFINITELY do not have to install it."

Should I encounter any errors as we move this to production, I will update my post. So far I have had no problems running through a few hundred live transactions on staging, and a couple on secure.

Good luck!

AGuy
February 16, 2010

# re: LinkPoint Integration with .NET -

Linkpoint has a web service API Now.

Maria
March 25, 2010

# re: LinkPoint Integration with .NET -

Hi,

Please help me to solve this, iam getting the below error message always:

Result: Unable to resolve the hostname. ERRs: wsa=0 err=11004 ssl=0 sys=11004. INFO: ACE_INET_Addr::ACE_INET_Addr: https://secure.linkpt.net:1129: The requested name is valid and was found in the database, but it does not have the correct associated data being resolved for.

My XML:
---------
<order>
<billing><addrnum>123</addrnum><zip>12345</zip></billing>
<payment><chargetotal>4</chargetotal></payment>
<creditcard><cardnumber>4000000000000010</cardnumber>
<cardexpmonth>10</cardexpmonth><cardexpyear>2010</cardexpyear>
</creditcard>
<shipping></shipping>
<orderoptions><result>LIVE</result><ordertype>SALE</ordertype></orderoptions>
<transactiondetails></transactiondetails>
<merchantinfo><configfile>1909425970</configfile>
<keyfile>1909425970.pem</keyfile><port>1129</port>
<host>staging.linkpt.net</host>
</merchantinfo>
</order>

Miguel Feliciano
August 09, 2010

# re: LinkPoint Integration with .NET -

@Maria - Did you get the code working?

@AGuy & Everyone - Have you integrated the Web Service API into the WestWind cart?

I would like to see some sample code or even an update to the ccLinkPoint class and some instructions on how to get this thing working properly.

Any help is much appreciated.

Zahid Kamran
September 21, 2010

# re: LinkPoint Integration with .NET -

Hi,

I read your article.it is quite comprehensive. Thanks for this. Now i have some confusion. Please Answer my following questions.

Q1. How can i find documentation about LinkPoint DLL, as there is only one documentation that i have find on http://www.linkpoint.com/support/ , that is about web service. can you please give the exact documentation about LinkPoint DLL, not webserviec.

Q2. i am unable to fine OpenSLL on http://www.linkpoint.com/support/. can you provide me the exact link.

Q3. what is AddrNum that you had used. As i don't have documentation so i am unable to understand?

Waiting for your kind response. Thanks in advance.

Pradeep
November 04, 2010

# re: LinkPoint Integration with .NET -

I am using linkPoint API downloaded from firsdata.com. Actually i have integrated everything which is requirement. Linkpoint API is working fine on my local machine. then i uploaded on a live server. i am getting a error as mentioned below. i don't know how to resolve it. I have uploaded all .dll files in bin folder but same error is coming. Please help me guys..... it's urgent....


Unable to load DLL 'lpssl.dll': Invalid access to memory location. (Exception from HRESULT: 0x800703E6)

West Wind  © Rick Strahl, West Wind Technologies, 2005 - 2024